Zielfunktionen und Systemoptimierung

Diskrete-Ereignis-Simulation mit Python

Diogo Costa (PhD, MSc)

Adjunct Professor, University of Saskatchewan, Canada & CEO of ImpactBLUE-Scientific

Systemoptimierung

  • Systemoptimierung

    • Optimale Betriebskonfiguration finden
  • Menschengetriebene Prozesse

    • Maximaler Output bei minimalen Kosten (weniger Ressourcen, weniger Zeit)
  • Prozesse mit größtem Einfluss auf den Systemoutput identifizieren

  • Monte-Carlo-Sampling

    • Erfolg messen und Ergebnisse ranken
  • Zielfunktionen

    • Zielgröße, die Leistungsziele setzt
Diskrete-Ereignis-Simulation mit Python

Zielfunktion

  • Mathematischer Ausdruck für das Ziel

  • Simulationsszenarien bewerten

Beispiel

  • Prozess A: 35%
  • Prozess B: 20%
  • Prozess C: 45%

Summe: 100%

  • Prozess C hat das höchste Gewicht

Search & Stop: Verschiedene Modellkonfigurationen laufen lassen und stoppen, wenn die Bedingung erfüllt ist

while total_duration < 24:
      model_to_run()

Score & Rank: Simulationsergebnisse nach Gewichtung bewerten

for i in range(num_runs):
   out_1, out_2 = model_to_run(i)
   scores[i] = 0.3 * out_1 + 0.7 * out_2
Diskrete-Ereignis-Simulation mit Python

Ansatz 1: Search & Stop

  • Monte-Carlo-Sampling für mehrere Szenarien
  • Besteht aus verschiedenen nichtdeterministischen Prozessabläufen
  • Schleife zur Suche des Optimums wird beendet, wenn die Bedingung erfüllt ist

Beispiel

scenario_num = 0
while scenario_num == 0 or total_duration[s] > 40:
  scenario_num += 1
  env = simpy.Environment()
  env.process(manufacturing_proc(env))
  env.run()
  plot_results()

Diagramm mit der Response-Envelope einer Fertigungsaktivität mit sequenziellen Prozessen; die blaue untere Linie entspricht dem letzten Lauf, der die Search-&-Stop-Kriterien erfüllt.

Diskrete-Ereignis-Simulation mit Python

Ansatz 2: Score & Rank

  • Monte-Carlo-Sampling für mehrere Szenarien
  • Ergebnisse bewerten und ranken

Beispiel: Fertigungsindustrie

Mit mehreren sequentiellen Aufgaben (Prozessen), z. B. einer Autoproduktionslinie.

def objective_function_calc():
  score_objfunc = np.ones(num_scenarios)

  for s in range(num_scenarios):
    for p in range(len(processes)):

      score_objfunc[s] += (
         processes[p]["duration_hours"]
         * processes[p]["score_weight"])
Diskrete-Ereignis-Simulation mit Python

Ansatz 2: Score & Rank

Score

„ROT“: Niedriger Score; „BLAU“: Hoher Score Streudiagramm mit dem Score der Zielfunktion für die simulierten Szenarien der Prozesse „Entladen & Vorbereiten“, „Schneiden“ und „Polieren“.

Rang

Simulationen nach Score einordnen Diagramm, das die Szenarien nach dem Score der Zielfunktion für „Entladen & Vorbereiten“, „Schneiden“ und „Polieren“ rankt.

Diskrete-Ereignis-Simulation mit Python

Kritische, leistungsbegrenzende Prozesse erkennen

Search & Stop

Diagramm mit der Response-Envelope einer Fertigungsaktivität mit sequenziellen Prozessen; die blaue untere Linie entspricht dem letzten Lauf, der die Search-&-Stop-Kriterien erfüllt. Die Minimaldauer der Prozesse der besten Simulationen ist markiert.

  • Blaue Linie erfüllt „Stop“-Kriterium

    • Gesamtdauer = 30 Min
  • Aufschlüsselung der „besten“ Simulation:

    • Prozess 1: ca. 10 Min (sum = 20 min)
    • Prozess 2: ca. 10 Min (sum = 20 min)
    • Prozess 3: ca. 8 Min (sum = 28 min)
    • Prozess 4: ca. 2 Min (sum = 30 min)
  • „Prozess 1“ ist kritisch für das Ziel

Diskrete-Ereignis-Simulation mit Python

Kritische, leistungsbegrenzende Prozesse erkennen

Score

Ziel: niedrigster Score = kürzeste Dauer Streudiagramm mit dem Score der Zielfunktion für die simulierten Szenarien der Prozesse „Entladen & Vorbereiten“, „Schneiden“ und „Polieren“. Die Minimaldauer der Prozesse der besten Simulationen ist markiert.

Rang

„Prozess 1“ ist kritisch für das Ziel Diagramm, das die Szenarien nach dem Score der Zielfunktion für „Entladen & Vorbereiten“, „Schneiden“ und „Polieren“ rankt. Die Minimaldauer der Prozesse der besten Simulationen ist markiert.

Diskrete-Ereignis-Simulation mit Python

Lass uns üben!

Diskrete-Ereignis-Simulation mit Python

Preparing Video For Download...