连续模型
应用领域
一些连续模型的应用方法
“(科学是)……人类从错误的试验和实践中分离出来的真相。”
——Richard P. Feynman
版权所有 刃之砺信息科技(上海)有限公司 www.edgestone-it.com 敬请登录网站浏览文档更新
ExtendSim能被用于建立连续模型在物理、社会、工程和商业领域。本章中的前四节说明了建立和运用ExtendSim的Value库和Engineering库。最后一章说明了由典型模块建立的两个模型:一个名为Planet Dance的物理学模型和仿真食物链的Fish Pond模型。
连续模型是非常广泛和多种多样的。我们可以用标准模块(例如Value库)包装成任何一个连续模型,然而我们也经常的用到由标准模块组合成模块以及自己定制的模块。ExtendSim的顾客可以自己创建模块库出于私人的或商业的用途,例如分析化学、化学过程控制果酱和纸张制造过程等领域。
自然科学
仿真常用于的自然科学领域包括生物学、化学、物理学和生态学。本章有两个模型,一个典型的食物链模型和一个仿真人体对药物吸收影响因素的模型。
Predator/Prey食物链模型
这个模型显示了一个由野兔和山猫组成的小生态系统。每类动物的数量都直接影响的另一类:山猫以野兔为食物,当野兔的数量减少,食物的减少会导致山猫的数量随着减少,而后野兔的数量再次上升,如此循环下去。
模型假设
模型的特点和假设如下:
• 最初在100公顷的生态环境中有6000只野兔和125只山猫。 • 每只野兔每年平均生1.25只后代,而山猫每年平均生0.25只后代。
• 野兔一直有充足的食物,它们只有一种死去的方式就是被山猫吃掉。
• 山猫的狩猎区域大小是1公顷,它们只有一种食物来源就是野兔,并且每只山猫都能够吃完在它领地里的野兔。
• 野兔被杀的数量取决于它们在这个生态环境里的密度和山猫的数量。 • 山猫死亡的概率取决于它们每年所吃的野兔的数量。
• 这里没有外部因素(例如年份的长短)来影响动物数量变化。 • 模型最后要运行24年,每年显示12次数量的变化。(dt is 0.0833)
72 应用领域 自然科学 Predator/Prey食物链模型放在Examples\\Continuous\\Standard Block Models文件夹里。这个模型用到了Value库和Plotter库。
版权所有 刃之砺信息科技(上海)有限公司 www.edgestone-it.com 敬请登录网站浏览文档更新
应用领域 73 自然科学 模型详解
本模型说明了一些有趣的连续模型的观点:
• 为模型有信息反馈,Holding Tank模块设置为Inputs are: integrated (no delay)。更多信息请见610页的“Integration vs. summation in the Holding Tank block”。 • Holding Tank模块有一个want输入端口,用来告诉模块你想杀掉多少数量。设想的数量和实际中杀掉的数量(在端口定义)可能会不同,我们将在下面讨论。 • Holding Tank模块在默认情况下是不允许为负的。这就意味着,野兔的数量不能够少于有效的数量,不论输入端口是如何要求的。世纪当中被杀掉的数量会在输出端口输出。如果模块允许变成负值,则在want端口和输出端口的数值将会相同。然而,在本模型当中它不允许为负数,那么在want端口的数值将比实际杀掉的数量和在get端口现实的数量要多。
• 根据整个生态系统的面积(100公顷)来划分每公顷野兔的数量。山猫能够吃掉所在的这一公顷的全部野兔,但是如果它们吃的野兔太多,导致野兔的数量减少,则山猫的死亡率将会上升。在这个模型中你将看到,这样会形成一个循环。 • Hares Killed模块结果输出在plotter模块上,当野兔的数量上升时的每个点都要及时注意。
这种情况的发生是因为野兔不断的繁殖和山猫的死亡,不仅仅是以前的野兔,也不是些新生的野兔。
• Lookup Table模块设置为Output is: interpolated,这意味着之间值能够被利用。例如,输入数值65(这是被吃野兔在60到70中间值),将会使模块输出0.75(这是山猫死亡率在0.2到0.15的中间值)。
进一步研究
如果你看到了模型最初的设置,你将发现对模型还有许多能增强方面。
• 野兔和山猫的出生率可以根据模型的条件或其他外界因素进行改变。例如,出生率可能取决于父母的健康情况,族群的水平,或者是生态环境中的数量。 • 你还能增加其它的捕食者或为山猫提供其它的食物来源。
• 模型中假设对于野兔有充足的食物供给。相对于食物来源,野兔也能被看作是捕食者。同样山猫也可以被看作是食物来源,按照相同的逻辑为其添加捕食者。 • 野兔还能有除去山猫,其它的捕食者。
• 你还可以分析外界条件,例如一年当中的时段和预期的天气状况。然后测试这些条件对死亡率的影响。
药品吸收
这里确实有很多好的东西。对于一些药物,例如血液稀释剂,它对于病人来说是相当重要的,足够的剂量能够达到理想的效果,但是如果不够或过多都是十分有害的。
版权所有 刃之砺信息科技(上海)有限公司 www.edgestone-it.com 敬请登录网站浏览文档更新
一种方法是监视药物在病人血液中的浓度concentration,来判定它是否有效,但是要在安全的前提下。有许多的因素会影响到药物的吸收,包括摄取量,吸收率,病人的饮食等等。仿真是研究这些因素的最好的方法。
Drug Ingestion模型存放在\\Examples\\Continuous\\Standard Block Models文件夹中。模型用到了Value库和Plotter库中的模块。
模型假设
• Constant模块具体指明了服用的剂量(1500mg)和服用的频率(3次/天)。 • 胃的容积是500ml,吸收的比率是0.693。
• 血液的量为5000ml,metabolic constant 0.0433。 • 模型仿真时间为96小时;delta time is 0.25。
模型详解
Drug Ingestion模型图解说明了血液浓度,周期性的吸收药物。周期性的服用药物和药物被血液吸收都基于服用的药量,药物吸收的比率,和新陈代谢,胃的容量,以及人体内的血液量。
把Drug Ingestion模型划分为几个层级模块,分别代表胃,肠道,和血液循环。(如果要查看阶层
模块下的内容,双击它们的图标或者用模型视图中的阶层视图来查看底层的内容。)在Stomach阶层模块中,药物被Pulse模块吸收,Pulse模块会产生周期性的跳动,跳动的次数来基于Constan模块输出的每天服用药物次数。然后,这个数值将会乘于Holding Tank模块中服用药物的次数和剂量,这些代表胃中的药物量。
在Absorption部分,Equation模块计算吸收率,按照胃的容积划分药物的总量,其中扣除了血液当中的药物含量,加上了吸收的固定量和胃的容积。吸收率将会用来减少药物在胃里的总量,和增加血液中的药物(这些由阶层模块中的Holding Tank模块表示并命名为Bloodstream)。血液中的药物浓度由血液中的药物总量除于血液总量所得。最后,血液中的药物量随着新陈代谢而减少,在Equation模块中计算,用到了药物在血液中的浓度,血液总量,和新陈代谢常数。Plotter I/O记录了药物在血液中的浓度。
74 应用领域 自然科学 版权所有 刃之砺信息科技(上海)有限公司 www.edgestone-it.com 敬请登录网站浏览文档更新
应用领域 75 工程学 改变
在模型左侧的克隆对话框中,试着改变相关参数,服用药物的总量和服用的次数。然后观察血液中药物浓度的变化。或者图解说明不同药物的作用,改变新陈代谢和吸收常数。 工程学
仿真被广泛的用于电子信号排列、控制和机械操作系统,以及神经网络等其它工程系统。接下来的电子信号排列例子研究了在数字FM(调频)系统中接收器的工作。 Noisy FM系统
当设计接受器和调节器时,工程师需要在质量和费用之间找到平衡点。仿真帮助我们详解了这里的交换,例如当目标是为了过滤出噪音而不降低收听的质量。少量的零件组成能够使生产花费少,但是多的零件组成可以提供更好的音质。 Noisy FM系统模型存放在Examples\\Continuous\\Standard Block Models文件夹中。模型用到了Electronics 和Plotter库中的模块。 模型假设
• FM(调频)中心的频率是91.6 khz。 • 天线调节器用了椭圆滤波器。
• 调节器是被动的RC定向封闭环,用了高级的OR比较测定机。 模型详解
这个模型展示了在嘈杂的环境下,数字FM(调频)无线电收发系统当中接收器的工作。Transmitter是一个阶层模块,其包含了下级模型bitstream generator(数字流发生器) 和FM carrier generator。bitstream
generator由两个Voltage Controlled Oscillator(VOC)模块和两个Clipper模块组成:
• 第一个VCO模块输出电压在-1和+1之间的脉冲。
• 第一个Clipper模块限制了脉冲信号电压在0和+1之间,所以它可以调节第二个VCO产生周期的数字流,用于测试。
• 第二个Clipper模块限制了Frequency Modulation generator(FM发生器)的脉冲输出。
Clipper模块可以被忽略,但是它限制了VCO输入电压在0到+1之间,使对frequency modulation(FM)输入参数变得简单。
Filter-Band pass模块(标名为Antenna tuner)是设置为省略的,因为它费用十分少。在天线作用完之后Comparator模块作为对FM信号限制和验波器。
版权所有 刃之砺信息科技(上海)有限公司 www.edgestone-it.com 敬请登录网站浏览文档更新
Phase Locked Loop(PLL)模块解调(分离)从FM carrier输入的信号。从loop的输出有很多脉冲,所以它会通过简单得Butterworth滤波器进行滤波。PLL后面的low-pass滤波器滤平了PLL输出脉冲中的瞬变电流。
改变
因为elliptical滤波器有十分长的延时在它们这边,而Chebyschev可能会更好。尝试把噪音设置为1.0伏电压,运行用elliptical滤波器的仿真模型。然后尝试把滤波器换成Butterworth,Chebyschev,点击“Recalculate poles...”然后再次运行仿真模型。Chebyschev比elliptical滤波器工作效果好,但是噪声的抑制和系统的中滤波器的组成(花费)将会变化。PLL中的参数能够简单的根据实验进行改变。例如,输入不同的带宽、阻尼、loop类型和周期比较测定机,然后再次运行仿真。
处理信号中的噪音能够有令人满意的效果。例如,增加Noise Generator模块中的振幅,将迅速的消除信号中的噪音。
商业
金融、经济学、存货管理和市场竞争全部都适合于通过仿真进行分析。下面的例子说明了如何在满足顾客要求的条件下减少成本。
存货管理
一个公司物流都包含定购费用和储存费用:
• 定购花费包括定购工序、运输成本、货物检查等等。它们一般就像在每次定购时的固定花费。
• 存储费用包括仓库的花费、保险、税金、货物的报废以及管理的开支。它们一般是一段时间内某项货物的花费或者一段时间内货物成本的百分之几。
这些花费包含在典型的交易当中,由于一段时期内定购次数的增加,定购费用的增加和存储费用的减少。存货管理的目标是减少这两项花费的总额。
Inventory Management模型存放在Examples\\Continuous\\Standard Block Models文件加中。模型用到了Value库和Plotter库中的模块。
模型假设
• 起初手头上有50组存货。
• 要求每周10组货物,并且到了第四周增加到12.5组。 • 第一次运送,提前期从工厂到仓库的时间要花费4周。
• 灵敏度分析自动使提前期变为2周,从第4周开始第一次运行到第10周到第四次运行。
• 货物定购路线的满负荷是每周10组在第4周。 • 修正量为1。
• 存货最大量为50组(4周提前期*1.5/组预计每周的运输量)。 • 模型运行仿真52周的时间。
76 应用领域 商业 版权所有 刃之砺信息科技(上海)有限公司 www.edgestone-it.com 敬请登录网站浏览文档更新
应用领域 77 社会学 模型详解
这个模型显示了货物的存储/消耗循环。它的目的是稳定存货水平,使货物的过分积压或者供应不足的情况避免
发生。这个模型测验在货物需求增大25%的情况下,对存货水平的影响。它同时也用灵敏度分析的方法来研究提前期的改变对货物运送的影响。MultiSim plotter模块显示了运行中一次又一次的存货的不同。 有关模型信息
顾客的要求由Lookup Table模块来定义。需求的总量是基于Customer Order Backlog的数量,同时也基于预定更多的货物。注意显示的货物的预定量,存货的补充量和运货量,计算结果(存货管理的目标)会在另一部分显示出来。这些都有助于模型清晰的表示结果。
产品的要求决定了用船运,除非这里没有足够的货物需求。Correction Factor定义了在一周中目标和实际货物需求不一致的修订值。(Correction Factor值越小,不一致的修订就越快。)如果你没有准时地运送能力,你想要充足的库存来应对将来的需求,而不要过量积压。你能够要求足够货物来应对当前的要求,但是因为到货物运到之前存在着时间延时,存货水平对将来的要求将是不必要的。(如果需求增长,你将会缺少货物;如果需求减少,你将会积压货物。)你可以修正货物的定购量,来使它们接近目标库存水平(目标库存把货物提前期看作当前需求)。
因为模型设定运行四次进行灵敏度分析,plotter中的每一页将显示一次运行的结果。从一页到另一页将显示提前期增加的影响结果。 变化
你想改变的参数包括有Correction Factor,Target Inventory以及Lead time。
社会学
仿真常常用于心理学、社会动力学的研究。下面的例子研究在一个小的城市里可用的办公室空间对新行业发展的影响。 城市规划
城市和其他政府机构在进行每年的财政预算时要对税收、基础建设需要和运行开支进行预测。预言人口的变化,经济的发展或者住房需要,发展规划模型都对估计财政预算有现实的意义。
版权所有 刃之砺信息科技(上海)有限公司 www.edgestone-it.com 敬请登录网站浏览文档更新
它们对发展政策也有一定的帮助,例如环境保护和住房增长法规的制定。
City Planning模型存放在Examples\\Continuous\\Standard Block Models文件夹下面。模型用到了Value库和Plotter库中的模块。 模型假设
City Planning模型表示了在一个城市有限的办公室里办公室的占有情况。对未来240个月的新的公司的办公室需求量进行规划。这里还对将要倒闭的公司数量进行了预测。
• 最开始有4000个办公室。
• 每个公司平均需要5间办公室。 • 每月有2%的公司倒闭。
有关模型的信息
模型研究将有多少家公司占用办公室;由于办公室数量有限,公司会倒闭多少;商业运行的失败对办公室数量的影响。这个模型是十分重要的,因为它在数据计算上用了Math模块而不是Equation模块。这个模型当中结
构关系和数据运算显示的十分清晰明确。
发展规划(Lookup Table模块命名为“Demand”)来自对20年发展的预测与研究。
为了更清晰的讲解,模型分为以下几个部分: • Office Bank:Holding Tank模块表示了可用的办公室数量。最初总量为4000间,当有公司占用时它将减少,当有公司倒闭时它将增加。计算办公室的需求,通过预计然后从去除,其中每个公司需要5间办公室。如果没有足够的办公室提供,则公司就不能安置在这个城市里。这些被称作“lost businesses”,将被计算出来。 Businesses Occupying:每月中已被占用的办公室数量除5就可得出每月的公司数量。这个总数就是占用办公室的公司的数量,所以其中倒闭的公司数量就能被计算出来。
• Business Failures:这里2%的公司倒闭并移出他们的办公室,有6个月的拖延时间。
注意这里倒闭的2%的公司所占有的基数是这里现有的公司总数量,不是新占有办公室的公司数量。倒闭公司将从“Businesses Occupying” Holding Tank模块移出,这样倒闭的公司数是计算的净占有量。
78 应用领域 社会学 版权所有 刃之砺信息科技(上海)有限公司 www.edgestone-it.com 敬请登录网站浏览文档更新
应用领域 79
自定义模块 ……因为事务失败返回到办公室库(Office Bank)所以办公室的数目复原,从而有更多的办公室空间可以使用。
变化
可变化的有可使用办公室数目、每个事务使用的办公室空间、以及为进行其他开发的进一步发展规划。
自定义模块
如前所述,开发自定义连续模块是很常见的。这样做的优势在于用户可以充分利用ExtendSim开发环境的全部功能,包括ModL编程语言以及对话框编辑工具,从而创建完全符合用户需求的模块和行为。之后使用这些模块建立可以接入ExtendSim本身强大的仿真体系结构的模型。
行星运行
行星运行模型演示的是重力平方反比定律。该模型使用了自定义模块库中的行星以及行星Plotter模块。这两个模块都是专门为该模型设计的。
该模型的文件位于\\Examples\\Continuous\\Custom Block Models文件夹下。
关于模型
当运行行星运行模型时,三个行星模块将各自代表的行星的信息传递给行星Plotter模块。该模块的功能是将行星模块描绘为能够随时间移动的动画对象并显示在工作区。
模型中的每个行星模块包含一个行星对象的定义,每个行星对象的质量都会对其
他行星对象产生影响,同时也会受其他行星 行星运行模型 对象的质量影响。
当模型运行时各行星会呈现“弹弓效应”,即当行星对象彼此靠近的时候相互之间的吸引力会增强,导致质量较轻的行星对象运行速度加快。在对我们生活的太阳系较外围的星球进行探测时科学家们会利用弹弓效应令飞行器加速。
注意,该模型中各参数的单位并未定义。对话框中输入的数字只是用来表示与图中其他对象的相对关系。
变化
该模型为模型中对象进行物理学实验提供了广阔的空间:
z 行星的初始位置即速率的微小变化即可导致模型行为的极大改变。 z 可以添加或删除对象,可以用来仿真四天体或二天体问题。在任何情况
下都要确保每个对象与工作区中其他任一个对象都有且仅有一个联系,否则计算将会产生问题。
版权所有 刃之砺信息科技(上海)有限公司 www.edgestone-it.com 敬请登录网站浏览文档更新
80 应用领域
自定义模块
z 一个能够体现物理学复杂度的有趣的问题是,在三天体问题中如何通过
更改对象的参数来建立一个稳定的轨道系统,就像太阳、地球和月球那样。(在尝试过程中千万不要灰心,因为还没有人能正确的设置这些参数。)
z 注意即便是质量很小的对象同样也会对质量大对象的位置和速率产生影
响。为了复制类似于地球和太阳关系的模型,可以增大其中一个对象的质量和密度。不论增加多少,该对象都会被质量轻对象的位置所影响。
鱼池
与前面使用评估库种模型建立的的掠食者/被掠食者模型相反,鱼池模型使用用户自定义的鱼模块来代表掠食者和被掠食者。
鱼池模型的文件位于\\Examples\\Continuous\\Custom Block Models文件夹下。它使用了Plotter库
中的Plotter I/O模块以及自定义模块库中的鱼模块。其中鱼模块是专门为该模型所设计的。
关于该模型
池塘中有两种鱼:一种为掠食者,另一种为被掠食者。模型的目标是降低掠食者的数量以使池塘达到平衡。该模型使用了自定义模块库中的鱼模块和Plotter库中的Plotter I/O模块。
鱼池模型
这个两物种生态系统显示了如何使用同一种模块来仿真不同类型的生物。通过输入不同的参数以及连接方式的不同,还可以创建更加复杂的生态系统。使用同一个鱼模块来仿真两种不同的鱼品种:一种为腐食鱼另一种为食肉鱼。模型的左边为腐食鱼,靠食用池塘中死亡鱼类的尸体生存。右边(水虎鱼)食用腐食鱼。运行模型然后观察;水虎鱼会周期性的减少腐食鱼。
变化
每个加入模型的鱼模块代表不同的品种。可以在第二个模块的右边再加入一种掠食者,设定为缺省参数,该品种可以控制水虎鱼的数量。可以通过加入一种控制性掠食者来减少水虎鱼的数量。步骤为:
¾ 添加一个鱼模块,放在“水虎鱼”模块的右边。
¾ 将新添加模块的“Pot. food in”与“水虎鱼”模块的“Pot. food out”相
连。
¾ 将模块下部的“Carrion”相连。 ¾ 将“Pop”与Plotter模块相连。
新添加的可以控制水虎鱼数量的掠食者使得池塘中所有物种可以进行繁殖。用户同样可以通过更改参数来进行其他的仿真实验。
版权所有 刃之砺信息科技(上海)有限公司 www.edgestone-it.com 敬请登录网站浏览文档更新
连续建模
概念、提示和技巧 创建健壮的连续模型
“成人的工作并不易。如同孩童时期,每向前迈进一步,
其所呈现的不仅仅是发展中的新任务,
往往还需要颠覆之前的技术。”
——Gail Sheeby
版权所有 刃之砺信息科技(上海)有限公司 www.edgestone-it.com 敬请登录网站浏览文档更新
82 概念、提示和技巧
仿真时间选择
本章讨论与连续建模相关的一些概念并为用户提供一些连续建模过程中会使用到的一些技巧。会讨论到的内容包括:
z 仿真时间选择
z 根据计算精度的不同,△时间的设置 z 连续模型中的反馈和延迟 z 综合与总和的选择 z 确定模块执行的次序 z 在模块中混合库 z 连接多个输入
z 使用Plotter模块作为其他模块的输入
z 使用一条连接线作参照将新的运行与基线作比较 z 使模型简洁的技巧
本章中介绍的概念对所有类型的模型都是适用的,例如从41页开始的“仿真概念”一章
中所讨论的如何确定模型中是否应该设置随机元素。下面的内容是针对连续模型的。
仿真时间的选择
大部分的仿真都是在一个指定的时间段里运行。ExtendSim确立仿真运行的持续时间的方式,是通过建立在输入仿真运行对话框中的时间数值
(Run>Simulation Setup>Setup选项卡)决定的。持续时间指从开始到结束的时间区域。
在连续仿真中,仿真时间被平均分成几个区间长度,开始时间是第一步,结束时间是最后一步。在时间单位里,每一步的时间长度都可以用“Δ”或“dt”来表示,Δ时间决定了模型数据被反复计算的频率。
当仿真运行时,仿真时间是按照从开始时间到结束时间段里的每步Δ时间运行的,在每一步都会计算模型数据。在第一步,Extend会计算模型的初始状态是什么。然后计算下一次要发生的变化并决定一套新的数据点。所产生的模型数据就像一串连续的点一样及时的与每一步相协调,必须注意:整个仿真期间,每一步都会计算模型数据信息,从这一步到下一步,但是不包括下一步。
连续仿真要求用户指定步数或运行每步所需时间。如下文所述,在多数情况下,△时间为“1”就很合适了。但对于精确的模型来说,有必要设置一个除“1”之外的△时间。 △时间
△时间(dt或△t)字面意思为时间的变化量。其定义为当前步与下一步之间的时间间隔长度。用户通过设定△时间将整个仿真的运行时间进行划分,即,每步计算之间的时间间隔为多长,或者说执行计算的频率为多少。△时间的设置方式为Run>Simulation Setup>Continuous选项卡。
为了确保仿真结果的正确性,连续模型的△时间必须足够小,以便于准确反映模型不同部分之间发生的变化。在多数情况下,△时间为“1”就很合适了。然而为了增加仿真运行速度或模型的精确度,有必要设置一个除“1”之外的△时间。
版权所有 刃之砺信息科技(上海)有限公司 www.edgestone-it.com 敬请登录网站浏览文档更新
概念、提示和技巧 83 △时间 非“1” △时间
尽管在Continuous选项卡中“1”是△时间的缺省值,但是用户可以设置△时间为任意值。例如,如果用户需要模型运行的更快并且降低进行计算的频率,可以将△时间设置为2或大于1的任意数。
小于1的△时间会减少每步运行时间,因此进行计算的频率就更高。同时也会增加仿真运行的全部步数,从而使得仿真运行速度变慢。
如果△时间不是1,通常的情况是小于1的数值。△时间为什么必须要小于1是有很多原因的。在模块里,反馈回路和刚性方程都可能需要一个较小的△时间来保证所有的计算都能反映在图表上,用太大的△时间运行的仿真演示所显示数值经常从很高到很低地波动。这就是所说的不稳定或假混乱,需要△时间小于1的模型例子有:
z 信号处理模型需要有特别指定的每步时间(dt),该时间要么在仿真运行对
话框里设置,要么在模型中用模块来计算。例如,筛选模块就是用来基于各自的输入参数计算步长的。
z 不同的等式模型(在带综合性反馈回路的模型里)可能必须要有一个步
时(dt)或除1之外的步数。
z 如果在加工控制模型里建立了自己的模块,就可能要设置该模块,使其
有一个能计算△时间变量值的步码信息处理者,可以自动完成该处理过程。参见Electronics库中关于能够完成此项功能的一些模块例子。
如果一个模型中包含有Holding Tank模块(Value库)并且△时间并非精确为1,那么用户
需要更改Holding Tank模块以便综合其输入,在610页的“Holding Tank模块中综合与总和的比较”将会涉及到相关内容。
确定应使用dt的大小
要决定什么样的△时间设置是较合理的,开始可用△时间1(默认设置)来运行仿真,然后将△时间改为0.5(原设置的一半)来运行,如果在这两个曲线之间没有很大的区别,那么△时间设成1就是较合适的了。如果存在很大差别,可将△时间缩减到0.2并再次运行该仿真演示。继续改变△时间的设置,直到所设置的△时间所显示的曲线与比它小的△时间相比时的曲线没有多大差别为止。主要用意在于要运用能给出精确结果,同时不会降低演示速度的最大△时间值。
确定dt或步数
ExtendSim要求用户必须在Run>Simulation Setup>Continuous选项卡中设定每步运行所需时间(△时间)或是运行所需总步数。用户可以在对话框中直接输入△时间的值,或者输入总步数之后ExtendSim则会计算出△时间。
根据输入的每步“△”值可以自动计算出总步数。计算方法为:基底(((结束时间-开始时间)/△时间)+1.5)。在改变“每步的时间(△)”后选择“步数”按钮就可以了。
也可以通过手工设定总步数来确定仿真运行的粒度。在大多数情况下,它在数字上等于持续时间(仿真运行的时间长度)所以模型在每一步都会计算该值,并且每一步都是一个单位时间长度。
版权所有 刃之砺信息科技(上海)有限公司 www.edgestone-it.com 敬请登录网站浏览文档更新
84 概念、提示和技巧
反馈与延迟
△默认的时间数值是自动计算的,它取决于用户输入的步数;它的计算是:(结束时间-开始时间)/(步数-1)。在改变了“步数”后,选择“每步时间(dt)”就能看见它了。
当△时间为“1”时设置结束时间
例如:如果需要一个连续的仿真运行并计算40年中每年的数值,这40年的初始时间是“0”,△时间是“1”,那么输入的结束时间数值就取决于模型中是否有集成部分存在:
● 在模型中如果没有集成部分,就可以设置结束时间为39。这样,数据在这40步中的每一步都会被计算出来,从第0步开始,第39步结束。从每一步开始一直到下一步但不包括下一步(一个△时间单元)的时间区域,每步的计算值将会代表每年的年数据信息,这样模型就会计算出40年的数据数值。若是把初始时间设置为“1”,结束时间为“40”,那么仿真时间也是40年。
● 在模型中如果有集成部分,就可以设置结束时间为40。这样数据在共41步中的每一步都会被计算(而不是输出)出来,从第0步开始,第40步结束。从每一步开始的期间,每步的计算值都是代表年初的信息。但是,整合模块会获得它们在每一步的输入值和下一步的输出结果,这样模型就会计算40年的数据信息。若是把初始时间设置为“1”,结束时间为“41”,那么仿真时间也还是40年。
关于集成的讨论在85页。
当△时间不为“1”时设置结束时间
若指定△时间为0.5,开始时间为0,结束时间为39,那么仿真时间将会在0到39之间运行,所计算的数据达79步,它们每一步是时间单位长度的一半。
如果指定了一个不会致使仿真持续时间被均分成几段的△时间,ExtendSim就会调节结束时间为一个较高的数值,这样确保仿真的每段时间都是相同的,并且当对话框中出现结束时间的时候,仿真将会结束。这样,就可以交替性的选择一个新的结束时间或△时间。例如:在仿真中的结束时间点是39,就能指定“每步时间(dt)”或△时间为两年,ExtendSim就会每隔一年计算数据信息,从0到38;但是,仿真的最后一步将不会被计算出来。在这种情况下,为了不遗漏这一步,ExtendSim将结束时间调整为40,这就意味着每两年模型数据就会计算一次,时间从0开始到40结束,总共21步。
反馈与延迟
有些时候有必要创建一个模型来补偿或者对自身进行变化以匹配其输入的改变。例如,不论讲话者的声音高低播音扩音器都应该输出同样大小的声音。能够完成这样功能的技术包括将扩音器输出的一部分作为反馈用来控制其输入,这样扩音器就可以有效地控制自己的音量。
版权所有 刃之砺信息科技(上海)有限公司 www.edgestone-it.com 敬请登录网站浏览文档更新
概念、提示和技巧 85
集成 反馈
将一个模型的输出连接到该模型的输入的行为称作反馈;这是导致连续模型中复杂行为的主要原因。一个有反馈的模型中,计算的结果将被反馈作为计算的初始变量,从而影响自身的变化率。因此在仿真运行过程中反馈会导致模型变量的重
复性变化。最初的输出值返回到计算进而 Reservoir 3 模型将Holding Tank的内容反 重新影响初始变量。 馈给Equation模块来计算溢出值
反馈回路的延迟
ExtendSim可以简化模型中的反馈,不过恰当的使用反馈需要一些额外的建模技巧。因为连续模型中每一步都要进行重新计算,所以在初始变量第一次影响模型与一系列的计算结果最终间接影响初始变量之间存在延迟。引入延迟将会使模型的行为发生显著的变化,因为即时通路和非即时通路所产生的影响是不同的。
当运行一个带反馈模型时,反馈的延迟为一个仿真时间步。这是因为输出反馈信号在进入仿真下一步之间必须进行计算。如果反馈延迟过长则会产生副作用,会导致系统过补偿或欠补偿。减少模型的时间步或△时间可以减少反馈延迟,最终模型会得到更准确的结果。第83页的“确定应使用dt的大小”涉及到更多内容。
集成
集成是通过对过去 和/或 将来模型中输入、计算和输出值的估计来估计当前值地方法。如果输入为速率(表示为单位时间内数量)则使用另一种方法来对值进行求和或累加计算。使用集成而不是仅仅对数值求和的优势在于,当△时间并不精确为1.0时集成能够正确的进行累加,这在需要使用更小△时间的带反馈模型中非常有用。集成(Euler)的一种简单方式是将输入速率与△时间相乘之后将结果累加。
Value库中的Holding Tank模块和集成模块具有集成能力。也可以使用ModL中的函数在自己创建的模块中加入集成功能。Holding Tank模块可以进行累加,同时如果需要的话也可以进行减去。该模块的对话框中可以设置对输入进行累加还是集成操作。(不论选择哪种方式都会对连续仿真的精度产生影响。本手册610页的“Holding Tank模块重的综合与总和”部分会进行深入阐述。)集成模块可以用来执行模块中集成的数学方程。
在My Reservoir模型(手册23页ExtendSim教程中)中并没有反馈,并且该模型使用的△
时间为1。该模型中的Holding Tank模块可以对输入进行累加或集成操作(但是结束时间需要做相应调整)。Overflow模型(手册63页教程中)中有反馈并且使用了一个较小的△时间,因此Holding Tank的输入必须进行集成。
版权所有 刃之砺信息科技(上海)有限公司 www.edgestone-it.com 敬请登录网站浏览文档更新
86 概念、提示和技巧
仿真次序
仿真次序
可以在Run>Simulation Setup>Continuous选项卡中选择ExtendSim连续模型中执行模块的顺序。(在离散系统中同样会使用仿真次序,以此对Merge和Diverge模块中的变差次序设置进行初始化。)
可选择的执行次序为“流程顺序”(默认)、“从左到右”以及“自定义”。为观察模块执行的顺序,可以在模型运行时从模型菜单里选择“显示仿真顺序”(Model>Show Simulation)。
通常情况下采用默认选择,即流程顺序。
流程顺序
仿真过程中,组成ExtendSim模型的模块的计算一般依赖于各自的输入值。做完计算后,模块就会将计算结果设置到输出连接端口上,从而其他的模块可以使用这些计算结果。
在这类系统里,必须有一个“初始”模块,放在所有要依赖于它的结果的其他模块之前。初始模块计算完成后,其它的模块应当按顺序和连接方向来计算,该顺序在每个时间步数或仿真事件中都会被重复。要看见该顺序,应当从模型菜单下选择“显示仿真顺序”。
在连续模型中,ExtendSim确定模块计算顺序的规则是:
● 产生输入的模块首先执行。例如:输出仅与其它模块的输入相连接的常数模块或Lookup Table模块将会放在首位。
● 接下来,ExtendSim就按照一定的顺序和连接方向来执行与那些开始的模块相连接的模块。
● 未被连接的模块和双向网络模块(仅仅只有输入和输入相连接的)按从左到右的顺序被执行。
如果连续模型中的流程顺序与反馈相关则会使用到反馈模块(Utilities库)。
从左到右的顺序
当对“流程顺序”进行更改时的使用警告。
若是选择了该选项,在工作区,ExtendSim就会优先考虑每个块的左/上角。最左边的块会优先执行,下一个最左边的块会紧接着执行,如此类推。按从左到右从上到下的顺序。若模型流动到右边,模块向右侧执行,如果在下部仍有模块需执行则执行该模块,该选项还将会优先计算最左边的模块。若采用该顺序,要注意的是:计算评估的模块必须位于需要这些数值作为输入模块的左边。否则在计算那些数值时就会有一步迟滞。
自定义顺序
当对“流程顺序”进行更改时的使用警告。
在连续模型中,多反馈回路模型无法自动适用于某些执行顺序方案。这种情况的产生是因为有多种解决DGA(有向非循环图)问题的方案,并且有的解决方案采取了用户不希望使用的执行顺序方案。
版权所有 刃之砺信息科技(上海)有限公司 www.edgestone-it.com 敬请登录网站浏览文档更新
概念、提示和技巧 87
混合模块类型
为了解决该顺序问题,可以在开始时采用流程顺序,之后使用模型菜单下的“设置仿真顺序”命令(Model>Set Simulation Order)来改变少数模块的执行顺序。
为了有效地运用自定义顺序,应该通过显示仿真顺序命令(Model>Show Simulation Order)
来核对仿真的运行情况,使用户能看见哪些模块的执行顺序需要变化。
另外,只有选用自定义顺序并且选定一个模块的情形下显示仿真顺序命令才可以使用。
在设置仿真顺序对话框中,用户可以为当前选中的模块输入一个新的顺序号,之后该模块即移动到仿真次序的相应位置。
注意,如果选定流程顺序或从左到右顺序,那么自定义的顺序均会丢失。
设置仿真顺序对话框
混合模块类型
用户可以在离散事件或具有离散速率的模型中使用连续模块(例如Value库中的模块)。然而,在连续模型中无法使用离散事件或离散速率模块。离散事件和离散速率库中的所有模块都需要一个执行模块来将模块时间转变为事件时间。
可建立的模型种类取决于ExtendSim包。
用户可根据本手册498页的“连接端口类型”部分对哪些类型的连接端口可以相互连接进行深入学习。
多输入连接
在连续模型中,可以将一个输出连接端口与多个输入连接端口相连接。当多个模块需要前面模块的计算结果时会用到多输入。例如,如果一个模块的输出与其他四个模块的输入相连,模型如右图所示。
在离散事件模型中连接工作的方式有所不同,本手册 连续模型中,一个输出与四个
258页的“事件调度”会讨论到。 输入相连的情况
出于审美的原因,用户可能希望输入只有一个连接,例如如果各模块之间距离比较远的时候。这时可以不使用四条连接线,而是将输入与某一个输入相连之后再将四个输入连接起来(可以称作雏菊花环),如右图所示。(注意这种连接方式可能会给其他用户带来疑惑。)
四个输入各自相连的情况
使用Plotter作为输入
Plotter库中的模块可以保存其底部表格中所有点的值。仿真运行后用户可以
版权所有 刃之砺信息科技(上海)有限公司 www.edgestone-it.com 敬请登录网站浏览文档更新
88 概念、提示和技巧
使用一条划分线做参照或基准
某些情况下用户可能想使用Plotter数据作为另一个ExtendSim模型的输入。例如当一个大模型被划分为几个小模型存储到不同文件时。使用Plotter I/O模块(Plotter库)可以快速的将数据从一个连续模型传递到另一个连续模型。如前所述输出分别与其他四个模块输入相连的模块。如果想将Plotter的输入引入到另一个模型中,选择该模块,在编辑菜单下选择复制命令,选择另一个模型,将刚刚复制的Plotter模块粘贴过来作为该模型的开始,之后将该Plotter模块的输出与需要其数据的模块相连。
如果需要使用另一个应用程序中的Plotter模块数据,只需打开该模块选中需要的数据列,在编辑菜单下选择复制命令将数据复制到剪贴板,之后将这些数据复制到新的应用程序之中即可。如果不需要整列的数据,可以点击拖拽选择需要的单元格。
使用一条划分线做参照或基准
用户可能想绘制一个连续仿真演示所得的当前结果与一个早先运行的、用来作为基准的仿真演示结果的图形做比较,运用Plotter I/O模块(Plotter库)可以相当容易做到。首先运行仿真得到所需要的在Plotter器模块里作为参照的直线,选择该模块,在编辑菜单下选择复制命令,复制Plotter模块,包括其中所有的数据。
将与该线相连接的输出连接端口与源Plotter模块的输入连接端口相连接。当再次运行仿真时,产生该线的数据将会被绘制为一条参照线。
例如,假定想要重划一条来自于一个Plotter器的上部输入连接端口的线条。上述所说的步骤将会使模型看起来
如右图所示。 基准线的第二个Plotter模块
也可以将数据直接粘贴进一个Plotter模块的一列并将它们作为一个参照。如果只需要一条直线做参照,就不用上面的步骤,使用常数模块(Value库)生成一条参照线即可。另外还有一种方法生成参照线,即通过选择Math模块(Value库)中的函数并将该模块的输出与Plotter模块相连即可。
需要注意的是,这些方法与使用Plotter库中的Plotter MultiSim模块是不相同的。Plotter MultiSim模块允许在一个区域显示仿真演示的多个运行结果。
使模型更整洁
用户可以将某个模块的输出与其他模块的输出进行算术结合。同时也可以使用某一个模块的输出作为其他多个模块的输入。不过要使用单独的模块代表复杂模型中的每个运算方程、计算步骤或某部分的话会使模型过于忙碌。如果想要使模型更整洁,可以将多个模块的功能整合到一个模块中,可使用的方法如下:
● 将模块组合成为层级模块。见540页“层级”部分。
● 使用Equation模块(Value库)来代替多个模块的计算。见601页“基于方程式的模块”部分。
● 创建综合了多个模块功能的自定义模块。见ExtendSim开发者参考手册。
因篇幅问题不能全部显示,请点此查看更多更全内容