- Michał Janiec
- Wojciech Krzystek
Contact: See committer emails :)
- http://www.flowshop.mfbiz.pl/sformulowanie-problemu.php (Polish only)
- Anna Ławrynowicz Genetic algorithms for advanced planning and scheduling in supply networks, Difin, 2013 ( GAFAPAS )
par. Scheduling in various machine environments p.34-36
- http://en.wikipedia.org/wiki/Open-shop_scheduling
- Solving open shop with GA: GAFAPAS par. Open shop scheduling problem p. 112-113
- GAFAPAS chapt. 3.5. Crossover, par. Cycle crossover (CX) p. 62-67
As described here: https://github.com/maciek123/pyage/wiki#running-your-own-configuration
With proper config from pyage/conf folder
Example:
flowshop_emas_conf.py
- Basic config of flow shop solver with EMAS approach, local machine only.
Solves small problem (the first one from tai20x5.txt
)
Calculations are terminated after 10 seconds and the best found solution is returned
launcher.py
- Facilitates execution automation and collecting results.
Can be used for repeating execution for single configuration or running multiple configurations in series.
Warning: Executing cartesian product of different configurations can take long time.
Calculations for benchmarks (below) took about 48hrs.
time_matrix
- matrix of execution times of a particular job on a particular processor.
Format:time_matrix[processor_id][job_id]
denotes time needed to perform jobjob_id
th on theprocessor_id
th processor.
Seeinput_data
folder for more benchmarks for the solver.
Due to characteristics of the problem (NP), strict solutions are unknown, but acceptable makespan range is specified for each.
makespan
- total time needed to process all the jobs- permutation yielding calculated
makespan
. for further clarification see: PermutationGenotype documentation results
(flow shop only) -results[processor_id][job_id]
is the time of completion jobjob_id
th onprocessor_id
th processor.
Time is absolute: Calculated since the beginning of processing all the jobs.
-
PerumtationGenotype
- Specifies a representaiton of a specimen. Contains: -
self.permutation
= list of int - genes. Flow shop: jobs permutation, open shop: see GAFAPAS -
self.fitness
= int - fitness -
Initializer
- Initializes population with specimens -
*Evaluation
calculates makespan for permutation represented by currently processed specimen, based ontime_matrix
.fitness = -makespan
-
time_matrix
passed as constructor parameter -
PermutationMutation
mutates a specimen -
count
- constructor parameter -
def mutate(self, genotype)
- performscount
swaps of randomly chosenpermutation
items -
MemeticPermutationMutation
- performs multiple mutations (multiple samples * multiple rounds) of a specimen and chooses the one yielding the best makespan, to be the outcome for a processed specimen -
FirstHalfSwapsCrossover
produces a child of two specimens based of both parents features. -
def cross(self, p1, p2)
- finds a minimal list of swaps required to transformp1
intop2
and performs half of it, yielding a in-between specimen fromp1
top2
.
See GAFAPAS chapt. 3.5. Crossover, par. Cycle crossover (CX) p. 62-67 for more details.
https://docs.google.com/document/d/17MDBkl22GAAb_Qb3xXM0eSGsVnH4iVcxAXOaNVnm5uc/edit?usp=sharing
To show solution correctness, random_solver.py
has been implemented.
Results on sample problem:
- Genetic Algorithm: makespan: 1297
- random solver: makespan: ~ 1312