首页 理论教育 蒙特卡罗模拟风险元传递软件的设计优化

蒙特卡罗模拟风险元传递软件的设计优化

时间:2023-06-01 理论教育 版权反馈
【摘要】:3.蒙特卡罗模拟风险元传递系统功能设计 某房地产项目占地50亩,该项目位于行政中心区内,建筑由办公楼、会议中心和酒店三部分组成。

蒙特卡罗模拟风险元传递软件的设计优化

蒙特卡罗法(Monte Carlo method)是一种应用广泛的系统模拟技术,产生于20世纪40年代,也称为统计模拟法(Statistical simulation method)或随机采样技术(stochastic sampling technique)。该方法是传统的风险分析方法,其基本思想是将影响项目目标的风险元依各自的分布分别进行随机抽样,然后用各风险元的随机取值来计算项目目标值,通过多次抽样和计算,就可获得项目目标随风险元传递影响的概率分布。

1.设计思想

蒙特卡罗模拟技术是项目风险元传递理论的一种通用算法,无论函数复杂性如何,风险元之间的运算关系如何,风险元的分布情况如何,理论上都可以利用蒙特卡罗模拟技术予以实现,因此,为使蒙特卡罗模拟技术可以相对独立地运行,蒙特卡罗模拟技术的编程无论是界面还是实现全部采用Matlab编程,即采用Matlab GUI编程实现。这样,用户可以只使用Matlab GUI编程后生成的exe可执行文件单独运行这部分功能,也可在系统的主菜单上通过点击“蒙特卡罗风险元函数传递模拟”运行。同Delphi调用其余exe程序一样,调用Matlab GUI编程后生成的exe可执行文件可以利用ShellExecute函数实现:

ShellExecute(handle,open,pchar(filepath+\+MentCarlo.exe),nil,nil,SW_SHOWNORMAL);

GUI(Graphical User Interface)指图形界面,用户可以在这样的界面中通过一系列鼠标、键盘操作指挥后台程序实现某些功能。这是一种提供程序易用性交互性的计算机编程方法,很多高级语言如VC++、Java都支持图形用户界面编程,Matlab也不例外。

在Matlab中,GUI编程和.M文件编程相比,除了要编写程序功能的内核代码外,还需要编写前台界面。Matlab图形用户界面程序的前台界面由一系列交互组件组成,主要包括按钮、单选按钮、框架复选框、文本标签、编辑文本框、滑动条、下拉菜单、列表框和双位按钮等。用户以某种方式选择或激活这些对象,通常引起动作或发生变化。Matlab把实现程序功能的内核代码和这些交互组件的鼠标或键盘事件关联起来,即通过设置这些交互组件的回调函数来完成特定交互事件下后台程序完成的功能。

2.蒙特卡罗模拟风险元传递GUI的设计流程

Matlab图形界面程序是基于消息驱动的,但它与其他可视化编程语言的不同之处也决定了其运行流程不同,如图7.17所示。

(1)初始化图形界面。这一过程是通过函数Openfig实现的。Openfig函数调用与.M文件对应的FIG文件来初始化图形界面。在这一过程中,还存在隐含*.fig的Creat Fcn函数。但这一过程无法使用输入参数,也就是说,要用输入参数设置图形界面元素的一些特征,还必须编写自己的初始化函数。

(2)创建句柄结构来存储该图形界面所有对象的句柄,用于回调函数及自己编写的函数。这一过程通过函数guihandles和guidata来实现。只有获得了图形界面所有对象的句柄,才能有效地进行编程,因为Matlab图形界面程序的基础是句柄的应用。

(3)在后台建立消息驱动机制,等待用户进行操作并作出相应的响应。

图7.17 GUI设计流程图

(4)初始化完毕,给出输出参数。

3.蒙特卡罗模拟风险元传递系统功能设计

【例7.6】 某房地产项目占地50亩,该项目位于行政中心区内,建筑由办公楼、会议中心和酒店三部分组成。开发期共3年,第一年的投资分别为(单位为万元):土地费用x1(服从a=11182,b=12105的连续均匀分布),开发建设费用x2(服从a=3122,b=3374的连续均匀分布),其他费用x3(服从ε=249,σ=15的正态分布);第二年的投资分别为:开发建设费用x4(服从a=6027,b=6551的连续均匀分布),其他费用x5(服从ε=911,σ=55的正态分布),营销费用x6(服从ε=251,σ=15的正态分布);第三年的投资为:其他费用x7(服从ε=294,σ=20的正态分布),营销费用x8(服从ε=334,σ=20的正态分布)。第一年的收入为0,第二年的收入x9(服从a=13569,b=17704的连续均匀分布),第三年的收入x10(服从a=12910,b=13762的连续均匀分布),该项目年贴现率为15%,求项目投资的净现值(NPV)。

(1)点击“模拟”菜单,选择“模拟次数选择”,如图7.18所示。在“模拟次数”对话框中可以选择需要模拟的次数,对话框中默认的模拟次数为1000次。

图7.18 输入模拟次数(www.xing528.com)

(2)点击“变量选择”菜单,单击“选择变量个数”可以对风险变量的个数进行确定,确定了风险变量个数后,系统会自动给出风险变量分配为x1-xn。如图7.19所示。

图7.19 输入变量的个数

(3)“变量个数”选择完成以后,可以对每个风险变量进行变量概率分布定义,其中包括正态分布、连续均匀分布、泊松分布、β分布、二项分布、F分布,此处我们选择x1(服从a=11182,b=12105的连续均匀分布),x2~x10的分布定义与本方法类似,故不再赘述。如图7.20以及图7.21所示。

(4)点击“定义公式”,可以自定义风险元变量之间的运算公式(公式输入的原则可参照Matlab HELP中关于公式输入的说明),输入自定义的净现值函数(自定义净现值函数代码见7.5.2)NPV([0,x9,x10],[(x1+x2+x3),(x4+x5+x6),(x7+x8)],0.15,3),如图7.22所示。

图7.20 选择变量分布

图7.21 均匀分布参数的输入

图7.22 输入自定义公式

(5)当变量概率分布定义和变量之间公式定义完成后,单击“模拟”,选择“开始模拟”,如图7.23所示,图7.24所示为模拟的结果。从模拟结果图中可以看出此项投资的NPV大于0的概率约为85%,说明该项目是值得投资的。

图7.23 开始模拟

图7.24 模拟结果

(6)单击统计数据菜单可以得到函数的多个统计量,其中包括实验次数、均值、方差、标准差、最大值、最小值、中位数、变异系数、偏度系数,如图7.25所示。

图7.25 统计数据

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈