Anylogic基于主体建模教程.docx
- 文档编号:23694410
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:43
- 大小:865.07KB
Anylogic基于主体建模教程.docx
《Anylogic基于主体建模教程.docx》由会员分享,可在线阅读,更多相关《Anylogic基于主体建模教程.docx(43页珍藏版)》请在冰豆网上搜索。
Anylogic基于主体建模教程
基于主体建模教程
©1992-2005XJTechnologiesCompanyLtd.
版权所有©1992-2005XJTechnologies。
保留所有权利。
XJTechnologiesCompanyLtd
/anylogic
关于此教程…………………………………………………………………………4
1.产品生命周期模型………………………………………………………………5
1.1创建一个新工程………………………………………………………………5
1.2创建主体……………………………………………………………………6
1.3定义主体特性………………………………………………………………7
1.4定义主体行为………………………………………………………………11
1.5计数产品用户数……………………………………………………………14
1.6配置模型……………………………………………………………………17
1.7运行模型……………………………………………………………………18
1.8研究此过程…………………………………………………………………18
1.9考虑口碑的影响……………………………………………………………21
1.10加入产品消耗逻辑…………………………………………………………24
1.11创建空间模型………………………………………………………………26
1.12创建动画……………………………………………………………………29
2.扩展的产品生命周期模型………………………………………………………37
2.1广告活动……………………………………………………………………37
2.2多产品扩散…………………………………………………………………40
2.3人群移动……………………………………………………………………44
2.4人群迁移……………………………………………………………………47
3.总结………………………………………………………………………………51
关于此教程
AnyLogicTM支持多种不同的建模技术。
本教程覆盖了基于主体(agent-based)建模的步骤,基于主体的建模已经成功地应用于包括生态学,社会学,经济学,交通模拟等等许多领域在内的广泛范围。
基于主体的建模用于对市场(主体作为潜在客户),竞争和供应链(主体作为公司),人口(主体作为家庭,个人,或选举人)等进行建模。
基于主体的建模允许在假定系统各个基本成员行为的情况下对系统的一般行为进行观察,而不需要关于此系统的任何全局知识。
AnyLogicTM是唯一允许使用主体创建柔性模型,并且主体在其环境中可以相互交互的仿真工具。
AnyLogicTM支持所有现有的指定主体行为的方法——状态图(statechart),同步和异步事件规划。
这一教程将简要向你介绍使用AnyLogicTM创建一个仿真模型的过程。
其目的是向你介绍AnyLogicTM的用户界面和其他许多主要特性。
我们将创建一个简单的示范实例——产品生命周期模型,此模型用于预测新产品的销售情况。
在第一节我们将创建经典的Bass扩散模型。
然后我们通过考虑一些细节信息和向你介绍一些AnyLogicTM的高级特性来将此模型扩展。
请注意在如下文件夹中有一些文件供参考:
Examples\AgentBasedModelingTutorialModels,这些文件中包括了本文所述编辑过程中的一些重要记录。
如果你在创建模型过程中遇到任何困难,或你希望将你的模型与参考文件相比较,你可以使用这些参考文件。
你可以使用StartPage以打开这些示例。
在你关闭你正在编辑的模型之后,StartPage将自动出现。
1.产品生命周期模型
在这一教程中我们将创建产品生命周期模型。
这一模型描述了产品的扩散过程。
产品的潜在客户会受到广告和客户(那些已经购买了这种新产品的人)的口碑影响而购买产品。
1.1创建一个新工程
首先,我们将为你的模型创建一个新工程。
创建一个新工程
1.点击NewProject
工具条按钮。
此时即出现NewProject对话框。
2.点击ChooseLocation…按钮,然后浏览找到你希望保存你的工程文件的文件夹。
3.指定工程名称。
在Projectname编辑框中,输入ProductLifeCycle。
4.点击OK。
此时即创建了一个新工程。
你可以看到结构图(structurediagram)显示于AnlyLogicTM工作区中,Project窗口显示于左侧面板中,Properties窗口显示于右侧面板中。
当在一个工程中进行工作之后,不要忘记点击Save
以保存此工程。
1.2创建主体
在创建基于主体的模型时,你要做的第一件事情就是创建主体。
主体是基于主体的模型的基本构建模块。
基于主体的模型包括多个主体以及它们的环境。
根据一个主体与哪些其他主体发生交互,每个主体都被给予一系列规则;这些交互将产生整个系统的总体行为。
在这一模型中,主体是人。
为了在AnyLogicTM中创建主体,你需要使用活动对象类(activeobjectclass)定义主体的内部结构,然后创建所需数量的类实例,每一实例即代表一个主体。
创建一个主体
1.点击NewActiveObjectClass
工具条按钮。
2.在打开的对话框中,指定新类的名称(Nameofthenewclass):
Person。
Person类图即自动打开。
这样你就成功创建了一个类,此类将定义主体的内部结构。
现在向模型中加入主体。
为将主体放置于模型环境中,你需要将建模主体(人)的对象封装到建模环境的类(Main)中去。
将主体放置于环境中
1.在Project窗口中双击Main项目,打开Main类图。
2.将Person类从Project窗口中拖动到Main类的结构图中。
3.在Properties窗口的General页面中,输入对象的名称(Name):
people。
4.指定你希望放置于模型中的主体数量。
在Properties窗口的Replication页面中,输入对象的数量(Numberofobjects):
1000。
此时将自动创建所指定数量的类实例,每个实例代表一个主体。
这样我们就创建了所需数量的主体。
现在我们需要使用类参数(parameters)和状态图(statechart)来定义主体属性和行为。
1.3定义主体特性
你可以使用类参数(parameter)定义主体属性。
由于所有主体都是同一个活动对象类(activeobjectclass)的实例,因此对每个主体,其基本的内部结构是相同的。
类参数允许为每个主体分别定义其属性。
定义个人的广告建议性
1.在Project窗口中,点击Person项目。
2.在Properties窗口,点击NewParameter…
按钮。
在打开的Parameter对话框中,设定参数属性。
3.改变参数名称。
在Name编辑框中输入Ad_Effectiveness。
4.定义参数数值。
在Defaultvalue编辑框中,输入0.011。
5.你可以在Description编辑框中输入对此参数的简短描述。
输入文本用于帮助向不熟悉此模型的人进行解释。
你可以看到在Parameters表格中加入了新的参数。
定义每人每年联系的数目
1.以同样方法创建参数。
输入名称:
Contact_Rate。
2.假定每人每年的联系频率为100。
在Defaultvalue编辑框中,输入100。
1.
指定此人的说服力,即其与别人的联系中多大比例可以说服其熟人来购买此产品。
定义个人的所说服力
1.将参数命名为Adoption_Fraction。
2.设定参数值为0.015。
创建附加参数
1.在Project窗口中双击Person项目,打开Person类图。
2.点击NewVariable
工具条按钮,然后点击类图。
此时图中即出现一个变量,显示为蓝色圆圈。
一旦你将元素放置于结构图中之后,它即被选定,同时其属性将显示于Properties窗口中。
你可以根据你的模型需求,调整元素属性。
请注意Properties窗口是上下文相关的——根据你所选择的元素类型不同,它将显示不同的选项。
如果稍后调整属性,你应首先在Project窗口中点击一元素以将其选定,或在结构图中选定它。
3.改变参数名称。
在Properties窗口中,在Name编辑框中输入model。
4.定义变量类型(Type):
Main。
这里Main是环境对象类。
5.指定参数的起始值。
我们需要此变量以简化主体对环境的访问。
6.创建变量isAdopter,并且此变量有如下属性:
这一变量将帮助我们了解此个人是现有客户还是潜在客户。
1.4定义主体行为
主体行为通过状态图(statechart)定义。
创建状态图
1.在Project窗口中双击Person项目,打开Person类图。
2.首先,点击Statechart
工具条按钮,然后点击类图。
此时图中即显示状态图图标。
3.双击此图标。
即打开显示如下状态图的图表。
4.在Properties窗口中,改变此状态图名称为adoption。
5.在状态图中,点击此状态,然后按F2键,将其重命名为PotentialAdopter。
由于起始状态指针指向此状态,因此它为起始状态。
直到此状态变为活跃,这个人将一直保持为潜在客户。
6.绘制如下的状态图。
7.点击State
工具条按钮,以加入更多状态,然后点击PotentialAdopter状态之下的状态图标。
将此状态命名为Adopter。
这样在这一状态变为活跃时,这个人即变为客户。
8.加入一个从PotentialAdopter状态到Adopter状态的转变。
点击Transition
工具条按钮,然后点击上方状态的边缘,然后再点击下方状态的边缘。
9.在Properties窗口中,从Fire下拉选单中选择Aftertimeout,然后指定Timeout数值。
此转变模拟了此人购买产品的过程。
决定购买产品的决策时间与此人的广告建议性成指数关系。
exponential()函数是标准AnyLogicTM随机数发生器。
AnyLogicTM也提供了其他随机数分布,如正态分布,均匀分布,三角分布等。
请参考用户手册(Users’Manual)以了解所有这些随机数发生器的细节描述。
在AnyLogicTM的类参考手册(ClassReference)中你可以查到发生函数及其参数信息。
为打开AnyLogicTM用户手册或类参考手册,请从Help菜单中选择对应菜单项。
1.5计数产品客户
模型的主要目的是研究新产品如何被接受,因此我们希望能够知道在任一时刻有多少人已经购买了我们的产品。
我们创建两个变量以计数产品的现有客户和潜在客户。
创建变量
1.在Project窗口中双击Main项目,打开Main类图。
2.创建变量potential_adopters。
3.创建变量adopters。
修改状态图
1.在Project窗口中双击adoption项目,打开adoption状态图。
2.点击PotentialAdopter状态。
在Properties窗口中,指定该状态的进入行为(Entryaction)和离开行为(Exitaction)。
当进入此状态时,我们将用于计数潜在客户的变量增加1。
当离开此状态时,我们将此变量减少1。
为确认所作出的改动,我们调用环境对象的setModified()函数。
变量isAdopter标明此人是否已经购买此产品(如果是,则为true,否则为false)。
3.用同样方法,我们设定Adopter状态的属性。
1.6配置模型
模型仿真有一系列特定的设定。
一组模型的设定称之为一个实验(experiment)。
你可以创建多个替代模型设定,然后只需改变此模型的当前实验即可改变模型工作配置。
实验显示于模型树中的Experiments项目之下。
默认情况下即已创建一个实验并命名为Simulation。
这是一个简单实验(simpleexperiment),提供了过程可视化的工具。
在模型参数起重要作用,并且你需要分析这些参数如何影响模型行为,或你希望找到你的模型的最优参数时,你也可以使用多种其他类型的实验(如优化,风险评估,变化测试)。
请查阅用户手册以了解更多细节信息。
如果我们现在即运行此模型,则它将无限期工作。
由于我们只想观察在用户接受产品过程发生时模型行为是怎样的,我们需要在系统达到平衡状态时停止此模型。
在此模型中,超过8年购买过程将趋于平稳。
由于在此模型中一个单位模型时间对应于一年,因此我们需要在8个单位时间之后停止模型。
设置模型停止条件
1.在Project窗口中,点击Simulation实验项目。
2.在Properties窗口的Additional选项卡中,选中Stopattime选框。
在右侧的编辑框中,输入8。
这一模型将在8个单位模型时间后停止。
1.7运行模型
点击Build
工具条按钮以建造你的工程。
如果你的工程中存在错误,则此建造操作失败,显示Output窗口,在其中列出你的工程中找到的错误。
双击列表中的一个错误,打开此错误的位置,然后改正此错误。
在工程成功建立之后,你可以通过点击Run
工具条按钮以开始运行此模型。
到这里,你一直在AnyLogicTM的编辑器模式中工作。
模型开始运行之后,即切换到查看器模式。
在查看器模式中,你可以控制模型执行,查看图表,动态改变参数,等等。
1.8研究此过程
你可以使用AnyLogicTM图表(chart)以对所考察过程的动态行为进行研究。
我们将创建一个图表以显示客户数目如何变化。
创建图表
1.点击Step
工具栏按钮以准备运行模型。
2.点击NewChart
工具条按钮。
此时即出现一个图表窗口。
3.选择需要在图表中显示的变量。
右键点击图表窗口,从弹出菜单中选择ChartSetup此时即出现ChartSetup对话框。
4.向下滚动Variable,parameters,anddatasets列表,然后双击root.potential_adopters变量,以将其加入到图表中。
5.用类似方法加入变量root.adopters。
6.点击OK。
配置图表
1.点击Step
工具栏按钮以准备运行模型。
2.右键点击图表窗口,从弹出菜单中选择ChartOptions…在出现的对话框中设定图表的时间范围。
现在点击Restart
以重新开始模型,然后点击Run
。
图表中显示了变量potential_adopters和adopters随着仿真过程如何变化。
广告在每段时期内引发固定比例的潜在客户人群进行购买。
此处可用的参考模型在Examples\AgentBasedModelingTutorialModels\ProductLifeCycle1-Simplemodel.alp.
1.9考虑口碑的影响
在当前模型中,人们购买产品的原因只是由于受到广告的影响。
实际上,广告效应只有在该产品刚刚投放到市场时才起主要作用。
随时间推移,人们购买产品的原因更多是由于受到已经购买此产品的熟人的影响。
为考虑口碑的影响,我们应略微修改我们的模型。
修改状态图
1.在Project窗口中双击adoption项目,打开adoption状态图。
2.向Adopter状态加入一个内部转变。
点击Transition
工具条按钮,然后点击Adopter状态的任一边。
3.将此转变设置为发生于指定的延时之后。
此转变模拟一个人如何说服其熟人来购买该产品。
转变率取决于这个人的说服力和联系频率。
4.指定转变的行为(action):
这一转变为此人的一些熟人的状态图产生信号事件。
因此,模拟熟人购买该产品的转变即发生。
信号事件通过调用状态图的fireEvent()函数来产生;你可以在类参考手册的StatechartBase类页面中找到对这个方法的描述。
5.加入另一个从PotentialAdopter状态到Adopter状态的转变。
6.这一转变模拟了由于口碑影响而带来的产品购买。
当信号事件发生后这一转变也将发生。
在此转变的属性页中,从Fire组合框中选择Ifsignaleventoccurs,然后指定Signalevent的类型。
7.点击Run
工具条按钮以开始运行模型。
你将看到如下图表:
你可以看到一条经典的S形扩散曲线——这一过程与传染病扩散过程类似。
此处可用的参考模型在Examples\AgentBasedModelingTutorialModels\ProductLifeCycle2-Wordofmouth.alp.
1.10加入产品消耗逻辑
我们创建的模型并未覆盖产品被消耗,被丢弃,或被升级的情况,而这些情况都将引起对此产品的重复购买。
我们将通过假定客户在其购买的第一件产品被丢弃或消耗之后变为潜在客户来建模重复购买行为。
首先,我们定义平均产品寿命时间。
定义产品的平均寿命时间
1.在Project窗口中双击Main项目,打开Main类图。
2.创建Discard_Time参数。
假定我们的产品的平均活跃使用时间为1年。
将此参数设置为全局(global)。
修改状态图
1.在Project窗口中双击adoption项目,打开adoption状态图。
2.加入一个从Adopter状态到PotentialAdopter状态的转变。
3.设置此转变的如下属性:
这样我们就完成了替代产品购买的建模。
点击Run
工具条按钮以开始运行模型,然后研究图中的产品扩散过程。
你可以看到在此模型中未达到市场饱和。
此处可用的参考模型在Examples\AgentBasedModelingTutorialModels\ProductLifeCycle3-Replacementpurchases.alp.
1.11创建空间模型
现在我们希望将我们的模型扩展到空间,在模型空间中定义人的地点。
定义人的地点
1.在Project窗口中双击Person项目,打开Person类图。
2.创建实数类型(real)的变量x和y。
为这两个参数设置相同的起始值。
使用均匀分布函数uniform(),我们将人放置在坐标为0到300之间的随机位置。
创建函数以计算人们之间的距离
1.在Project窗口,右键点击Person项目,然后从弹出菜单中选择NewMathematicalFunction…在打开的对话框中,设定函数名称:
distance。
2.在Properties窗口中,将函数类型(Functiontype)设置为real。
3.定义参数,以将另一个人的位置坐标传递给此函数。
4.指定函数表达式(Expression)。
修改状态图
1.在Project窗口中双击adoption项目,打开adoption状态图。
2.点击Adopter状态的内部转变,然后改变此转变的行为(action)。
现在人们将只与其邻居发生联系。
开始运行模型,测试其行为。
此处可用的参考模型在Examples\AgentBasedModelingTutorialModels\ProductLifeCycle4-Spatialmodel.alp.
1.12创建动画
现在我们创建模型动画以可视化我们的过程。
AnyLogicTM允许创建可以在模型仿真过程中改变参数的可交互动画。
首先,创建驱动我们的主体所需的变量。
创建新变量
1.在Project窗口中双击Person项目,打开Person类图。
2.创建变量color,其类型为Color。
Color是标准JavaTM类,它包含了预定义的颜色如黑色,白色,青色,紫红色,红色,等等;这个类也允许你创建自定义颜色。
这一变量将定义动画中的主体外形颜色。
AnyLogicTM动画使用动画图表绘制。
创建一个动画图表
1.在Project窗口,右键点击Main项目,然后从弹出菜单中选择NewAnimation…在打开的对话框中,为模型动画输入一个名称:
Animation。
动画编辑器(animationeditor)窗口将自动打开。
动画图表中的点状框指示了动画画框区域。
只在此画框中绘制动画。
为查看预定义的颜色列表以及Color类提供允许你自定义颜色的方法,请打开/
编辑动画画框
1.移动画框,使其坐标为(-20,-20),然后改变其大小为(520,340)。
你可以通过改变画框的X,Y,Height,Weight属性,或拖动图形手柄(鼠标光标位置显示于状态条上)来移动任一动画画框和改变其大小。
现在我们将绘制如下图所示的动画。
我们希望在动画中显示我们所在区域的居民。
我们将用不同颜色的点显示产品现有客户和潜在客户。
拖动exploredarea动画的限制框
1.点击Rectangle
工具条按钮。
2.在图中点击(-10,-10)点,然后按下鼠标键,移动鼠标到(310,310)。
此矩形应与上图中的实心矩形相似。
现在绘制一个形体,例如小矩形,以标明动画中有一个主体。
绘制主体
1.点击Rectangle
工具条按钮。
2.在属性窗口中,指定此矩形的名称(Name)。
3.设置此矩形的大小。
4.指定此图形的数目。
我们需要为每个主体都绘制一个矩形。
为此我们调用size()函数,以返回多重对象people所含有的元素数目——即是我们模型中的主体数目。
5.在动画中定义形体位置。
根据其x和y变量的值,对每一个主体分别定义其动画形体的坐标。
主体也可以通过agentObject.item(index)函数来访问,其中agentObject是建模主体的对象名称。
6.使用如下表达式定义形体的颜色。
这一表达式检测一个人是否为顾客(即检测isAdopter参数值)。
客户将用蓝色点表示,潜在客户用灰色点表示。
现在我们向动画中加入一些标记,以研究多少人已经购买了我们的产品。
加入潜在客户标记
1.点击BarIndicator
工具条按钮。
2.在区域的限制框中点击正确位置,以将标记放置于动画中。
3.在Properties窗口的General页面中,输入标记的大小:
4.在Properties窗口的BarIndicator页面,选择你希望用这个标记标明的变量。
5.设置最大显示值(Maxvalue),改变数值颜色(Valuec
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Anylogic 基于 主体 建模 教程
![提示](https://static.bdocx.com/images/bang_tan.gif)