数学建模报童问题_第1页
数学建模报童问题_第2页
数学建模报童问题_第3页
数学建模报童问题_第4页
数学建模报童问题_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机模拟实验目的:1.学习计算机模拟的根本过程与方法;2.会做简单的计算机模拟。实验内容:一、了解什么是模拟模拟就是利用物理的、数学的模型来类比、模仿现实系统及其演变过程,以寻求过程规律的一种方法。模拟的根本思想是建立一个试验模型,这个模型包含所研究系统的主要特点.通过对这个实验模型的运行,获得所要研究系统的必要信息模拟的方法:1、物理模拟:对实际系统及其过程用功能相似的实物系统去模仿。例如,军事演习、船艇实验、沙盘作业等。物理模拟通常花费较大、周期较长,且在物理模型上改变系统结构和系数都较困难。而且,许多系统无法进行物理模拟,如社会经济系统、生态系统等。2、数学模拟在一定的假设条件下,运用数学运算模拟系统的运行,称为数学模拟。现代的数学模拟都是在计算机上进行的,称为计算机模拟。计算机模拟可以反复进行,改变系统的结构和系数都比拟容易。在实际问题中,面对一些带随机因素的复杂系统,用分析方法建模常常需要作许多简化假设,与面临的实际问题可能相差甚远,以致解答根本无法应用。这时,计算机模拟几乎成为唯一的选择。二、报童问题某报童以每份0.03元的价格买进报纸,以0.05元的价格出售.根据长期统计,报纸每天的销售量及百分率为销售量200210220230240250百分率0.100.200.400.150.100.05当天销售不出去的报纸,将以每份0.02元的价格退还报社.试用模拟方法确定报童每天买进报纸数量,使报童的平均总收入为最大?[1]系统的假设:〔1〕模拟时间充分大;〔2〕报童购置报纸量介于销售量最小值与最大值之间;〔3〕不考虑有重大事件发生时卖报的顶峰期,也不考虑风雨天气时卖报的低谷期。[2]问题分析报童购进数量应根据需求量确定,但需求量是随机的,所以报童每天如果购进的报纸太少,不够买的,会少赚钱;如果购进太多,卖不完就要赔钱,这样由于每天报纸的需求量是随机的,致使报童每天的收入也是随机的,因此衡量报童的收入,不能是报童每天的收入,而应该是他长期〔几个月、一年〕卖报的日平均收入。我们可以应用计算机模拟的方法在模拟时间充分大的条件下〔例如10000天〕,模拟每天的销售量,因而确定每天应买进多少报纸才能使平均总收入到达最大值。设该问题的销售量为离散型随机变量,有分布列。所谓对离散型随机变量的模拟,其实质就是通过计算机上的模拟试验来取得在真实试验下的样本值,由分布列知只取数值,中的某一个.对离散型随机变量的一般模拟方法如下:(1)在直线上将[0,1]区间划分成假设干个子区间,其分点记为,,分点的坐标如下列图所示:001〔2〕在计算机上取伪随机数;〔3〕判定在轴上所落的位置,假设,那么可以认为的一次真实试验样本值取。[3]符号假设BUYMIN:每天的最小购置量BUYMAX:每天的最大购置量SIMUDAY:模拟时间sell_amount:报童销售量buy_amount:报童购置量percentage:销售百分率ave_profit:总平均利润loop_buy:当天购置量loop_day:当天时间[4]模拟框图初始化:初始化:BUYMIN;BUYMAX;SIMUDAY

;percentagebuy_amount=0;ave_profit=0;loop_buy=BUYMIN;sum_profit=0;loop_day=1产生随机数,根据选取sell_amountloop_day++loop_buy<sell_amount?sum_profit+=loop_buy*(0.05-0.03)sum_profit+=sell_amount*(0.05-0.03)+(loop_buy-sell_amount)*(0.02-0.03)buy_amount=[buy_amount,loop_buy];ave_profit=[ave_profit,sum_profit/SIMUDAY];;loop_day>SIMUDAY?loop_buy>BUYMAX?输出max(buy_amount),max(ave_profit);loop_buy++YNNYYNEND[5]计算机程序:在Matlab软件包中编程,共需两个M-文件:main.m,Getprofit.m,主程序为main.m.%主文件main.m:

BUYMIN=200;

%

每天的最小购置量

BUYMAX=250;

%

每天的最大购置量

SIMUDAY=1.0e+5;

%模拟时间sell_amount=200:10:250;

%销售量

percentage=[0.10.30.70.850.951];

%

百分率

buy_amount=0;

ave_profit=0;

forloop_buy=BUYMIN:BUYMAX

sum_profit=0;

forloop_day=1:SIMUDAY

index=find(percentage>=rand);%产生随机数,用于决定当天的销售量

sum_profit=sum_profit+GetProfit(loop_buy,sell_amount(index(1)));

end

buy_amount=[buy_amount,loop_buy];%循环嵌套

ave_profit=[ave_profit,sum_profit/SIMUDAY];%循环嵌套

end

buy_amount(1)=[];%第一个元素置空

ave_profit(1)=[];

[val,id]=max(ave_profit)

%显示最大平均收入val

buy=buy_amount(id)

%显示在平均收入最大情况下的每天的购置量buy

xlabel='每天的购置量';

ylabel='平均利润';

plot(buy_amount,ave_profit,'*:');%函数GetProfit.m代码:functionre=GetProfit(a,b)

ifa<b%供不应求:报童购置量小于销售量

re=a*(0.05-0.03);

else%供过于求:报童购置量大于销售量

re=b*(0.05-0.03)+(a-b)*(0.02-0.03);

end运行结果:val=4.2801id=21buy=220

该结果说明当报童每天买进报纸数量为220,报童的平均总收入为最大,且最大为4.2801。三、结果分析使用计算机模拟法解决卖报童问题,在计算精度以及收敛速度问题上均能到达一个较好的效果,能有效地解决此问题。计

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论