Fertigungsoptimierung: Score & Rank
Lass uns dasselbe ereignisdiskrete Modell der Wanduhrfabrik verwenden und eine "Score & Rank"-Optimierungsroutine aufsetzen. Zur Erinnerung ist der Fertigungsprozess in der folgenden Tabelle nochmals zusammengefasst. Die Informationen wurden in einer Liste von Dictionaries namens processes gespeichert, mit einem Dictionary pro Prozess. Die Schlüssel in diesen Dictionaries entsprechen den Spaltenüberschriften der Tabelle.

Die Methode plot_results(), die in dieser Übung für die Diagramme verwendet wird, wurde vorab geladen und ist unten dargestellt.
def plot_results(objective_func):
# Score
fig, axes = plt.subplots(1, len(processes), sharey=True, figsize=(10, 8))
for p in range(len(processes)):
sns.scatterplot(ax=axes[p], x=process_duration_all[:, p], y=objective_func, c=objective_func, cmap="turbo_r")
axes[p].set_title(processes[p]["Name"], rotation = 20, horizontalalignment='left')
axes[p].set_xlabel("Duration [min]", rotation = -10)
axes[p].grid()
axes[0].set_ylabel("Objective function score")
plt.show()
# Rank
index_sort = np.argsort(objective_func)
fig, axes = plt.subplots(1, len(processes), sharey=True, figsize=(10, 8))
for p in range(len(processes)):
sns.lineplot(ax=axes[p], x=np.linspace(0, NUM_SIMULATIONS, NUM_SIMULATIONS),
y=process_duration_all[index_sort, p], color="orchid")
axes[p].set_title(processes[p]["Name"], rotation = 20, horizontalalignment='left')
axes[p].set_xlabel("Score-ranked scenarios", rotation = -10)
axes[p].grid()
axes[0].set_ylabel("Duration [min]")
plt.show()
Die Monte-Carlo-Sampling-Schleife erzeugt eine Reihe möglicher Prozessverläufe und bewertet sie – wie in der Abbildung gezeigt.

Diese Übung ist Teil des Kurses
Diskrete-Ereignis-Simulation mit Python
Anleitung zur Übung
- Addiere den Score-Beitrag jedes Prozesses. Die Prozessdauern findest du in
process_duration_all[s, p], die jeweiligen Gewichte inproc_p["score_weight_0_10"]. - Setze die for-Schleife so auf, dass
NUM_SIMULATIONSMonte-Carlo-Läufe mitsals Laufvariable ausgeführt werden. - Starte die Monte-Carlo-Engine über die Funktion
run_monte_carlo()(dies erzeugt sowohl die "score"- als auch die "rank"-Diagramme).
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
def objective_function_calc():
objective_func = np.ones(NUM_SIMULATIONS)
for s in range(NUM_SIMULATIONS):
for p in range(len(processes)):
proc_p = processes[p]
# Add the score contribution of each process
objective_func[s] += ____
plot_results(objective_func)
def run_monte_carlo():
# Set the for-loop to run NUM_SIMULATIONS Monte-Carlo runs
____
env = simpy.Environment()
env.process(manufractoring_process(env, s))
env.run()
objective_function_calc()
# Run the Monte Carlo function
____