建模与仿真综合性实验报告吴增亮_第1页
建模与仿真综合性实验报告吴增亮_第2页
建模与仿真综合性实验报告吴增亮_第3页
建模与仿真综合性实验报告吴增亮_第4页
建模与仿真综合性实验报告吴增亮_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、建模与仿真项目名称:综合性实验报告姓 名:学 号:201231110125班 级:2012级工业工程专业(1班)完成时间:2014 年12月指导教师:余平祥综合性实验报告目录1、 库存系统仿真实验报告创建数据库2、 库存系统仿真实验报告顾客需求处理3、 库存系统仿真实验报告查库和订货处理4、 库存系统仿真实验报告复杂性能指标计算五、 库存系统仿真实验报告优化库存策略六、课本实验第五题1、 库存系统仿真实验报告创建数据库1、实验目的学习建立ExtendSim内置数据库学习创建表和字段学习创建记录和向数据库输入数据学习用Data Init模块初始化数据库数据的方法2、实验步骤打开ExtendSim

2、软件,创建一个空白的新文件,另存一下,命名为inventorysim.mox保存到自己本地电脑(文件后缀为.mox),首先先查看书本上P158的相关描述,得知表8-1的内容。第一步则是要利用ExtendSim的内置数据库来存放数据。点击菜单栏中的Windows-Database List新建一个数据库列表。其中一个表命名为input1,一个表命名为output2,前者用于存放输入的参数,后者用于存放输出的数据。如下图所示。双击input表中,根据上面表8-1的内容输入得到下面的内容。双击output表,按照下面的表8-2的内容输入,得到的结果如下所示。以上的步骤则完成了表和字段的创建,并且也完

3、成了数据的输入。以下步骤则在Data Init模块初始化数据库数据,首先点击菜单栏中的Library-Value-Data Access-Data Init。向文件中添加一个Data Init模块。先点击右下角的“+/-”向其中添加两个target。添加的结果如下所示。3、实验问题用Data Init模块来初始化output表中的数据时,Target data type为什么设置为DB cell?答:因为初始化的是数据库output表中一个数据单元格。用Data Init模块来初始化output表中的数据时,Init at start of字段为什么设置为every run?答:设置Data

4、Init模块,用于初始化数据库中的output表中的当前库存(初始化为60)和总订货成本(初始化为0)。由于这两个数据在依此仿真完成后会发生变化,因此在下次运行开始时要初始化成初值。为什么不用Data Init模块初始化input表的数据?答:数据库中的其他数据(如订货点Little s等)由于在仿真过程中不会发生变化,因此不需要特意初始化,只需要在建立表时,输入那些数据的初值即可。input表的数据是如何初始化的呢?答:只需要在建立表时,输入那些数据的初值即可。第一次在输入input表填写数据,即数据的初始化。2、 库存系统仿真实验报告顾客需求处理1、实验目的学习库存系统顾客需求处理的结构建

5、模方法学习用Write模块写如数据库的方法学习用Math模块进行公式计算的方法2、 实验步骤打开上次实验中保存的文件Inventorysim.mox(这个文件要保存好,下次实验还要使用),建立处理顾客需求的模型。该模型中因为还没有添加其他的模块,所以只有Data Init模块。首先,向该模型中添加Create模块,双击打开对话框,设置其按照指数分布时间间隔生成顾客需求实体。在该模块的对话框中,要选中No item at start time(在开始运行时没有实体),保证第一个需求不会再仿真开始时刻创建。如下图所示。其次,用Random Number模块来生成顾客需求量,然后用Set模块来创建需

6、求实体的DemandSize属性,并将该需求量赋值给DemandSize属性。接下来则在Get模块中取得需求量,利用Math模块用0减去该需求量得到需求量的值(因为用于得到库存的减少量),再使用一个Write模块将该负值加到当前库存上,即更新output表中的当前库存(Inventory Level)数据。Get模块的设置如下图所示。Math模块及其设置如下图所示。选择Subtract函数。Write模块的设置如下图所示。以上步骤则完成了本题的相关设置。最后得到的模型截图如下所示。3、实验问题本例中,用Write模块写入数据库时,其对话框option页要做何设置?答:option页的设置结果如

7、下所示。其中选择Dissrete event-write data during run when,然后在下面选择dataIn connector receives message。表示当离散时间仿真模型在运行时就把数据写入到数据库中,相对的数据库端口将会接收到传递归来的信息。在下面的Other Options中则选择输入的数据被添加到目标的数据库的当中。根据以上设置,Write模块会何时向数据库写入数据?答:根据上面的结果可以知道当离散时间仿真模型在运行时就把数据写入到数据库中,相对的数据库端口将会接收到传递归来的信息。也就是说,Write模块会在端口接收到数据时向数据库写入数据。根据以上设

8、置,Write模块会如何向数据库写入数据,是替换还是累加?答:根据实验的原理,是用Math模块用0减去该需求量得到需求量的负值,所以应该是进行累加的运算。运行模型,观察数据库中库存数据的变化,是否一直在减小?为什么不会增加?答:运行模型的时候,可以看到数据库中的库存数据是一直都在减小的,首先从10变成9然后又变成6,最后一直减小,运行多次的话还变成了负数。具体的可以查看Write模块中的DB中的Inventory Level项。数据库中库存数据的变化是一直在减小。由于顾客购买产品,导致产品库存减小,Write模块接收的值为负值,因此一直在减小。3、 库存系统仿真实验报告查库和订货处理1、实验目

9、的学习库存系统查库与订货处理的结构建模方法学习用Equation模块、Equation(I)模块读写数据库的方法学习用Equation模块、Equation(I)模块进行编程计算的方法2、实验步骤打开上次实验你保存的文件InventorySim.mox(这个文件要保存好,下次实验还要使用),然后根据以上视频,进行操作实验。首先向其中添加一个Create模块,用于每天生成一个库存检查员实体(代表一个查库信号)。如下图所示,其中的constant常量设置为1。然后再向其中添加一个Select Item out模块,Equation模块和Simulation Variable模块来检查模块,来判断是

10、否需要订货。其中,在Simulation模块中选择Current time来读取当前时间。在Equation模块中,进行下面的设置,在Input Variables中的三个变量分别为当前库存量、订货点和当前的时间(前两者是通过数据库来读取到的,分别是从数据库中取得当前库存和订货点填入,后者则是通过端口0来得到的)。Output Variables中输出的变量则是端口0输出的结果。另外,还需要通过三个输入的量来判断是否需要订货。其程序逻辑也可以从图中看出来。该程序的基本含义是是如果当前库存小于订货点且仿真时间小于119.5(保证120天结束时即第121天开始时不订货),输出0给Select It

11、em Out模块(需要订货),否则输出1给Select Item Out模块(离开系统,不需要订货)。该模块截图如下所示。其中Select Item Out模块的设置如下所示。若需订货,则库存检查实体走上面路线,用Equation模块获取数据库中的当前库存和最大库存,据此计算订货量并输出给Set模块,将订货量赋值到检查实体的OrderQuantity属性。截图如下所示,InventoryLevel是当前库存,BigS是最大库存。如下图所示,Set模块中的OrderQuantity用来获取Equation提供的订货量。再添加一个Equation(I)模块用来计算订货成本并累加到数据库中的总订货成

12、本Total Odering Cost中,如下图所示。输出的结果是TotalOderCost。其中 TotalOrderCost为累加所有订货费用的累加变量,初值为0。SetupCost为每次订货的固定费用,IncCost为每件物品的可变订货费用,OrderQuantity则为订货量。TotalOrderCost = TotalOrderCost + SetupCost + IncCost * OrderQuantity;再向该模型中添加一个Activity模块,用于延时一个订货提前期。并限制每次通过的实体数的最大量为1,按照均匀分布来延时(U(0.5,1)。然后再向该模型中添加Get模块,库

13、存检查实体离开Activity,表示提前期结束,货物到达,到货后用Get模块获取订货量,用Write模块将订货量累加到数据库中的当前库存中去,这样,就能够根据订货动态增加当前存库。Get模块的设置如下图所示。Write模块中的设置如下图所示,通过修改其中的Inventory Level来更新当前库存。该模型的最终结果截图如下所示。3、实验问题简述用Equation模块计算订货量的程序逻辑。答:在Equation模块中,进行下面的设置,在Input Variables中的三个变量分别为当前库存量、订货点和当前的时间(前两者是通过数据库来读取到的,分别是从数据库中取得当前库存和订货点填入,后者则是

14、通过端口0来得到的)。Output Variables中输出的变量则是端口0输出的结果。另外,还需要通过三个输入的量来判断是否需要订货。其程序逻辑也可以从图中看出来。该程序的基本含义是是如果当前库存小于订货点且仿真时间小于119.5(保证120天结束时即第121天开始时不订货),输出0给Select Item Out模块(需要订货),否则输出1给Select Item Out模块(离开系统,不需要订货)。简述用Equation(I)模块计算并累加总订货成本到数据库中的程序逻辑。答:Equation(I)模块用来计算订货成本并累加到数据库中的总订货成本Total Odering Cost中,如下

15、图所示。输出的结果是TotalOderCost。其中 TotalOrderCost为累加所有订货费用的累加变量,初值为0。SetupCost为每次订货的固定费用,IncCost为每件物品的可变订货费用,OrderQuantity则为订货量。TotalOrderCost = TotalOrderCost + SetupCost + IncCost * OrderQuantity;Equation模块与Equation(I)模块有何不同?答:Equation模块是用来计算订货量的,是在Value库中添加的,主要用来传递值,而Equation(I)模块是用来计算并累加订货成本的,在Item模块中添加

16、,主要用来多实体完成相应的操作。Equation模块是通过在数据库中去读取相应的量,然后再去计算订货量,并将计算得到的结果通过端口传递给Set模块。Equation(I)模块则是获得上一个Set传递的属性值和从数据库中获得到的数据来计算并累加订货成本,最终又将结果写回到数据库当中。也就是说,Equation模块是值模块就是说它的端口只能连接值端口,不可连接实物端口。Equation(I)模块是实物模块,只能连接实物端口,不可连接值端口。在本案例的假设前提下,在一笔订货的在途货物运输期间(即提前期期间),会不会再次发出订货指令?或者换句话说,每次查库时,会不会有已订但未到的货?为什么?答:不会,

17、由题意可知,货物最迟到达的时间是1天,而查库的时间间隔也是1天,因此,每次查库时,不会有已订但未到的货。4、 库存系统仿真实验报告复杂性能指标计算1、实验目的通过实验理解各种库存性能指标的含义学习用Read模块读取数据库数据的方法学习用Max&Min模块、Mean模块、Equation模块以及各种计算模块计算和采集库存系统性能指标的方法2、 实验步骤打开上次实验保存的文件InventorySim.mox。首先向该模型中添加一个Value库中的Read模块,该模块用于读取数据库中的信息,具体的设置如下截图所示。然后向其中添加一个Plotter,Discrete Event模块,用来获取库

18、存的水平(可为负数)。在解决这道题之前首先需要明确的是:平均每天总运作成本=平均每天存储成本+平均每天缺货成本+平均每天订货成本可以看出本题应该分三条路线来得到最终的结果。其中第一条应该得到平均每天存储成本,第二条得到的是平均每天缺货成本,第三条得到的是平均每天订货成本。在第一条路中,首先添加一个Constant模块,其中Constant的值赋为0。在接下来的操作中添加一个Max&Min模块,将Constant模块中的值赋给它。然后再添加一个Mean&Variance模块,该模块用于计算得到的平均物理库存。得到的结果如下所示。再向其添加Equation模块,用于计算平均每天存储

19、的成本。其中的程序设置为平均每天存储成本=平均物理库存*每天存储所需的费用。其中,平均物理库存就是从端口0中得到的aygInventory值,每天存储所需的费用就是从数据库中得到的HoldCost值。最后输出的结果通过Equation模块的另一个端口输出。再向其中添加一个Mean&Variance模块,用于输出平均每天存储成本均值和置信区间。该模块中的Options设置为下图所示,将其置信水平设置为95%,并清除最开始的统计值。在第二条路中,首先添加一个Constant模块,其中Constant的值赋为0。再向其中添加一个Max&Min模块用于计算当前缺货库存,然后将其值传递给

20、下一个添加的Mean&Variance模块,用于计算平均缺货库存。Mean&Variance模块的舍子如下图所示,其置信水平同样设置为95%。因为本题中仿真运行次数为10次,所以其中的Calculate moving average for interval设置为10。然后再向该模型中添加一个Math模块,用于将得到的负数的平均缺货库存转换成为正的。然后再将其值赋给一个Equation模块,该模块中计算的是平均每天缺货成本。其中从上一个Math模块中获得平均缺货库存(正数),从数据库中取得单位缺货成本,分别对应的属性值是avgInventory和ShortCost,通过这两个值

21、相乘得到平均每天缺货成本。最后再将得到的值通过Equation的另一个端口输出。再向该模型中添加一个Mean&Variance模块,在该模块中设置其置信水平为95%,仿真运行次数设置为10次。在第三条路中,首先添加一个Simulation Variable模块,将其中的时间设置为Current time,给结果添加的值设置为0,该模块用于读取当前的时间。同时通过一个Read模块获取总订货成本。然后再向其中添加一个Math模块,把其中的函数设置为除法,用于计算平均每天订货成本,在该模块的右下角还有一个Result的框用于显示计算得到的结果。最后再为其添加一个Mean&Varian

22、ce模块,将置信水平设置成为95%,仿真运行次数设置为10。具体情况截图如下所示。该模块用于得到平均每天订货成本的均值和置信区间。通过查看Results选项可以查看仿真运行最后得到的均值和方差等值。在最后面则回到前面所阐述的关系:平均每天总运作成本=平均每天存储成本+平均每天缺货成本+平均每天订货成本上面的步分别得到了平均存储成本、平均每天缺货成本、平均每天订货成本,然后再通过将上面的三项相加,就可以得到平均每天总运作成本。向该模型中添加一个Math模块,然后各模块间的关系截图如下所示。在该Math模块中实现的就是将其获取得到的三个数进行相加,并且通过设置让其忽略空白值。最后再向其添加一个Me

23、an&Variance模块,将其中的置信水平设置为95%。该模块中用于获得平均每天总成本的均值和置信区间。通过查看Results选项可以查看仿真运行最后得到的均值和方差等值。3、 实验问题本实验中,用read模块读数据库数据时,在其option页要做何设置?答:如下图所示,在read模块的option页中选定的读取的数据源为离散时间在运行的过程中读取数据,然后在下面选择data source changes选项。用Mean Variance模块计算平均每天总成本的均值和置信区间时,模块对话框要做何设置?答:如下图所示,在Specify initial conditions(指定初始状态

24、)中将初始值设置为0,在Select options选项中选定Use number of inputs-1 to calculate variance,在下面的多次运行仿真中设置仿真运行次数为10。然后将置信水平设置为95%,并且在每次运行仿真的时候都清除掉统计值。利用本次实验建立的模型,实验比较以下各组(s,S)下的平均每天总成本:(20, 40),(20, 60),(20, 80),(20, 100),(40, 60),(40,80),(40,100),(60,80),(60,100),(80,100)。对每种情况重复运行20次,写出各项配置下的平均每天总成本的均值和置信区间。并写出以上最

25、优的(使得平均每天总成本最低)的(s,S)。答:对每种情况重复运行20次,写出各项配置下的平均每天总成本的均值和置信区间。并写出以上最优的(使得平均每天总成本最低)的(s,S)。结果如下所示:(s,S)平均每天总成本均值置信区间(20, 40)125.836125.836±2.418(20, 60)119.010119.010±1.795(20, 80)122.728122.728±1.536(20, 100)128.352128.352±1.555(40, 60)126.841126.841±0.833(40, 80)126.650126.6

26、50±1.040(40, 100)132.941132.941±1.461(60,80)144.089144.089±1.263(60,100)145.236145.236±0.974(80,100)166.683166.683±0.957由表格可得,该问题最优解对应的(s,S)为:(20,60)。添加必要的模块,分别计算平均每天缺货成本、平均每天储存成本、平均每天订货成本的均值和置信区间。答:如前面所述,向最后的四个模块都添加一个Mean&Variance模块,在Results页中可以查看相应的值,其中的Mean表示的是均值,Vari

27、ance表示的是方差,Standard deviation表示的是标准差,Number of observation表示的是观测数,Confidence interval为置信区间的半宽,Relative CI error为相对误差。均值置信区间平均每天缺货成本18.86418.864±1.936平均每天储存成本8.9708.970±0.453平均每天订货成本98.01198.011±2.174用Plotter,Discrete Event模块绘制当前库存水平的波动曲线,并同时绘制一条高度为20(即订购点)的水平直线,和一条高度为0的水平直线(连接constant

28、模块到plotter DE模块),观察并库存曲线的波动情况以及和两条直线的关系,根据你的观察,缺货情况经常发生吗?答:绘制结果如下所示,可以看出缺货的情况还是比较常见的。五、 库存系统仿真实验报告优化库存策略1、实验目的1. 学习库存仿真优化方法2. 学习如何设置模块表格的内容为决策变量3、实验问题数型决策变量和连续型(实数型)的输入方法有何不同?答:整型变量范围的上下限都是整数;连续型变量范围的上下限是实数型。请在你的模型上,使用Extendsim软件提供的优化器来寻找(s,S)的最佳设置(总成本最小)。令s在1和99之间取值(步长为1,即为整数),S在2和100之间取值(步长为1,即为整数

29、)。要注意s和S必须是整数而且满足s < S。a) 优化器参数由先选择Quicker Defaults,写出优化结果(s,S)和平均每天总成本。b) 再将优化器参数由选择Better Defaults,写出优化结果(s,S)和平均每天总成本。a) 给本模型添加一个Optimizer模块,将其设置成如下图所示的形式:选择Quicker Defaults,得到的结果如下所示:由该结果可以看出,其优化结果为(26,55),平均每天总成本为-115.644。b)再选择Better Defaults,得到的结果如下所示:由该结果可以看出其优化的结果为(25,58),最低的总成本为118.1163。

30、在上题(第2题)的基础上,通过将库存检查间隔(Evaluation Interval,目前为1天)作为变量加入到优化变量集中,来研究在每天开始工作时查看并补充(当需要时)库存是否是最佳方案,让该值在半天到5天之间连续取值, s和S的取值情况与上题相同。应用优化器求取最优设置。c) 先优化器参数选择Quicker Defaults,写出优化结果(s,S)、Evaluation Interval和平均每天总成本。d) 再将优化器参数选择Better Defaults,写出优化结果(s,S)、Evaluation Interval和平均每天总成本。打开“生成库存检查员”模块的对话框,使克隆工具将其中的constant值拉到Optimizer模块中。如下图所示。并将其中的最小值设置为0.5,最大值设置为5.0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论