User Tools

Site Tools


code:ga_scheduling

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
code:ga_scheduling [2009/01/11 12:43] pkubanekcode:ga_scheduling [Unknown date] (current) – external edit (Unknown date) 127.0.0.1
Line 6: Line 6:
  
 Important is to remember that lower constraint violation value means better schedule, and higher objective function value means better schedule. If you come to objective which naturally produces better schedules when lower value is calculated, you can easily change function by using //1/f(x)// instead. Important is to remember that lower constraint violation value means better schedule, and higher objective function value means better schedule. If you come to objective which naturally produces better schedules when lower value is calculated, you can easily change function by using //1/f(x)// instead.
 +
 +In order to use GA scheduling, you will need to fill in database. You will also find it useful to use //pyrts2// to visualise schedule, so you will be able to see how scheduling algorithm behaves.
 +
 +===== Database setup =====
 +
 +//Note: Currently you need to build database from REL_0_8_0 branch. See bellow how to retrieve it.//
 +
 +You need to fill **tickets** and **accounts** tables.
 +
 +**Tickets** table contains those fields:
 +
 +^ Field name ^ Data type ^ Description ^
 +| schedticket_id     | integer                     | unique ID of ticket - primary key  |
 +| tar_id             | integer                     | ID of target which belongs to the ticket |
 +| account_id         | integer                     | ID of account - can be null if this ticket is out of accounting |
 +| obs_num            | integer                     | Maximal number of observations - scheduler will try to schedule only observations bellow this number |
 +| sched_from         | timestamp without time zone | Schedule observation from this time; if null, schedule anytime |
 +| sched_to           | timestamp without time zone | Schedule observation to this time; if null, schedule anytime |
 +| sched_interval_min | interval                    | Minimal interval between observations |
 +| sched_interval_max | interval       | Maximal interval between observations |
 +
 +===== Using pyrts2 to preview schedules =====
 +
 +
 +====== Obtaining and modifying code ======
  
 The GA scheduler code currently lives only in [[http://rts-2.svn.sf.net/viewvc/rts-2/branches/rts-2/REL_0_8_0|REL_0_8_0]] branch. Merging to trunk is expected in a few weeks. To get the code, issue: The GA scheduler code currently lives only in [[http://rts-2.svn.sf.net/viewvc/rts-2/branches/rts-2/REL_0_8_0|REL_0_8_0]] branch. Merging to trunk is expected in a few weeks. To get the code, issue:
Line 129: Line 154:
         constraints.push_back (CONSTR_OBS_NUM);         constraints.push_back (CONSTR_OBS_NUM);
 } }
 +</code>
 +
 +===== 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://rts-2.svn.sf.net/viewvc/rts-2/branches/rts-2/REL_0_8_0/src/scheduler/rts2schedule.cpp|rts2schedule.cpp]] you will need to add new objective to //getObjectiveName// function:
 +
 +<code c++>
 +const char* getObjectiveName (objFunc obj)
 +{
 +        const static char* objNames[] = { "VISIBILITY", "ALTITUDE", "ACCOUNT", "DISTANCE",
 +                "DIVERSITY_TARGET", "DIVERSITY_OBSERVATIONS", "SINGLE"};
 +        return objNames[(int) obj];
 +}
 +</code>
 +
 +Then procedure is similar - add objective to case in //Rts2Schedule::getObjectiveFunction//, add function to calculate it to //Rts2SchedObs// class.
 +
 +And finally add it to //objectives// in [[http://rts-2.svn.sf.net/viewvc/rts-2/branches/rts-2/REL_0_8_0/src/scheduler/rts2schedbag.cpp|rts2schedbag.cpp]]:
 +
 +<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> </code>
code/ga_scheduling.1231674208.txt.gz · Last modified: 2009/01/11 00:00 (external edit)