制造优化:Score & Rank
让我们继续使用挂钟工厂的离散事件模型,搭建一个 "Score & Rank" 优化流程。为便于查看,制造流程再次在下表中汇总。相关信息已存入名为 processes 的字典列表中,每个流程对应一个字典。该字典的键与表格的列名一致。

本练习用于生成图表的 plot_results() 方法已预加载,代码如下所示。
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()
Monte-Carlo 抽样循环会生成一系列可能的流程轨迹并对其评分,如图所示。

本练习是课程的一部分
Python 中的离散事件模拟
练习说明
- 为每个流程添加评分贡献。已知流程时长存储在
process_duration_all[s, p],对应权重存储在proc_p["score_weight_0_10"]。 - 将 for 循环设置为使用
s作为哑变量,运行NUM_SIMULATIONS次 Monte-Carlo 抽样。 - 运行函数
run_monte_carlo()中的 Monte Carlo 引擎(这将生成 "score" 与 "rank" 图)。
交互式实操练习
通过完成这段示例代码来试试这个练习。
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
____