Doelfuncties en systeemoptimalisatie

Discrete Event Simulation in Python

Diogo Costa (PhD, MSc)

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

Systeemoptimalisatie

  • Systeemoptimalisatie

    • Optimale operationele configuratie bepalen
  • Mensgestuurde processen

    • Maximale output tegen minimale kosten (minder resources, minder tijd)
  • Processen met grootste impact op systeemoutput identificeren

  • Monte Carlo-sampling

    • Succes meten en resultaten rangschikken
  • Doelfuncties

    • Doelfunctie die prestatie-eisen vastlegt
Discrete Event Simulation in Python

Doelfunctie

  • Wiskundige uitdrukking met het outputdoel

  • Scenario’s scoren

Voorbeeld

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

Totaal: 100%

  • Proces C heeft het grootste gewicht

Search & Stop: Voer varianten uit en stop zodra aan de voorwaarde is voldaan

while total_duration < 24:
      model_to_run()

Score & Rank: Score simulatieresultaten op basis van weegcriteria

for i in range(num_runs):
   out_1, out_2 = model_to_run(i)
   scores[i] = 0.3 * out_1 + 0.7 * out_2
Discrete Event Simulation in Python

Aanpak 1: Search & Stop

  • Monte Carlo-sampling voor meerdere scenario’s
  • Bestaat uit verschillende niet-deterministische procesgebeurtenissen
  • Zoeklus naar optimaal scenario stopt zodra aan de voorwaarde is voldaan

Voorbeeld

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()

Plot met de response envelope van een productie-activiteit met opeenvolgende processen, waarbij de blauwe onderste lijn de laatste run is die voldeed aan de Search & Stop-criteria.

Discrete Event Simulation in Python

Aanpak 2: Scoren & rangschikken

  • Monte Carlo-sampling voor meerdere scenario’s
  • Resultaten scoren en rangschikken

Voorbeeld: maakindustrie

Met opeenvolgende taken (processen), zoals een autoproductielijn.

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"])
Discrete Event Simulation in Python

Aanpak 2: Scoren & rangschikken

Score

"ROOD": Lage score; "BLAUW": Hoge score Spreidingsdiagram met de doelfunctiescore van de verschillende scenario’s voor de processen "Lossen en voorbereiden", "Snijden" en "Polijsten".

Rang

Score- en rangschik simulaties Plot die scenario’s rangschikt op basis van de doelfunctiescore voor de processen "Lossen en voorbereiden", "Snijden" en "Polijsten".

Discrete Event Simulation in Python

Kritieke processen identificeren die prestaties beperken

Zoeken & stoppen

Plot met de response envelope van een productie-activiteit met opeenvolgende processen. De blauwe onderste lijn is de laatste run die voldeed aan de criteria van de Search & Stop-methode. De minimale duur per proces uit de beste simulaties is gemarkeerd.

  • Blauwe lijn voldeed aan de stop-criteria

    • Totale duur = 30 min
  • Resultaten van “beste” simulatie:

    • Proces 1: ~10 min (sum = 20 min)
    • Proces 2: ~10 min (sum = 20 min)
    • Proces 3: ~8 min (sum = 28 min)
    • Proces 4: ~2 min (sum = 30 min)
  • “Proces 1” is cruciaal om dit te halen

Discrete Event Simulation in Python

Kritieke processen identificeren die prestaties beperken

Score

Doel: laagste score = kortste duur Spreidingsdiagram met de doelfunctiescore van de verschillende scenario’s voor de processen "Lossen en voorbereiden", "Snijden" en "Polijsten". De minimale duur per proces uit de beste simulaties is gemarkeerd.

Rang

“Proces 1” is cruciaal om dit te halen Plot die scenario’s rangschikt op basis van de doelfunctiescore voor de processen "Lossen en voorbereiden", "Snijden" en "Polijsten". De minimale duur per proces uit de beste simulaties is gemarkeerd.

Discrete Event Simulation in Python

Laten we oefenen!

Discrete Event Simulation in Python

Preparing Video For Download...