优化器Witness Optimizer简介和应用

在仿真一个实际系统的时候,往往希望得出系统绩效最优时的系统配置;或者希望得出系统绩效相对较好的几种方案的系统配置,通过比较和权衡,选择其中的一种配置进行实际的实施。比如前面的生产线,给定一个利润目标函数=产出量×价格-设备成本-人力成本,它同产出率成正比,同设备数量和人员数量成反比,在特定约束条件下,目标函数越大越好。为了得出目标函数的最大值,可以通过逐步的改变系统中设备和人员数量,然后仿真运行,比较每次仿真运行的利润目标函数。如果每种设备(共有四种)的数量可以是1台或2台,人员数量可以是12人,则系统的配置方案就有2×2×2×2×232种,在进行方案比较时,就需要改动并运行模型32次,效率较低。

为了解决这一问题,Lanner公司通过使用最新的优化技术研究成果以及启发式算法,开发了一种独特的优化算法模块OPTIMIZER,通过使用该模块,设定了目标函数以及模型元素可能选择值,就可以连续的、按照特定算法快速有效的搜索出模型的最优解决方案。

下面将通过一个优化实例来深入了解OPTIMIZER的作用及其操作方法。

1  示例模型流程介绍

有一家组装电脑的小型公司,通过促销广告来吸引订单,根据客户订单来决定生产、检测、发运。其WITNESS仿真模型如图1所示,模型下载

1   优化示例模型的可视化界面

该系统的处理流程如下:

l  客户响应广告,提出订单Request

l  每个订单请求Request需要员工组AStaffA)或员工组B中的一名员工使用电脑或纸质记事簿记录下来,电脑和记事簿的数量可能是23个;究竟是需要员工A还是员工B进行记录。

l  在必要时候,需要同客户就订单问题进行电话沟通,这儿有34部电话,由员工组A或员工组B进行联系;

l  电脑由工程师(Engineer)进行组装(Build);

l  电脑由工程师或员工组B进行检测(Test);检测时间需要4550分钟,90%的电脑通过检测,10%的电脑需要重新组装;

2  优化变量

对该系统涉及到的变量及其意义和取值列于表1,系统通过这些组合来得出获得最优目标函数值的变量取值。

优化变量列表

变量名称

说明

变量可能取值

变量取值数

累积组合

Logdist.value

记录订单所需的时间值,取决于电脑记录还是记录簿记录

10 or 15

2

2

Testcyc.value

检测时间,取决于检测者

50 or 45

2

4

Choice1.value

选择员工进行订单记录

01or 2

3

12

Choice2.value

选择员工或工程师进行检测操作

0 or 1

2

24

StaffA.quantity

A类员工的数量

35

3

72

StaffB.quantity

B类员工的数量

37

5

360

Engineer.quantity

工程师数量

24

3

1080

Act001.quantity

订单记录站点数量

2 or 3

2

2160

Act002.quantity

回访电话机数量

3 or 4

2

4320

Act003.quantity

检测站点数量

37

5

21600

3  相关时间值

l  订单到达:1/10分钟;

l  订单记录时间:取决于记事簿记录还是电脑记录,记录时间服从均值为Logdist,标准差为Logdist/10的正态分布;记事簿记录时,Logdist15;电脑记录时,Logdist10;对应设置于Act001的加工时间:NORMAL (LogDist,LogDist / 10.0,100 + N)

l  订单确认时间:服从最小值为10,最大值为40的均匀随机分布;对应设置于Act001的加工时间:UNIFORM (10.0,40.0,200 + N)

l  组装时间:服从最小值为10,最大值为20的均匀随机分布;对应设置于Act001的加工时间:UNIFORM (20.0,40.0,400 + N)

l  检测时间:取决于检测机器的类型,或50分钟,或45分钟;对应设置于Act001的加工时间:TestCyc

  员工选择规则

4.1 订单记录处理

根据变量choice1的值的不同,选择StaffAStaffB。如果choice10,则仅有StaffA可以进行订单记录处理;如果choice11,则既可以StaffA也可以是StaffB进行订单记录;如果choice12,则仅有StaffB可以进行订单记录处理。对应设置Act001Labor Rule规则如下:

IF Choice1 = 0

StaffA#1

ELSEIF Choice1 = 1

StaffA#1 OR StaffB#1

ELSE

! Choice 1 = 2

StaffB#1

ENDIF

4.2 订单确认处理

既可以StaffA也可以是StaffB进行订单确认处理。对应设置Act002Labor Rule规则如下:

StaffA#1 OR StaffB#1

4.3 电脑组装处理

组装工作仅有Engineer可以处理。对应设置Act003Labor Rule规则如下:

Engineer#1

4.4 检测处理

根据变量choice2的值的不同,选择EngineerStaffB。如果choice20,选择B类员工进行检测;如果choice21,既可以Engineer也可以是StaffB进行检测。对应设置Act004Labor Rule规则如下:

IF Choice2 = 0

       StaffB#1

ELSE

! Choice2 = 1

       StaffB#1 OR Engineer#1

ENDIF

  目标函数

进行优化模块的运行,必须设定目标函数,系统根据目标函数值的比较进行算法搜索计算。本例中的目标函数计算总的收益减去生产成本所得的净利润。

5.1 函数体程序及其解释

RCount = 0.0         ! 变量初始化

RCount = NSHIP (Request) * 100.0     ! 计算收益,每台电脑价格为100

RCount = RCount - NQTY (Engineer) * 80.0 - NQTY (StaffA) * 60.0 - NQTY (StaffB) * 60.0      !收益减去员工的工资,工程师每天工资80,员工工资每天60!

IF LogDist = 15

       LogCost = 1.0        !记事簿记录,每次需要成本为1.0

ELSE

       LogCost = 50.0      ! 电脑记录,每次需要成本为50.0

ENDIF

IF TestCyc = 50

       TestCost = 50.0       !使用A类检测设备,检测一台电脑的成本

ELSE

       TestCost = 60.0       !使用B类检测设备,检测一台电脑的成本

ENDIF

RCount = RCount - NQTY (Act001) * LogCost - NQTY (Act003) * TestCost

!收益减去记录的成本和检测的成本,得到净收益!

RETURN  Rcount      !返回净收益值

5.2 系统函数介绍

5.2.1  NSHIP(part_name)

功能:返回被送出系统SHIPPED的某种零部件元素的数量。

参数:part_name,名型,需要统计的part元素的名称。

示例:BILLABLE = NSHIP(CARTON)

     在这个例子中,NSHIP函数计算出被发送出系统的CARTON零部件的数量,然后将值赋给变量BILLABLE

5.2.2  NQTYelement_name

功能:返回模型系统中,特定元素的数量。

参数:element_name,名型,需要统计的元素的名称。

示例:TOTAL_DRILLS = NQTY(DRILL)

在这个例子中,NQTY函数统计出模型系统中元素DRILL的数量,然后将值赋给变量TOTAL_DRILLS

注:该函数不能够用来统计模型中的part元素的数量;为了统计模型中part元素的数量,使用NWIP函数来统计模型中某种part元素的在制品数量。

6   

从变量表上可以看出,本模型的配置方案一共有21600种,采用手工方式,逐个方案进行设计和运行,显然不太现实。而使用优化模块就能够很方便的得出优化方案。

6.1 优化步骤    

l  打开WITNESS

l  打开WITNESS安装路径下的optimizer文件夹下的Bprbase.mod; 或者下载文件中的Bprbase.mod文件;

l  点击菜单model/optimize…,将弹出Model Optimization 4.0设置窗口;

l  Model Optimization 4.0设置窗口中进行设置;

l  优化运行;

l  结果分析。

6.2 Model Optimization 4.0设置窗口介绍

Model Optimization 4.0设置窗口如图2所示,窗口上有两个设置页框:ScenarioTracking

6.2.1  Tracking页框

允许设置最优结果的显示范围,例如显示前100个最优方案数据,还是显示前10个最优方案数据,只要在Show Best Results下面的文本框中填入100或者10即可。

6.2.2  Scenario页框

包括变量Variables、目标函数Objective Function、结果池Answer Pool、运行控制Run Control、算法Algorithm、对话按钮六个区域。

2  Model Optimization 4.0设置窗口

l  变量Variables区域显示当前优化方案的变量列表,通过相关按钮可以进行变量的添加Add、修改Change、删除Delete、约束条件Constraints等设置。按钮作用如表2所示。

优化对话框上按钮的作用表

按钮名称

按钮功能

Add

显示添加变量对话框,可以添加一个新的变量

Change

显示改变变量对话框,可以改变当前所选变量的相关设置

Delete

删除当前所选变量

Delete   All

提示、删除当前列表中的所有变量

Constraints

显示优化约束对话框,可以制定当前设定的变量之间的相互约束关系

Re-evaluate

计算和显示在制定的约束条件下的方案组合数

l  目标函数Objective Function区域包括一个下拉列表框,显示当前模型的可用目标函数列表,在这里选择需要优化的目标函数;还包括一个最优结果best result is区域,选择目标函数是越大越好Maximum,还是越小越好Minimum

l  结果池Answer Pool区域显示当前优化方案的可用结果,也就是优化运行所保存的最优结果数。选择Clear按钮清空结果池,选择Test按钮结果池中的数据是否与当前的模型一致。

l  运行控制Run Control区域的Warmup文本框指定仿真模型运行稳定所需要的时间,Run文本框指定每种方案的仿真时间等。

l  算法Algorithm区域用来设定所选的算法程序(共有六种)以及设置setting按钮和优化Optimize按钮。

6.3 进行优化设置

l  在优化器对话框中选取目标函数objfun,同时选定Maximum,即优化搜索朝着该函数值可能增大的方向;

l  设定表9.1中的优化变量的可能取值情况添加入优化器对话框,如图9.2所示;

l  优化仿真一天时间该公司的利润情况,设定运行时间为1440分钟;

l  优化算法采用Adaptive Thermostatistical SA模拟退火算法。

l  可以通过Model Optimization 4.0设置窗口的Open…按钮打开随书光盘models目录下的BPRBase.opt,来获得参考。

6.4 运行优化与结果分析

在经过上一步的优化设置之后,就可以进行优化的运行了。点击“Optimize…”按钮,激活“Run Optimization”对话框,点击该对话框上的“Run”按钮,开始运行优化。

在运行过程中,系统提供了当前输入变量的值“Input Variables”、目标函数的结果的图形“Objective Graph”、变量和函数的对应表“Result Table”的动态显示。

通过仿真运行得到最优的五种方案如表3所示。

仿真运行最优的五种方案

ObjFun

LogDist

.Value

TestCyc

.Value

choice1

.Value

choice2

.Value

StaffA

.Quantity

StaffB

.Quantity

Engineer

.Quantity

Act001

.Quantity

Act002

.Quantity

Act003

.Quantity

11758

15

45

0

0

4

6

4

2

3

7

11680

10

50

1

0

4

6

4

3

4

7

11668

15

50

1

0

4

7

4

2

3

7

11668

15

50

1

0

4

7

4

2

4

7

11667

15

50

1

0

4

7

4

3

3

7

  

完成65次优化搜索之后,形成的目标函数曲线如图3所示。

完成65次搜索,所形成的目标函数的图形

可以看出,只要经过64Adaptive Thermostatistical SA搜索,WITNESS就得到了最优的结果11758/每天。

根据这五种最优方案,以及企业的实际情况,可以辅助企业进行系统配置方案的决策。