Kom igångKom igång gratis

Monte Carlo-sampling för en diskret händelsemodell med SimPy

Nu ska vi bygga samma Monte Carlo-analys med en SimPy-version av modellen. SimPy-modellen har en generator som heter manufacturing_process, vilken simulerar olika processer, samt en funktion som heter run_monte_carlo som kör modellen flera gånger och lagrar informationen i en NumPy-array med namnet time_record.

Koden som ritar upp resultaten liknar den som användes i föregående övning, men har flyttats till en funktion med namnet plot_results() som visas nedan.

def plot_results():

    df_disc = pd.DataFrame({cNam[0]: process_line_space, cNam[1]: time_record})
    fig = sns.lineplot(data=df_disc, x=cNam[0], y=cNam[1], marker="o")
    fig.set(xlim=(0, len(processes) + 1))
    plt.plot() 

Monte Carlo-samplingloopen genererar en serie möjliga processförlopp, som visas i figuren. Monte Carlo-förlopp för olika processscenarier.

Den här övningen är en del av kursen

Diskret händelsesimulering i Python

Visa kurs

Övningsinstruktioner

  • Registrera och yield:a process_duration.
  • Spara den aktuella tiden i time_record.
  • Kör en for-loop för n_trajectories sampel med dummyvariabeln t.
  • Skapa SimPy-miljön, lägg till processer och kör modellen.

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

def manufacturing_process(env):
    global time_record
    for p in range(len(processes)):
        proc_p = processes[p]
        process_duration = random.gauss(proc_p["Average_Duration"], proc_p["Standard_Deviation"])

        # Clock-in and yield the process_duration
        yield ____

        # Save the current time in time_record
        time_record[p + 1] = ____

def run_monte_carlo(n_trajectories):

    # Run a for-loop for n_trajectories samples with dummy variable t
    ____

        # Create the SimPy environment, add processes and run the model
        env = ____
        env.____(manufacturing_process(env))
        env.____()
        
        plot_results()
    plt.show()

run_monte_carlo(n_trajectories = 100)
Redigera och kör kod