《建模与仿真》项目名称:综合性实验报告姓名:学号:201231110125班级:2012级工业工程专业(1班)完成时间:2014年12月指导教师:余平祥综合性实验报告目录一、库存系统仿真实验报告—创建数据库二、库存系统仿真实验报告—顾客需求处理三、库存系统仿真实验报告—查库和订货处理四、库存系统仿真实验报告—复杂性能指标计算五、库存系统仿真实验报告—优化库存策略六、课本实验第五题1一、库存系统仿真实验报告—创建数据库1、实验目的学习建立ExtendSim内置数据库学习创建表和字段学习创建记录和向数据库输入数据④学习用DataInit模块初始化数据库数据的方法2、实验步骤打开ExtendSim软件,创建一个空白的新文件,另存一下,命名为inventorysim.mox保存到自己本地电脑(文件后缀为.mox),首先先查看书本上P158的相关描述,得知表8-1的内容。第一步则是要利用ExtendSim的内置数据库来存放数据。点击菜单栏中的Windows-DatabaseList新建一个数据库列表。其中一个表命名为input1,一个表命名为output2,前者用于存放输入的参数,后者用于存放输出的数据。如下图所示。双击input表中,根据上面表8-1的内容输入得到下面的内容。2双击output表,按照下面的表8-2的内容输入,得到的结果如下所示。以上的步骤则完成了表和字段的创建,并且也完成了数据的输入。以下步骤则在DataInit模块初始化数据库数据,首先点击菜单栏中的Library-Value-DataAccess-DataInit。向文件中添加一个DataInit模块。先点击右下角的“+/-”向其中添加两个target。添加的结果如下所示。3、实验问题用DataInit模块来初始化output表中的数据时,Targetdatatype为什么设置3为DBcell?答:因为初始化的是数据库output表中一个数据单元格。用DataInit模块来初始化output表中的数据时,Initatstartof字段为什么设置为everyrun?答:设置DataInit模块,用于初始化数据库中的output表中的当前库存(初始化为60)和总订货成本(初始化为0)。由于这两个数据在依此仿真完成后会发生变化,因此在下次运行开始时要初始化成初值。为什么不用DataInit模块初始化input表的数据?答:数据库中的其他数据(如订货点Littles等)由于在仿真过程中不会发生变化,因此不需要特意初始化,只需要在建立表时,输入那些数据的初值即可。④input表的数据是如何初始化的呢?答:只需要在建立表时,输入那些数据的初值即可。第一次在输入input表填写数据,即数据的初始化。二、库存系统仿真实验报告—顾客需求处理1、实验目的学习库存系统顾客需求处理的结构建模方法学习用Write模块写如数据库的方法学习用Math模块进行公式计算的方法2、实验步骤打开上次实验中保存的文件Inventorysim.mox(这个文件要保存好,下次实验还要使用),建立处理顾客需求的模型。该模型中因为还没有添加其他的模块,所以只有DataInit模块。首先,向该模型中添加Create模块,双击打开对话框,设置其按照指数分布时间间隔生成顾客需求实体。4在该模块的对话框中,要选中Noitematstarttime(在开始运行时没有实体),保证第一个需求不会再仿真开始时刻创建。如下图所示。其次,用RandomNumber模块来生成顾客需求量,然后用Set模块来创建需求实体的DemandSize属性,并将该需求量赋值给DemandSize属性。接下来则在Get模块中取得需求量,利用Math模块用0减去该需求量得到需求5量的值(因为用于得到库存的减少量),再使用一个Write模块将该负值加到当前库存上,即更新output表中的当前库存(InventoryLevel)数据。④Get模块的设置如下图所示。⑤Math模块及其设置如下图所示。选择Subtract函数。⑥Write模块的设置如下图所示。6以上步骤则完成了本题的相关设置。最后得到的模型截图如下所示。3、实验问题本例中,用Write模块写入数据库时,其对话框option页要做何设置?答:option页的设置结果如下所示。其中选择Dissreteevent-writedataduringrunwhen,然后在下面选择dataInconnectorreceivesmessage。表示当离散时间仿真模型在运行时就把数据写入到数据库中,相对的数据库端口将会接收到传递归来的信息。在下面的OtherOptions中则选择输入的数据被添加到目标的数据库的当中。根据以上设置,Write模块会何时向数据库写入数据?答:根据上面的结果可以知道当离散时间仿真模型在运行时就把数据写入到数据库中,相对的数据库端口将会接收到传递归来的信息。也就是说,Write模块会在端口接收到数据时向数据库写入数据。根据以上设置,Write模块会如何向数据库写入数据,是替换还是累加?7答:根据实验的原理,是用Math模块用0减去该需求量得到需求量的负值,所以应该是进行累加的运算。④运行模型,观察数据库中库存数据的变化,是否一直在减小?为什么不会增加?答:运行模型的时候,可以看到数据库中的库存数据是一直都在减小的,首先从10变成9然后又变成6,最后一直减小,运行多次的话还变成了负数。具体的可以查看Write模块中的DB中的InventoryLevel项。数据库中库存数据的变化是一直在减小。由于顾客购买产品,导致产品库存减小,Write模块接收的值为负值,因此一直在减小。三、库存系统仿真实验报告—查库和订货处理1、实验目的学习库存系统查库与订货处理的结构建模方法学习用Equation模块、Equation(I)模块读写数据库的方法学习用Equation模块、Equation(I)模块进行编程计算的方法2、实验步骤8打开上次实验你保存的文件InventorySim.mox(这个文件要保存好,下次实验还要使用),然后根据以上视频,进行操作实验。首先向其中添加一个Create模块,用于每天生成一个库存检查员实体(代表一个查库信号)。如下图所示,其中的constant常量设置为1。然后再向其中添加一个SelectItemout模块,Equation模块和SimulationVariable模块来检查模块,来判断是否需要订货。其中,在Simulation模块中选择Currenttime来读取当前时间。在Equation模块中,进行下面的设置,在InputVariables中的三个变量分别为当前库存量、订货点和当前的时间(前两者是通过数据库来读取到的,分别是从数据库中取得当前库存和订货点填入,后者则是通过端口0来得到的)。OutputVariables中输出的变量则是端口0输出的结果。另外,还需要通过三个输入的量来判断是否需要订货。其程序逻辑也可以从图中看出来。9该程序的基本含义是是如果当前库存小于订货点且仿真时间小于119.5(保证120天结束时即第121天开始时不订货),输出0给SelectItemOut模块(需要订货),否则输出1给SelectItemOut模块(离开系统,不需要订货)。该模块截图如下所示。其中SelectItemOut模块的设置如下所示。④若需订货,则库存检查实体走上面路线,用Equation模块获取数据库中的当前库10存和最大库存,据此计算订货量并输出给Set模块,将订货量赋值到检查实体的OrderQuantity属性。截图如下所示,InventoryLevel是当前库存,BigS是最大库存。⑤如下图所示,Set模块中的OrderQuantity用来获取Equation提供的订货量。⑥再添加一个Equation(I)模块用来计算订货成本并累加到数据库中的总订货成本TotalOderingCost中,如下图所示。输出的结果是TotalOderCost。其中TotalOrderCost为累加所有订货费用的累加变量,初值为0。SetupCost为每次订货的固定费用,IncCost为每件物品的可变订货费用,OrderQuantity则为订货量。TotalOrderCost=TotalOrderCost+SetupCost+IncCost*OrderQuantity;11再向该模型中添加一个Activity模块,用于延时一个订货提前期。并限制每次通过的实体数的最大量为1,按照均匀分布来延时(U(0.5,1))。然后再向该模型中添加Get模块,库存检查实体离开Activity,表示提前期结束,货物到达,到货后用Get模块获取订货量,用Write模块将订货量累加到数据库中的当前库存中去,这样,就能够根据订货动态增加当前存库。Get模块的设置如下图所示。12Write模块中的设置如下图所示,通过修改其中的InventoryLevel来更新当前库存。该模型的最终结果截图如下所示。133、实验问题简述用Equation模块计算订货量的程序逻辑。答:在Equation模块中,进行下面的设置,在InputVariables中的三个变量分别为当前库存量、订货点和当前的时间(前两者是通过数据库来读取到的,分别是从数据库中取得当前库存和订货点填入,后者则是通过端口0来得到的)。OutputVariables中输出的变量则是端口0输出的结果。另外,还需要通过三个输入的量来判断是否需要订货。其程序逻辑也可以从图中看出来。该程序的基本含义是是如果当前库存小于订货点且仿真时间小于119.5(保证120天结束时即第121天开始时不订货),输出0给SelectItemOut模块(需要订货),否则输出1给SelectItemOut模块(离开系统,不需要订货)。14简述用Equation(I)模块计算并累加总订货成本到数据库中的程序逻辑。答:Equation(I)模块用来计算订货成本并累加到数据库中的总订货成本TotalOderingCost中,如下图所示。输出的结果是TotalOderCost。其中TotalOrderCost为累加所有订货费用的累加变量,初值为0。SetupCost为每次订货的固定费用,IncCost为每件物品的可变订货费用,OrderQuantity则为订货量。TotalOrderCost=TotalOrderCost+SetupCost+IncCost*OrderQuantity;Equation模块与Equation(I)模块有何不同?答:Equation模块是用来计算订货量的,是在Value库中添加的,主要用来传递值,而Equation(I)模块是用来计算并累加订货成本的,在Item模块中添加,主要用来多实体完成相应的操作。Equation模块是通过在数据库中去读取相应的量,然后再去计算订货量,并将计算得到的结果通过端口传递给Set模块。Equation(I)模块则是获得上一个Set传递的属性值和从数据库中获得到的数据来计算并累加订货成本,最终又将结果写回到数据库当中。也就是说,Equation模块是值模块就是说它的端口只能连接值端口,不可连接实物端口。Equation(I)模块是实物模块,只能连接实物端口,不可连接值端口。④在本案例的假设前提下,在一笔订货的在途货物运输期间(即提前期期间),会不会再次发出订货指令?或者换句话说,每次查库时,会不会有已订但未到的货?为什么?答:不会,由题意可知,货物最迟到达的时间是1天,而查库的时间间隔也是1天,15因此,每次查库时,不会有已订但未到的货。四、库存系统仿真实验报告—复杂性能指标计算1、实验目的通过实验理解各种库存性能指标的含义学习用Read模块读取数据库数据的方法学习用Max&Min模块、Mean模块、Equation模块以及各种计算模块计算和采集库存系统性能指标的方法2、实验步骤打开上次实验保存的文件InventorySim.mox。首先向该模型中添加一个V