目标函数与系统优化

Python 中的离散事件模拟

Diogo Costa (PhD, MSc)

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

系统优化

  • 系统优化

    • 识别最优运行配置
  • 人工主导流程

    • 以最低成本实现最大产出(更少资源、更短时间)
  • 识别对系统产出影响更大的工序

  • 蒙特卡罗采样

    • 度量成功并对结果排名
  • 目标函数

    • 设定绩效目标的函数
Python 中的离散事件模拟

目标函数

  • 描述产出目标的数学表达式

  • 为仿真情景打分

示例

  • 工序 A:35%
  • 工序 B:20%
  • 工序 C:45%

合计:100%

  • 工序 C 权重最高

Search & Stop:运行不同模型配置,满足条件即停止

while total_duration < 24:
      model_to_run()

Score & Rank:基于加权标准为仿真结果打分

for i in range(num_runs):
   out_1, out_2 = model_to_run(i)
   scores[i] = 0.3 * out_1 + 0.7 * out_2
Python 中的离散事件模拟

方法一:搜索并停止

  • 使用蒙特卡罗采样运行多种情景
  • 由不同的非确定性过程组成
  • 满足条件时中断最优情景搜索循环

示例

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

图示包含一系列串行工序的制造活动响应包络,蓝色底线为满足"搜索并停止"方法条件的最后一次运行。

Python 中的离散事件模拟

方法二:评分与排名

  • 使用蒙特卡罗采样运行多种情景
  • 对结果打分并排名

示例:制造业

涉及多项串行任务(或工序),如汽车生产线。

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"])
Python 中的离散事件模拟

方法二:评分与排名

得分

"红":低分;"蓝":高分 散点图,显示"卸载与准备""切割""抛光"等流程的各情景目标函数得分。

排名

按得分对仿真运行排名 图表按"卸载与准备""切割""抛光"等流程的目标函数得分对情景进行排名。

Python 中的离散事件模拟

识别限制性能的关键工序

搜索并停止

图示包含一系列串行工序的制造活动响应包络,蓝色底线为满足"搜索并停止"方法条件的最后一次运行。标出了最佳仿真得到的各工序最短时长。

  • "蓝色"线满足"停止"条件

    • 总时长 = 30 分钟
  • "最佳"仿真分解:

    • 工序 1:约 10 分钟 (sum = 20 min)
    • 工序 2:约 10 分钟 (sum = 20 min)
    • 工序 3:约 8 分钟 (sum = 28 min)
    • 工序 4:约 2 分钟 (sum = 30 min)
  • "工序 1"对达成目标最关键

Python 中的离散事件模拟

识别限制性能的关键工序

得分

目标:得分越低 = 时长越短 散点图,显示"卸载与准备""切割""抛光"等流程的各情景目标函数得分。标出了最佳仿真得到的各工序最短时长。

排名

"工序 1"对达成目标最关键 图表按"卸载与准备""切割""抛光"等流程的目标函数得分对情景进行排名。标出了最佳仿真得到的各工序最短时长。

Python 中的离散事件模拟

Passons à la pratique !

Python 中的离散事件模拟

Preparing Video For Download...