anylogic系统动力学教程doc.docx
《anylogic系统动力学教程doc.docx》由会员分享,可在线阅读,更多相关《anylogic系统动力学教程doc.docx(49页珍藏版)》请在冰豆网上搜索。
anylogic系统动力学教程doc
系统动力学教程
©1992-2005XJTechnologiesCompanyLtd.
版权所有©1992-2005XJTechnologies。
保留所有权利。
XJTechnologiesCompanyLtd
AnyLogic@
关于此教程
AnyLogicTM支持多种不同的建模技术。
本教程介绍了其中的系统动力学(SystemDynamics,简称为SD)建模方法。
系统动力学仿真技术可以成功应用于多种领域——其应用领域包括商业,城市,社会,生态学等系统。
AnyLogicTM允许你使用标准的系统动力学图形符号创建复杂的动态模型。
这一教程将向你简要介绍使用AnyLogicTM创建一个仿真模型的过程。
此教程的目的在于向你介绍AnyLogicTM的界面及其许多主要特性。
我们将创建一个简单的演示范例——产品生命周期模型,此模型用于预测新产品的销售情况。
在第一章中我们将创建经典的Bass扩散模型。
然后我们将通过考虑一些细节信息和向你介绍一些AnyLogicTM的高级特性,来对我们的模型进行扩展。
请注意我们为这两个模型提供了一些参考文件,这些文件对应于编辑模型过程中的一些关键步骤的结果。
如果你在创建模型时遇到任何问题,或你希望将你的模型与我们提供的模型对比,你可以使用这些参考文件。
你可以使用StartPage(开始页)打开这些示例文件。
在关闭你正在编辑的模型之后,StartPage(开始页)将自动出现。
1.产品生命周期模型
我们将创建产品生命周期模型。
这一模型描述了一个产品的扩散过程。
产品的潜在客户会受到广告和现有客户(那些已经购买了这种新产品的人)的口碑影响而购买产品。
通过口碑影响而购买新产品与疾病传染类似。
潜在的客户通过社会关系与现有客户发生联系。
这些联系中的一部分将引起购买新产品。
广告在每个时期都会引起潜在客户中固定比例的一部分购买新产品。
1.1创建一个新工程
首先,我们将为你的模型创建一个新工程。
►创建一个新工程
1.点击NewProject(新建工程)工具条按钮
。
此时即出现NewProject(新建工程)对话框。
2.点击ChooseLocation…(选择存放位置)按钮,然后浏览找到你希望保存你的工程文件的文件夹。
3.指定工程名称。
在Projectname(工程名称)编辑框中,输入ProductLifeCycle(产品生命周期)
4.点击OK。
此时即创建了一个新工程。
你可以看到structurediagram(结构图)显示于工作区的中心,Project(工程)窗口显示于左侧面板,Properties(属性)窗口显示于右侧面板。
当在一个工程中进行工作之后,请不要忘记点击Save(保存)按钮
以保存此工程。
1.2分析此模型
现在我们需要分析此模型以决定如何使用系统动力学术语对其进行描述。
我们应区分模型中的关键变量和他们的影响模式,然后再创建模型的存储体(stock)和流图。
在创建存储体(stock)和流图时,我们应注意何种变量应使用存储体(stock),流,或从属动作(auxiliary)进行建模。
存储体(stock)(也称为水平(level),累积(accumulation),或状态变量)的值随时间连续改变。
流,也称为率,可以改变存储体(stock)的值。
反过来,系统中的存储体(stock)也决定流的值。
它们之间的部分称之为从属动作(auxiliary),其值可以发生突变。
当创建一个存储体(stock)和流图时,首先考虑何种变量将在一个时间段内累积其值。
在我们的模型中,客户和潜在客户人数是存储体(stock),而对新产品的购买率是一个流。
模型的系统动力学表述显示于如下图中。
存储体(stock)用方框表示,流用阀门表述,从属动作(auxiliary)用圆圈表示。
箭头表示模型中的因果关系。
在AnyLogicTM中,你可以使用结构图定义存储体(stock)和流图。
在结构图中你可以使用图形方法定义存储体(stock),流,和从属动作(auxiliary)。
在Project(工程)窗口中,双击工作区输中的Main项目,即打开结构图。
1.3将客户和潜在客户建模为存储体(stock)
首先,我们加入两个存储体(stock)以建模客户和潜在客户人群。
在AnyLogicTM中,一个存储体(stock)用一个变量表示。
►加入一个存储体(stock)以建模潜在客户人群
1.点击Variable(变量)工具条按钮
。
2.在图中点击你希望放置此存储体(stock)的地方。
此时图中即出现一个新变量,显示为蓝色圆圈。
3.一旦你将一个元素放置到结构图中之后,此元素即显示为选定状态,且其属性同时显示于Properties(属性)窗口中。
你可以根据你的模型需求,调整元素属性。
若需在稍后某时刻再调整属性,首先在图中点击选取此元素,然后根据需要修改其属性。
4.更改此存储体(stock)的名称。
在Properties(属性)窗口中,在Name(名称)编辑框中输入PotentialCustomers。
5.在Equation段,从Form下拉选单中选择IntegralorStock。
此时你可以看到图中的存储体(stock)形状变为方形,以符合系统动力学符号标准。
►加入一个存储体(stock)以建模客户人群
1.按同样方法加入此存储体(stock)。
将它命名为Customers。
到此为止,前面加入的两个存储体(stock)并没有适当地定义。
稍后我们将为存储体(stock)定义积分函数(integralfunction),并指定其初始值。
但我们首先需要创建购买流(adoptionflow)。
1.4将购买建模为一个流
现在我们将建模购买流(adoptionflow),此流将增加客户数目,从而减少潜在客户数目。
在AnyLogicTM中,流用一个变量表示。
流的值根据指定的公式计算得出。
►创建Adoption_Rate(购买率)流
1.点击Variable(变量)工具条按钮
。
2.在图中点击你希望放置流的地方。
3.更改此流的名称。
在Properties(属性)窗口中,在Name(名称)编辑框中输入Adoption_Rate。
4.将EquationForm(等式形式)改为Formula(公式)。
我们将稍后再定义流的公式。
1.5定义购买流对人群的影响
现在我们将建模流对存储体(stock)值的影响。
存储体(stock)的值根据你所指定的积分函数计算得出。
此函数应定义为如下形式:
+…--…
向此存储体(stock)的当前值加入流入流(inflow,即增加存储体(stock)值的流)的值,并从此存储体(stock)的当前值中减去流出流(outflow,即减少存储体(stock)值的流)的值。
►定义由于购买而从潜在客户群中流出的流(outflow)
1.在结构图中点击Potential_Customers变量。
2.在Properties(属性)窗口中,定义此函数:
-Adoption_Rate。
使用函数向导(functionwizard)以省却输入等式表达式中的变量和函数的完整名称。
为打开函数向导,在d(Potential_Customers)/dt编辑框中点击所需的位置,然后点击
按钮或按Ctrl+Space。
此向导中将列出所有的模型变量和预定义的函数。
拖动滚动条找到你希望加入的名称,或输入该名称的开头第一个或若干个字母直到此名称出现于列表中。
双击此名称,以将其插入到等式表达式中。
►定义由于购买而向客户群中流入的流
1.按与上述相同的方法操作。
输入Adoption_Rate公式。
1.6加入常数
现在我们将定义我们模型中的常数。
在AnyLogicTM中,你可以通过创建一个参数(parameter)来定义一个常数。
►定义代表总人数的常数
1.在Project(工程)窗口中,双击Main类项目。
2.在Properties(属性)窗口,点击NewParameter…(新建参数)按钮
。
在打开的Parameter(参数)对话框中,设置参数属性。
3.更改此常数的名称。
在Name(名称)编辑框中输入Total_Population。
4.在Defaultvalue(默认值)编辑框中,输入100000。
这一值将作为我们模型中的总人数。
5.你可以在Description(描述)编辑框中输入对此参数的简短描述。
输入在向对此模型不熟悉的人解释此常数时有帮助的文字。
你可以看到新参数即被加入到Parameters(参数)表格中。
在这一模型中,广告量以及潜在客户由于受到给定量广告的影响而可能购买的概率在每个时期中都被假定为常数。
所以,我们需要加入一个常数以建模广告有效性——由于广告而引起的购买人群的比率。
►定义代表广告有效性的常数
1.以同样方法定义一个常数。
将此常数命名为Advertising_Effectiveness。
2.设置其值为0.011。
潜在客户与已有客户之间进行联系的频率被假定为是常数。
因此我们需要定义一个常数以代表联系频率。
►定义常数Contact_Rate
1.按同样方法定义此常数。
输入其名称:
Contact_Rate.。
2.假定联系频率为每年每人100次。
在Defaultvalue(默认值)中,输入100。
再定义一个常数以指定购买比例——所发生的联系中其说服力强得足以使得潜在客户购买此产品的那部分的比例。
►定义常数Adoption_Fraction
1.将此常数命名为Adoption_Fraction。
2.设置其值为0.015。
·
1.7定义存储体(stock)的初始值
现在我们准备好了指定存储体(stock)的初始值。
►定义客户的初始数目
1.在结构图中,点击Customers存储体(stock)。
2.产品客户的初始数目为0。
在Properties(属性)窗口中,在Initialvalue(初始值)编辑框中输入0。
►定义潜在客户的初始数目
1.在结构图中,点击Potential_Customers存储体(stock)。
2.在此存储体(stock)的Initialvalue(初始值)属性中输入Total_Population(你可以使用函数向导)。
此时即完成了定义新的存储体(stock)。
1.8加入从属动作(auxiliary)
我们需要加入两个从属动作(auxiliary)以代表由于口碑影响而引起的购买和由于广告影响而引起的购买。
►创建Adoption_From_Advertising从属动作(auxiliary)
1.点击Variable(变量)工具条按钮
。
2.在图中点击你希望创建从属动作(auxiliary)变量的位置。
3.在Properties(属性)窗口中,将Name(名称)改为Adoption_From_Advertising。
4.将Equationtype(等式类型)改为Formula(公式)。
5.定义此公式的表达式:
Advertising_Effectiveness*Potential_Customers
►创建Adoption_From_Word_Of_Mouth从属动作(auxiliary)
1.按照与上述相同的方法进行操作,但将名称改为Adoption_From_Word_Of_Mouth,然后指定如下公式:
Contact_Rate*Adoption_Fraction*Potential_Customers*Customers/Total_Population
1.9定义购买率公式
现在我们需要用公式表示购买率。
两种引起购买的原因被假定为是互相独立的。
因此,总的购买率就是由于已有客户口碑影响引起的购买率和由于广告影响引起的购买率之和。
►定义购买率的公式
1.在结构图中点击Adoption_Rate变量。
2.在Properties(属性)窗口中,指定公式表达式:
Adoption_From_Advertising+Adoption_From_Word_Of_Mouth
现在我们就完成了定义我们的模型。
1.10查看因果依赖性
你可以检验你的模型中的存储体(stock),流和从属动作(auxiliary)之间的因果依赖性。
与标准SD符号相同,这些依赖性用箭头表示。
一个从流指向存储体(stock)的箭头表示这一流作为此存储体(stock)的入流。
一个从存储体(stock)指向流的箭头表示这一流是一个出流。
一个从变量A指向变量B的细箭头表示A引起B的改变。
►查看模型中的因果关系
1.点击Show/HideVariableDependencies(显示/隐藏变量依赖关系)工具条按钮
。
你可以看到表示因果依赖性的箭头即显示出来。
你可以看到我们的模型有一个平衡反馈环和一个增强反馈环。
平衡反馈环影响由于广告引起的购买率。
此购买率减小潜在客户的数目,而潜在客户数目减少接着又会降低购买率。
增强反馈环影响由于口碑效应而引起的购买率。
购买率增加客户人数,引起口碑上升,从而又增长了购买率。
你可以检查你所输入的整个等式系统。
►打开等式系统视图
1.在Project(工程)窗口,展开Main项目,然后双击Main子树中的Code项目。
2.你的模型的等式系统即显示于所出现窗口的Equation部分。
在这里你可以编辑现有的等式和加入新的等式。
1.11配置仿真
模型仿真有一系列特定的设置。
可以创建多个替代性的模型设置。
一组模型设置称为一个实验(experiment),实验显示于模型树中Experiments项目之下。
默认将创建一个实验,并将其命名为Simulation。
这一实验是一个仿真实验(simulationexperiment),它允许使用自定义的参数值进行模型仿真,并在仿真时显示动画。
实验也有其他类型(优化(optimization),风险评估(riskassessment),参数变化(parametervariation)实验),当模型参数起重要作用,并且你需要分析它们如何影响模型行为,或当你希望找到你的模型的最优参数时,你可以使用这些实验。
如果我们此时开始运行此模型,它将无限期地运行。
由于我们只希望观察在购买过程发生时模型如何表现,因此我们需要在系统达到平衡状态时停止模型运行。
这个模型中的购买过程持续了大约超过8年。
►将模型设置为在时间为8时停止
1.在Project(工程)窗口中,点击实验Simulation。
2.在Properties(属性)窗口的Additional(附加)选项卡中,选中Stopattime选框。
在右边的编辑框中,输入8。
这一模型将在8个单位模型时间之后停止运行。
你可以设置求解微分方程系统的方法。
如果你不指定一个特定的求解器,就会保留Automatic(自动),AnyLogicTM即根据系统行为,在运行时自动选择一个数值解法。
►设置数值积分RK4方法
1.在仿真实验的Additional(附加)属性页中,从Differentialequations(微分方程)组合框中选择RK4方法。
1.12运行模型
点击Build(构建)工具条按钮
以构建你的工程。
如果你的工程中存在错误,则构建操作失败,同时出现Output(输出)窗口,在其中列出你的工程中找到的所有错误。
双击列表中的一个错误,打开此错误的位置并将其改正。
在工程成功构建之后,你就可以开始运行模型。
点击Run(运行)
以开始运行模型。
至此为止,你都是在使用AnyLogicTM的编辑器(editor)模式。
模型开始运行之后,即切换到查看器(viewer)模式。
在查看器模式中,你可以控制模型执行,检查模型变量,查看图表,动态更改参数等等。
1.13查看变量的值
有多种方法在AnyLogicTM中查看变量的值。
首先,变量值显示在ModelViewer(模型查看器)中。
►查看模型中变量的值
1.点击Run(运行)
以开始运行模型。
2.点击ModelRootObject(模型根对象)工具条按钮
。
ModelViewer(模型查看器)窗口即打开。
你可以看到变量的真实值显示于模型树中。
你可以点击Pause(暂停)按钮
以暂停模型,然后根据需要改变任意变量的值,具体操作为右键点击模型树中的变量项目,从弹出菜单中选择Modify(修改),然后在打开的对话框中指定新值。
这里对应的参考模型可以在如下位置找到:
Examples\SystemDynamicsTutorialModels\ProductLifeCycle-1-Creatingthemodel.alp。
1.14用图表显示变量的变化
在仿真过程中,你也可以通过图表观察变量值如何变化。
1.14.1查看客户和潜在客户数目动态信息
►创建客户和潜在客户图表
1.点击Step(单步运行)工具条按钮
以准备运行模型。
2.点击NewChart(新建图表)工具条按钮
。
此时即出现一个图表窗口。
3.选择要在图表中显示的变量。
点击图表窗口,然后从弹出菜单中选择ChartSetup…(图表设置)此时即出现ChartSetup(图表设置)对话框。
4.在Variables,parameters,anddatasets(变量,参数和数据集)列表中双击root.Custommers变量以将其加入到图表中。
5.双击root.Potential_Customers变量以将其加入到同一个图表中。
6.点击OK。
►配置此图表
1.点击Step(单步运行)工具条按钮
以准备运行模型。
2.右键点击图表窗口,然后从弹出菜单中选择ChartSetup…(图标设置)在打开的对话框中设置此图表的数值范围。
现在点击RestartModel(重新开始模型)按钮
,然后点击Run(运行)按钮
,以重新开始运行模型。
此图表显示了Potential_Customers和Customers变量在仿真过程中如何变化。
你可以看到经典的S形扩散曲线。
1.14.2查看购买率
现在我们将创建一个图表以显示我们的模型中购买率是如何变化的。
►为Adoption_Rate创建一个图表
1.创建一个新图表,方法与前一节中相同。
向此图表显示的内容加入Adoption_Rate变量。
点击RestartModel(重新开始模型)按钮
,然后点击Run(运行)按钮
,以重新开始运行你的模型。
你可以看到经典的铃形曲线。
1.14.3查看不同购买源的贡献
我们希望查看何时口碑效应开始超过广告效应的影响。
因此,我们需要创建一个图表以显示这些变量,并找到其对应曲线的交点。
►创建一个图表,显示由于广告引起的购买和由于口碑引起的购买
1.创建一个新图表,显示Adoption_From_Advertising和Adoption_From_Word_Of_Mouth变量。
点击RestartModel(重新开始模型)按钮
,然后点击Run(运行)按钮
,以重新启动模型。
现在我们可以很容易地看到,当一项新产品进入市场,且用户数目为0时,唯一引起购买的源泉就是广告。
广告效应在扩散过程的开始阶段最大,随着潜在客户群逐渐缩小直至被耗尽,广告效应呈一直减小趋势。
这一图表将自动改变其尺度大小以容纳绘出的曲线。
这一图表显示了从仿真开始到仿真结束的变量变化过程,但是我们只需要考察特定时间段的情况。
►设置图表只显示特定时间窗口内的变量变化。
1.右键点击图表,然后从弹出菜单中选择ChartOptions…(图表选项)此时即出现ChartOptions(图表选项)对话框。
在Axes页面的Windowsize编辑框中指定时间段的长度。
输入1然后点击OK。
现在此图表只显示最后一个时间单元的曲线。
2.点击RestartModel(重新开始模型)按钮
,然后点击Run(运行)按钮
,以重新启动模型。
滚动图表,以查看仿真的开始部分。
现在你可以看到曲线相交于(0.46,11000)附近。
这里对应的参考模型可以在如下位置找到:
Examples\SystemDynamicsTutorialModels\ProductLifeCycle-2-Charts.alp。
1.15创建一个显示台(show-bench)
在这一部分我们将创建一个显示台(show-bench),以用于通过改变常数(广告有效性,联系频率,和总人数)的值来控制模型和观察这些改变如何影响模型。
这些改变将通过图表和动态的存储体(stock)和流图显示出来。
1.15.1创建动画图
为创建一个显示台,你需要使用动画图来绘制它。
►创建一个动画
1.点击NewAnimation(新建动画)工具条按钮
。
在打开的对话框中,给模型动画指定一个名称。
►编辑动画画框
1.通过移动动画画框形体,设置其坐标为(0,0)。
点击动画画框的矩形,然后拖动它,使得它的左上角与坐标轴交叉处——即图坐标的原点重合。
通过拖动手柄改变动画画框的大小为(600,350)(鼠标光标的坐标显示在状态栏中)。
用同样的方法,你可以移动或改变图中其他所有形体的大小。
►加入显示台的标题
1.点击Text(文字)工具条按钮
。
2.点击图中(25,20)附近的位置,以放置此文字。
3.定义要在所创建的文本框中显示的文字。
在Properties(属性)窗口的Text(文字)页面中,在Text编辑框中输入ProductLifeCycle
4.改变文字字体。
在Font(字体)段,点击Choose(选择)按钮,在打开的对话框中设置字体为Arial,加粗,12号。
1.15.2创建动态的存储体(stock)和流图
现在我们将创建动态存储体(stock)和流图,如下图所示。
首先,我们将使用几何形体(线段,矩形等)绘制存储体(stock)和流图,然后我们将通过加入标记(图表,柱状图和圆弧标记)使存储体(stock)图和流图动起来。
最后,我们将加入控件,以改变模型常数的值。
►加入存储体(stock)和流图的边界
1.点击Rectangle(矩形)工具条按钮
。
2.在图中点击(230,100)附近,然后拖动到(590,340)。
现在我们将利用柱状图标记使我们模型中定义的存储体(stock)动起来。
柱状图标记显示了在当前时刻,存储体(stock)如何相对于指定的边界被填充。
►为Potential_Customer存储体(stock)加入一个柱状图标记
1.点击BarIndicator(柱状图标记)工具条按钮
。
2.点击图中(270,120)附近的位置,以放置此柱状图标记。
3.调整此标记形体的大小为(60,40)。
4.在Properties(属性)窗口的BarIndicator(柱状图标记)页面,在Valuetoindicate