finale Version: Readme für Dr. Gaggl, Reqs ergänzt (kp ob notwendig), weiss als Farbe im Plot ausschliessen, main um simanneal-params ergaenzt
This commit is contained in:
parent
d6f3eb9dd3
commit
03c5fb612d
23
Readme.txt
Normal file
23
Readme.txt
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
README
|
||||||
|
-----
|
||||||
|
|
||||||
|
Für die Ausführung des Algorithmus wird Python 3 (empfohlene Version: 3.6.1) benötigt.
|
||||||
|
Die Packages, die zusätzlich gebraucht werden, können der requirements.txt entnommen werden.
|
||||||
|
(Installation kann hier einzeln oder über den Befehl: python -m pip install -r requirements.txt)
|
||||||
|
|
||||||
|
Zur Ausführung bitte im Terminal in den Ordner src gehen und dort das Skript main.py starten.
|
||||||
|
Parameter, die hierbei möglich sind:
|
||||||
|
-h zeigt alle Optionen an
|
||||||
|
-p aktiviert die Ausgabe über den Plotter als Diagramm
|
||||||
|
-l wird benötigt falls die Eingabe eine Liste von Problemen ist (d.h. für jobshop1.txt)
|
||||||
|
-i Index des Problems in der Liste (nur relevant bei -l)
|
||||||
|
-t setzt die Starttemperatur des Simulated Annealings
|
||||||
|
-s setzt die maximalen Umformungsschritte pro Generierung einer neuen Lösung
|
||||||
|
-a setzt die Wahrscheinlichkeit, pro Umformungsschritt auch eine Lösung zu akzeptieren, obwohl
|
||||||
|
noch nicht die maximalen Umformungsschritte erreicht sind
|
||||||
|
|
||||||
|
-t -s und -a müssen nicht alle gesetzt sein, dann wird der jeweilige Defaultwert verwendet
|
||||||
|
Defaultwerte: max_temp = 300, max_steps = 250, accept_prob = 0.01
|
||||||
|
|
||||||
|
Beispielaufruf:
|
||||||
|
python .\main.py -p -l -i 2 -t 50 ..\inputdata\jobshop1.txt
|
|
@ -1,3 +1,5 @@
|
||||||
mypy
|
mypy
|
||||||
Arpeggio
|
arpeggio
|
||||||
matplotlib
|
matplotlib
|
||||||
|
numpy
|
||||||
|
tkinter
|
|
@ -38,8 +38,8 @@ def accept(solution):
|
||||||
Maybe skip this during the first step to generate a more
|
Maybe skip this during the first step to generate a more
|
||||||
random solution.
|
random solution.
|
||||||
"""
|
"""
|
||||||
#return tighten(solution)
|
return tighten(solution)
|
||||||
return solution
|
#return solution
|
||||||
|
|
||||||
|
|
||||||
def tighten(solution):
|
def tighten(solution):
|
||||||
|
|
|
@ -11,7 +11,9 @@ def create_plot(problem, solution):
|
||||||
|
|
||||||
with plt.xkcd():
|
with plt.xkcd():
|
||||||
fig,ax = plt.subplots()
|
fig,ax = plt.subplots()
|
||||||
colorlist = list(colors.XKCD_COLORS.values())
|
col = colors.XKCD_COLORS
|
||||||
|
del col['xkcd:white']
|
||||||
|
colorlist = list(col.values())
|
||||||
random.shuffle(colorlist)
|
random.shuffle(colorlist)
|
||||||
for m in range(0, problem.machines):
|
for m in range(0, problem.machines):
|
||||||
mach_ops = [ x for x in solution if problem.problem_data[x[1][0]][x[1][1]][1] == m ]
|
mach_ops = [ x for x in solution if problem.problem_data[x[1][0]][x[1][1]][1] == m ]
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
#import Parser.js1_style as p
|
import Parser.js1_style as p
|
||||||
import Parser.js2_style as p
|
#import Parser.js2_style as p
|
||||||
from SchedulingAlgorithms import simanneal as sim
|
from SchedulingAlgorithms import simanneal as sim
|
||||||
from Output import output as o
|
from Output import output as o
|
||||||
|
|
||||||
#problem = p.parse_file("../inputdata/jobshop1.txt")[0]
|
problem = p.parse_file("../inputdata/jobshop1.txt")[0]
|
||||||
problem = p.parse_file("../inputdata/sample")
|
#problem = p.parse_file("../inputdata/sample")
|
||||||
sim.init(problem)
|
sim.init(problem)
|
||||||
solution = sim.anneal()
|
solution = sim.anneal()
|
||||||
o.create_plot(problem, solution)
|
o.create_plot(problem, solution)
|
36
src/main.py
36
src/main.py
|
@ -13,6 +13,9 @@ Command line options:
|
||||||
-p activate pretty output (requires tkinter)
|
-p activate pretty output (requires tkinter)
|
||||||
-l assume that a file contains multiple problems, default is only 1
|
-l assume that a file contains multiple problems, default is only 1
|
||||||
-i index of the problem you want solved. has no effect without l
|
-i index of the problem you want solved. has no effect without l
|
||||||
|
-t set parameter max_temp of simulated annealing
|
||||||
|
-s set parameter max_steps of simulated annealing
|
||||||
|
-a set parameter accept_prob of simulated annealing
|
||||||
|
|
||||||
Invocation:
|
Invocation:
|
||||||
python [-hlp] file
|
python [-hlp] file
|
||||||
|
@ -24,8 +27,8 @@ def main():
|
||||||
js1 = False
|
js1 = False
|
||||||
plot = False
|
plot = False
|
||||||
try:
|
try:
|
||||||
opts, args = getopt.getopt(sys.argv[1:], 'hpli:')
|
opts, args = getopt.getopt(sys.argv[1:], 'hpli:t:s:a:')
|
||||||
except getoptGetoptError as err:
|
except getopt.GetoptError as err:
|
||||||
print(err)
|
print(err)
|
||||||
sys.exit()
|
sys.exit()
|
||||||
if ('-h', '') in opts:
|
if ('-h', '') in opts:
|
||||||
|
@ -38,6 +41,12 @@ def main():
|
||||||
js1 = True
|
js1 = True
|
||||||
idx = [int(x[1]) for x in opts if x[0]=='-i']
|
idx = [int(x[1]) for x in opts if x[0]=='-i']
|
||||||
idx = idx[0] if idx else -1
|
idx = idx[0] if idx else -1
|
||||||
|
max_temp = [int(x[1]) for x in opts if x[0]=='-t']
|
||||||
|
max_temp = max_temp[0] if max_temp else -1
|
||||||
|
max_steps = [int(x[1]) for x in opts if x[0]=='-s']
|
||||||
|
max_steps = max_steps[0] if max_steps else -1
|
||||||
|
accept_prob = [int(x[1]) for x in opts if x[0]=='-a']
|
||||||
|
accept_prob = accept_prob[0] if accept_prob else -1
|
||||||
if not args:
|
if not args:
|
||||||
print("No file given.")
|
print("No file given.")
|
||||||
sys.exit()
|
sys.exit()
|
||||||
|
@ -56,7 +65,28 @@ def main():
|
||||||
problem = problem[idx]
|
problem = problem[idx]
|
||||||
print(problem)
|
print(problem)
|
||||||
sim.init(problem)
|
sim.init(problem)
|
||||||
solution = sim.anneal()
|
if not max_temp == -1:
|
||||||
|
if not max_steps == -1:
|
||||||
|
if not accept_prob == -1:
|
||||||
|
solution = sim.anneal(max_temp, max_steps, accept_prob)
|
||||||
|
else:
|
||||||
|
solution = sim.anneal(max_temp = max_temp, max_steps = max_steps)
|
||||||
|
else:
|
||||||
|
if not accept_prob == -1:
|
||||||
|
solution = sim.anneal(max_temp = max_temp, accept_prob = accept_prob)
|
||||||
|
else:
|
||||||
|
solution = sim.anneal(max_temp = max_temp)
|
||||||
|
else:
|
||||||
|
if not max_steps == -1:
|
||||||
|
if not accept_prob == -1:
|
||||||
|
solution = sim.anneal(max_steps = max_steps, accept_prob = accept_prob)
|
||||||
|
else:
|
||||||
|
solution = sim.anneal(max_steps = max_steps)
|
||||||
|
else:
|
||||||
|
if not accept_prob == -1:
|
||||||
|
solution = sim.anneal(accept_prob = accept_prob)
|
||||||
|
else:
|
||||||
|
solution = sim.anneal()
|
||||||
print(solution)
|
print(solution)
|
||||||
print(sim.rate(solution))
|
print(sim.rate(solution))
|
||||||
if plot:
|
if plot:
|
||||||
|
|
Loading…
Reference in a new issue