code:ga_scheduling
Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
code:ga_scheduling [2009/01/11 12:27] – created, describe how to add constraint pkubanek | code:ga_scheduling [Unknown date] (current) – external edit (Unknown date) 127.0.0.1 | ||
---|---|---|---|
Line 3: | Line 3: | ||
Algorithm and ideas used for scheduling are described in [[http:// | Algorithm and ideas used for scheduling are described in [[http:// | ||
- | If you will add new code, it currently lives only in [[http:// | + | The algorithm mention constraints and objectives. Constrains method return number of constraint violations and the algorithm tries to minimize them, providing schedule with zero constraint violations. So far there are not soft and hard constraint, and implementation of them to scheduling can be an interesting topics. The algorithm search for maximal values of the objective functions. |
+ | |||
+ | Important is to remember that lower constraint violation value means better schedule, and higher objective function value means better schedule. | ||
+ | |||
+ | In order to use GA scheduling, | ||
+ | |||
+ | ===== Database setup ===== | ||
+ | |||
+ | //Note: Currently you need to build database from REL_0_8_0 branch. See bellow how to retrieve | ||
+ | |||
+ | You need to fill **tickets** and **accounts** tables. | ||
+ | |||
+ | **Tickets** table contains those fields: | ||
+ | |||
+ | ^ Field name ^ Data type ^ Description ^ | ||
+ | | schedticket_id | ||
+ | | tar_id | ||
+ | | account_id | ||
+ | | obs_num | ||
+ | | sched_from | ||
+ | | sched_to | ||
+ | | sched_interval_min | interval | ||
+ | | sched_interval_max | interval | ||
+ | |||
+ | ===== Using pyrts2 to preview schedules ===== | ||
+ | |||
+ | |||
+ | ====== Obtaining and modifying code ====== | ||
+ | |||
+ | The GA scheduler code currently lives only in [[http:// | ||
<code bash> | <code bash> | ||
Line 11: | Line 40: | ||
Most of functionality you are interested in is located in [[http:// | Most of functionality you are interested in is located in [[http:// | ||
- | ===== Adding new constraint ===== | + | ===== Adding |
To add a new constraint, you should first declare its symbolic name in [[http:// | To add a new constraint, you should first declare its symbolic name in [[http:// | ||
Line 112: | Line 141: | ||
For definition of //isGood// function, please have a look to [[http:// | For definition of //isGood// function, please have a look to [[http:// | ||
+ | |||
+ | After you are done, you shall add new constraint to constraint which will be used in scheduling. This is done in [[http:// | ||
+ | |||
+ | <code c++> | ||
+ | Rts2SchedBag:: | ||
+ | { | ||
+ | // ommited lines.. | ||
+ | |||
+ | constraints.push_back (CONSTR_VISIBILITY); | ||
+ | constraints.push_back (CONSTR_SCHEDULE_TIME); | ||
+ | constraints.push_back (CONSTR_UNOBSERVED_TICKETS); | ||
+ | constraints.push_back (CONSTR_OBS_NUM); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ===== Adding new objective function ===== | ||
+ | |||
+ | Process of adding new objective function is similar to adding new constraint. If you understand how constraint functions are added, you will not have any problems understanding how objectives are added. | ||
+ | |||
+ | You will need to add new objective symbolic name to objFunc enumeration. In [[http:// | ||
+ | |||
+ | <code c++> | ||
+ | const char* getObjectiveName (objFunc obj) | ||
+ | { | ||
+ | const static char* objNames[] = { " | ||
+ | " | ||
+ | return objNames[(int) obj]; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Then procedure is similar - add objective to case in // | ||
+ | |||
+ | And finally add it to // | ||
+ | |||
+ | <code c++> | ||
+ | // fill in parameters for NSGA | ||
+ | objectives.push_back (ALTITUDE); | ||
+ | objectives.push_back (ACCOUNT); | ||
+ | objectives.push_back (DISTANCE); | ||
+ | objectives.push_back (DIVERSITY_TARGET); | ||
+ | |||
+ | </ |
code/ga_scheduling.1231673236.txt.gz · Last modified: 2009/01/11 00:00 (external edit)