《Flexsim中级讲义版.ppt》由会员分享,可在线阅读,更多相关《Flexsim中级讲义版.ppt(91页珍藏版)》请在三一办公上搜索。
1、1,仿真專班培训,Beijing CSN Technology Inc.,李 亚 兵,2,目录,全局表任务序列自制部件概率分布与ExperfitExperimentFlexsim与外部数据库的连接方法定制简单3D图形Flexsim仿真优化模块OptQuest,3,全局表,全局表(Global Table)用于储存模型输入输出数据等可以是数值类型或字符串类型,3,4,4,全局表的添加,在Global Tables菜单中单击“Add”重命名表格名设置行数与列数点击“Advanced”设置各行或列的数据类型,5,全局表的修改,直接编辑表格附初值借助事件的下拉列表对全局表进行修改相关函数gettabl
2、enum(tablename,row,col);settablenum(tablename,row,col,value);gettablestr(tablename,row,col);settablestr(tablename,row,col,“string”);,5,6,Global Variables全局变量,全局变量(Global Variables)菜单中具有两个标签:Global Variables和Global MacrosGlobal Variables可以定义如下八种类型全局变量:integer,double,treenode,string,integer array,doub
3、le array,treenode array,and string arrayGlobal Macros允许用户进行宏定义及仿真逻辑的程序控制语句,6,7,Excel,将Excel文件数据导入Flexsim全局表,或者将Flexsim全局表导出为Excel文件打开方式通过菜单Tools-Excel打开通过toolbox按钮打开,7,8,Excel的单表导入,8,9,Excel的复表导入,9,10,Excel的单表导出,10,11,Excel的定制导入,11,12,路径模型,目的使用全局表定义加工路线的简单案例学习使用标签跟踪实体的加工步骤描述3种不同的产品需要进入一个由5台处理器组成的加工单
4、元产品按照下述路线被处理类型为1的产品需要经过工作台1、3和2类型为2的产品需要经过工作台1、2和4类型为3的产品需要经过工作台2、4、3和5使用全局表,以保证产品按照正确的顺序发送到相应的工作台进行加工所有没有完全加工完成的产品都放置在同一个堆放区中问题尝试用颜色标示产品所处的加工步骤,13,模型布局,14,Flexsim与外部数据库的连接方法,15,与Excel的连接DDE(Dynamic Data Exchange)与 Databases的连接ODBC(Open DataBase Connectivity),16,DDE是一个将数据传递到Excel或接受Excel的数据的系统。它是与已经
5、打开的Excel连接。Flexsim能在同一时间读或写1个workbook。Flexsim有30 语句是关于Excel连接的。,与Excel的连接,17,excellaunch(str launchdir)打开Microsoft Excel 的语句,以便Flexsim能与Excel连接。例:excellaunch(C:/Program Files/Microsoft Office/Office10);excelquit()关闭Microsoft Excel 的语句,与excellaunch(str launchdir)相对。,Flexsim关于Excel连接的主要语句,18,excelopen
6、(str workbook)打开指定的Excel文件的语句。例:excelopen(mydata.xls);excelclose(num save 1/0)关闭当前的Excel文件。例:excelclose(true);excelsetsheet(str sheetname)指定当前Sheet。例:excelsetsheet(Sheet1);,19,excelreadnum(num row,num column)例:excelreadnum(5,1);excelreadstr(num row,num column)例:excelreadnum(5,1);excelwritenum(num ro
7、w,num column,num value)例:excelwritenum(5,1,99.87);excelwritestr(num row,num column,num value)例:excelwritenum(5,1,99.87);,20,excelimporttable(str/node table,num startrow,num startcol,num numrows,num numcols);例:将Excel的表数据输入到Flexsim的内制表格中。例:excelimporttable(MyTable,1,1,5,3);excelexporttable(str/node ta
8、ble,num startrow,num startcol,num numrows,num numcols);例:将Flexsim的内制表格中 的数据输出到Excel表格中。,21,打开 Excel Launchexcellaunch()打开Excel文件(workbook)excelopen()指定当前的worksheetexcelsetsheet()读写需要的数据excelreadnum(),excelwritenum(),excelreadstr(),excelwritestr()关闭Excel。excelclose()and excelquit(),Excel连接的Step,22,建模
9、练习(1),三种不同的产品随机的送到5台设备进行加工.设备不同、产品不同加工时间不一样。每台设备的加工时间从GlobalTable中读入。在模型Reset时,用ExcelImport将Excel Sheet1的加工时间表输入到 GlobalTable在运行时实时地将设备利用率写入到Excel的 sheet2.,23,与ODBC的连接,ODBC是与数据库连接的标准方法 Access,Oracle,Excel 和其它数据库都用ODBC.允许用户使用SQL(Structured Query Language)访问数据。模型实行时需要作成一个ODBC Alias(或数据源).Flexsim有22条语句
10、 是关于连接数据库的.Flexsim提供两种方式操作数据库。SQL mode and Table mode.,24,dbopen(str databasename,str command(SQL string or Tablename),num usetable,num showlogin)打开数据库.这里databasename是指Alias Name.例:dbopen(itemdrive,timetable,1);/Table mode.dbopen(warehouse,select*from inventory,0);/SQL mode.dbclose()关闭当前数据库.,Flexsim
11、s ODBC Commands,25,dbgetnumrows()Returns the number of rows(records)in the current table.dbgetnumcols()Returns the number of columns(fields)in the current table.dbgetfieldname(num field)Returns the name of the specified column(field)in the current table.dbgetmode()Returns the current mode that Flexs
12、im is in.0=DBMODE_CLOSED1=DBMODE_SQL2=DBMODE_TABLE,26,dbsqlquery(str query)执行指定的SQL语句(select or update).例 dbsqlquery(select processtime from timetable where itemtype=1);dbsqlquery(update timetable set processtime=itemtype*2);dbchangetable(str tablename)切换当前Table为指定的Table。只用于 Table mode.,27,dbgettabl
13、enum(num row,num col)dbgettablestr(num row,num col)返回指定行和列的值(数字或文字),只能是当前的 table mode.dbsettablenum(int row,int col,double val)dbsettablestr(int row,int col,char*val)写入值(数字或文字)给数据库指定行和列,只能是当前的 table mode.,28,dbimporttable(str tablename,num startrow,num startcol,num numrows,num numcols)从当前表的指定行和列开始输入
14、一组数据给Flexsim的内制表(GlobalTable),数据的行数、列数及GlobalTable的名字须指定。例:dbimportnode(MyTable4,2,2,3,3);dbexporttable(str tablename,num startrow,num startcol,num numrows,num numcols)从内制表(GlobalTable)输出一组数据给当前表,必须指定数据库表的写入开始和列以及数据的行数和列数。例:dbexportnode(MyTable4,2,2,3,3);,29,连接ODBC的一般流程,确认是否建立了alias,如没有需建立了alias。打开表
15、(Table)或SQL Mode。dbopen()读或写你所需要的数据。dbgettablenum(num row,num col)dbsettablenum(int row,int col,double val)关闭数据库dbclose(),30,建立 ODBC Alias,在 Windows控制面板,双击BDE Administrator,在Object菜单选择ODBC Administrator,如右上图。点击“添加”按钮.选择数据库类型,在这里选择“Microsoft Access Driver(*.mdb”),如右下图。,31,在数据源名处写入名字(Flexsim中要求指明的数据库名
16、就是这个名字,(例200907CSN).点击选择按钮,指定你要连接时数据库,(例Access1.mdb).,32,建模练习(2),生产计划数据如下表。,这组数据已计录在数据库(Access1.mdb)的表(Schedule)里。将这组生产计划数据在模型reset时,直接输入给“Resouce”的Schedule节点。,有五种产品将按计划生产,设备只有1台。,33,任务序列,任务序列(Global Table)用于TaskExecutor执行任务,33,34,任务序列,34,treenode ts=createemptytasksequence(centerobject(current,1),0
17、,0);inserttask(ts,TASKTYPE_TRAVEL,current,NULL);inserttask(ts,TASKTYPE_FRLOAD,item,current,port);inserttask(ts,TASKTYPE_BREAK,NULL,NULL);inserttask(ts,TASKTYPE_TRAVEL,outobject(current,port),NULL);inserttask(ts,TASKTYPE_FRUNLOAD,item,outobject(current,port),opipno(current,port);dispatchtasksequence(
18、ts);,35,案例1,目的学习如何使用任务序列及优先级描述零件的到达时间间隔是服从均值为20秒的指数分布。零件到达后由操作员将其运送到一个空闲的工作台上。操作员需要对零件进行10秒钟的预处理之后工作台自行处理实体,需要20秒钟时间加工完成后,实体离开系统一个操作员负责所有的三个工作台问题 使操作员在运送完一个实体后,立即对该实体进行预处理尝试不使用中心端口连接实现此模型,36,案例1,36,37,案例2,全局任务序列 treenode ts=createglobaltasksequence(tsname,dispatcher,dp1,dp2,dp3,dp4,dp5);dispatchtask
19、sequence(ts);freeoperators(Dispatch,item);,38,案例2,38,39,自制部件库,40,用来创建和配置实体的特殊功能,并将这些实体保存为模板以便在其他模型中的其它部分使用。每个用户库包含一组实体。可以保存用户库,以后可以将它们装载到其它项目中。用户库视窗可同时打开若干个用户库。视窗顶部的菜单用来创建、清除和编辑用户库。,自制部件库,41,自制部件库工具,新建用户对象库-此选项用来创建一个新用户库,并将它添加到当前打开的用户库列表中导入用户对象库-此选项用来装载一个保存过的用户库,将它添加到当前打开的用户库列表中另存为.-此选项用来将当前选定的用户库保存
20、为文件关闭用户对象库-此选项用来从用户库列表中移除当前选定的用户库关闭所有用户对象库-此选项用来关闭全部用户库重命名用户对象库-此选项用来重命名当前选定的用户库,42,添加实体到一个用户库,若要向用户库添加一个实体,在正投影或透视视图中右击此实体,并选择“添加到用户库”选项。如果用户库视窗中没有库,那么将创建一个新用户库里,实体将被添加到此新用户库中。一旦向用户库中添加了实体,就可在用户库视窗中右键单击这些实体来编辑或清除。,43,库对象编辑菜单,浏览实体树-此选项用来在一个树视窗中浏览实体浏览用户实体树-此选项用来在一个树视窗中浏览整个用户库从用户库中删除实体-此选项可以从用户库中移除实体参
21、数-此选项可以打开实体的参数视窗属性-此选项可以打开实体的属性视窗,44,模型添加用户库实体,若要向模型中添加一个用户库实体,点击此实体并保持,拖动鼠标到模型中需要创建此实体的位置,然后在此点释放鼠标键。,45,自制部件,46,概率分布与Experfit使用,随机变量是由概率密度函数表示的例如机器故障时间间隔基本符合指数分布概率密度函数的平均值等于故障间隔时间的平均值PDF-probability density functionsMTBF-Mean Time Between Failures,概率密度函数,简化表示,近似,随机变量,47,离散VS.连续概率密度函数,离散概率密度函数描述一个离
22、散值发生的可能性例如:掷骰子只有六种可能出现的结果连续概率密度函数描述在一定范围内变化的连续值的概率例如一个机器可能在任何时刻发生故障,我们可以用一个连续的概率密度函数来描述它的概率,48,一些离散的概率密度函数,泊松分布常用来描述在给定时间间隔内发生的到达次数(例如零件,订单,顾客)二项式分布常用来描述一批零件中次品的数量均匀分布常用在每一个值出现的可能性都近似一样的情况(掷骰子),49,常用的连续概率密度函数,下面的概率密度函数最常用:均匀分布三角分布正态分布指数分布,50,均匀分布,常用来描述近似值例如,可以用来描述在最大值和最小值之间均匀变化的任务完成时间,51,正态分布,许多变量都符
23、合正态分布,这是比较典型的“钟型”曲线正态分布:平均值标准差,52,指数分布,常用来描述到达时间间隔,故障时间间隔给定时间内发生的的事件数量用Poisson来表示,53,三角分布,常用来表示一个参数为最小值,最大值和最有可能值的变量概率在最有可能值时最高,54,其它的连续概率密度函数,其它的连续概率密度函数有时会用到包括:伽马分布威布尔分布对数正态分布爱尔朗分布Beta分布,55,判定合适的分布,一种方法是看哪种概率密度函数能够最好的符合实际数据的柱状图。,Normal distribution,Histogram ofactual data,Number of occurrences,56,
24、仿真研究步骤,1.定义目标,范围,需要的条件2.搜集,分析 系统数据3.建立模型4.验证模型5.运行试验6.结果分析,57,Expertfit,1、将数据编辑生成文本文件2、创建项目,58,Expertfit,3、导入数据,59,Expertfit,4、自动拟合,60,Expertfit,5、应用/仿真表述,61,案例,62,Experiment,模型中进行多方案运行:每个方案中有不同的变量重复运行、进行结果比较,63,Experiment,仿真停止时间 当模型运行了这里定义的时间后即停止,下一个重复运行或者方案(如果有的话)开始运行预热停止时间 当模型运行了这里定义的时间后,统计结果将被重置
25、每个方案的运行次数 此值定义每个方案需要重复运行多少次,64,Experiment,方案数目 此值定义要运行多少个方案。每个方案可能包含着多次重复运行。方案个数在“方案数目”域段中定义。在每个方案结束时都调用一个特殊事件当前运行 此数字是当前正在运行的一次重复运行的序号,每个方案的重复运行都重新开始编号当前方案 此数字是当前正在运行的方案的序号。,65,每次运行后保存状态 如果选中此选项,模型将会在每次重复运行结束时保存其状态。状态以.fst文件形式保存于实验文件夹。用文件菜单中的“装载状态”选项可以打开这些文件,查看每次重复运行的结果,Experiment,66,实验变量 此表用来定义实验中
26、每个方案的配置。一个实验变量是模型中的某个节点,需要对此节点的值进行实验。试验每个实验变量都与表中某一列相关联。,Experiment,67,绩效指标一系列的函数统计模型仿真效果可以定义任何数量的绩效指标一次重复完成后返回一个值实验运行结束后,输出绩效指标均值、置信区间的报告,Experiment,68,Experiment,69,Experiment,实验报告,70,Experiment,触发器,71,Experiment,触发顺序,Start of ExperimentStart of ScenarioStart of ReplicationEnd of Warmup TimeEnd of
27、 ReplicationEnd of ScenarioEnd of Experiment,72,案例,目的练习实验器的使用描述一个工作车间有5个工作站,工作站之间有转运区要求人员从工作站搬运产品到转运区,并操作机台加工产品。人员数量1-8,工作站加工时间对数正态分布(0,10,.5,1)问题求助最佳人员数量(不考虑成本因素),73,定制简单3D图形,74,3D图形编程接口OpenGL,Flexsim提供了用户直接编写OpenGL的接口,用户可通过直接编写OpenGL来实现控制二维和三维几何体的基本操作。OpenGL是一个三维图形编程接口(“GL”即Graphics Library)。这一接口包
28、含了数百个函数,图形程序员可以利用这些函数指定设计高品质的三维彩色图像所需的对象和操作。目前它已成为国际上通用的开放式三维图形标准。Flexsim有19个语句(实际是将OpenGL封装后的函数)是关于定制图形的。,75,Flexsim关于3D图形编制的语句,drawtomodelscale(obj object)声明当前绘图的尺度。相当于下述OpenGL的语句。glScalef(1/get(spatialsx(object),1/get(spatialsz(object),1/get(spatialsy(object);.drawcolumn(x,y,z,边角数,底部半径,顶部半径,高,rx,
29、ry,rz,red 0-255,green 0-255,blue 0-255,不透明度0-1,textureindex,textureXrepeat,textureYrepeat)画锥型。圆柱、圆锥、多边锥、多边柱都可以由它来完成。,76,Flexsim关于3D图形编制的语句,drawcube(x,y,z,sx,sy,sz,rx,ry,rz,red 0-255,green 0-255,blue 0-255,opacity 0-1,textureindex,textureXrepeat,textureYrepeat)。画立方体。任何四边柱可以由它来完成。drawcylinder(x,y,z,底部
30、半径,顶部半径,高,rx,ry,rz,red 0-255,green 0-255,blue 0-255,不透明度0-1,textureindex)画空心圆锥。,77,Flexsim关于3D图形编制的语句,drawrect(obj view,x1,y1,z1,x2,y2,z2,red,green,blue)画矩形平面。drawsphere(x,y,z,半径,red 0-255,green 0-255,blue 0-255,不透明度0-1,textureindex)画空心球体。drawtext(obj view,str text,x,y,z,width,height,厚度,rx,ry,rz,red
31、 0-1,green 0-1,blue 0-1,不透明度0-1)画立体字,但目前只限英文。,78,Flexsim仿真优化 模块OptQuest,79,什么是仿真优化,仿真优化(Simulation Optimization)是指寻找一组最佳的参数值(既决策变量值),以使得目标函数最优。在仿真建模中,一组参数的一组特定的取值,如:x1=3,x2=5,x3=7,称为一个方案(Scenario)。优化就是由优化软件自动生成不同的方案,并寻找使得目标函数(如利润)最优的方案。搜寻最优解的过程需要重复运行模型很多次,这个过程对于大规模来说可能要持续很长时间。同时,没有任何仿真优化算法可以确保在有限的时间
32、内找到最优解,运行优化程序的时间越长,它找到最优解的概率越大。,80,Flexsim 如何执行仿真优化,Flexsim 使用OptTek System公司开发的、完全集成于Flexsim 中OptQuest软件执行优化功能。OptQuest软件采用禁忌搜索、散点算法等启发式算法快速搜索解空间,以寻找最优解。,81,Flexsim仿真优化教程与步骤问题描述,零件通过左侧的Source进入模型,在机器(Processor)进行加工处理之前放置在Queue(临时存放区)里,加工后的产品被销售掉。机器(Processor)可以有一定数量的并列运行,但机器数不能超过50台。整个仿真运行一个班次的时间是3
33、600秒。我们要研究运行一个班次后如何才能使得净利润最大。,这里先列出模型的一些假设条件:加工名的产品售价:$2。机器运行一个班次花费$100。因此,我们对应的目标函数的方程形式为:最大利润=$2*售出数-$100*机器数或者:(PartsProduced*2)-(NoMachines*100),步骤1:定义目标函数,82,步骤2:区分目标函数中的变量类型,决策变量用户可控制的,需要优化的变量,如NoMachines,决策变量在OptQuest中,对应的数据类型通常为Integer:整数Discrete:离散值,需要定义步长Step,如取值为1.0,1.5,2.0,2.5,则 step=0.5
34、Binary:只能取0或1的二值变量Continuous:连续变量Design:变量的取值本质上不代表数字,如1表示red,2表示green等。Permutation:排序变量。变量的取值代表不同的工艺路线。输出变量不可控制的,是系统输出变量,如:PartsProduced输出变量在OptQuest中,对应的数据类型为:User-Controlled,83,步骤3:在优化界面中输入变量、约束、目标函数,步骤3.1:输入变量,在变量区点击Add,增加变量,然后点击Modify,进行变量详细定义先定义决策变量定义变量名称(NoMachines)设置类型为:Integer,Discrete,Bina
35、ry,Continuous,Design,Permutation设置变量的下界、上界设置步长Step(如果有)点击Browse浏览到对应的模型节点再定义输出变量定义变量名称(PartsProduced)设置类型为:User-ControlledBrowse对应到相应的模型节点,84,步骤3.2:输入约束方程,如果有约束,还需要在约束区输入约束方程,如果没有,则不须输入。输入约束方程的方法是:点击约束区(Constraints)的Add按钮增加约束,然后输入约束方程。(NoMachines50),85,步骤3.3:输入目标函数,在目标函数区输入目标函数:(PartsProduced*2)-(No
36、Machines*100)选择Maximize选项注意目标函数的形式,没有左边的目标变量和符号,86,步骤4:设置优化参数,在优化参数设置区1设置优化参数如果有必要,在优化参数设置区2设置重复运行参数,87,步骤4.1:在优化参数设置区1设置优化参数,停止条件优化运行最长时间(Maximum Time for Optimization)-设置优化运行最长真实时间(不是仿真时间),以秒为单位,时间设置越长,越可能找到最优解,但是花费时间也长。自然停止(AutoStop)-如果此框被选中,当目标函数的值停止改进时优化停止。Flexsim的当前设置是:当发现优化方案的目标函数值经过100次迭代后,其
37、改变小于0.0001时,停止优化,即使此时没有达到优化运行最长时间。方案(Scenarios)最大方案数(Maximum Scenarios)-设置优化器将生成和搜索的最大方案数,设置越大越可能找到最优解,但花费时间也越多。当前方案(Current Scenario)-正进行实验的当前方案编号。当前解(Current Solution)-这是当前正在运行方案的目标函数的值。最优解(Best Solution)-这是迄今为止找到的最优方案的目标函数的值。每个方案的仿真时间(Simulation time per Scenario)设置每个方案仿真运行的时间(这是仿真时间,不是真实时间),当这个时
38、间一到达,优化器将立即停止该方案的仿真运行。,88,步骤4.2:在优化参数设置区2设置重复运行优化参数,对于非随机的确定性仿真,不需要本设置对于随机仿真,由于优化通常是比较不同方案目标函数的多次重复运行的均值,因此需要设定每个方案重复运行的次数,其设置如下:各方案中执行多次运行(Perform Multiple Replications per Scenario)-选中此框,优化器将对每个方案进行大于一次的运行。重复运行的最少次数(Minimum number of replications)-设置每个方案需要运行的最少次数。如果没有设置提前退出,则优化器将总是重复运行“最少重复运行次数”次。
39、重复运行的最多次数(Maximum number of replications)设置每个方案重复运行的最多次数。如果设置了提前退出条件,优化器将运行到该条件被满足。但若运行到此最多重复次数,仍未满足提前退出条件,则优化器将停止此方案的重复运行。,89,步骤4.2:在优化参数设置区2设置重复运行优化参数,提前退出条件(Early Exit Criteria)-此命令使优化器根据用户选择的条件,停止对同一场景的重复运行。如果选择了“满足置信区间”(Confidence Interval Satisfied),则当运行到目标函数均值的置信区间达到给定置信度下的给定误差百分比时,停止重复运行。(在背
40、后的意思是当目标函数的均值达到制定精度时,就停止重复运行,并与最优解进行比较)Percent Confidence:指目标函数均值落入该置信区间的可能性。Error Percent:指置信区间半宽除以样本均值的结果如果选择了“最佳解在置信区间外”(Best Solution Confidence),则当运行方案运行次数达到指定置信度和误差的置信区间不包含以往的最佳解时,停止此方案的重复运行。(其背后的意思是当目标函数的均值与最优解有显著区别时,就停止重复运行,并与最优解进行比较)如果选择了“不提前退出”(No Early Exit),则方案将运行设定的“重复运行的最少次数”。注:方案运行次数越多,置信区间越窄,即误差百分比越小。,90,步骤5:执行优化,观察结果,配置了上述参数后,点击Apply按钮来应用所做的配置然后点击Optimize按钮,执行优化。等待,一直到弹出一条消息告知优化过程结束。注意确保在点击优化按钮前,模型已经编译,否则Flexsim可能出现死机。点击了优化按钮后,在优化结束前,不要进行任何操作,否则屏幕可能僵化,但是实际上并没有死机,可以等待到优化完成。在点击Optimize按钮前,最好将仿真速度调为最大,并关闭模型窗口,以加快优化执行速度。,91,TEL:010-51288549FAX:010-82898250,谢 谢!,