一个报童从报刊发行中心订报后零售

源代码在线查看: baotong.m

软件大小: 2 K
上传用户: fzjw0803005
关键词: 报童
下载地址: 免注册下载 普通下载 VIP

相关代码

				%计算机仿真作业三--报童问题--(概率统计分析问题)
				%仿真天数为300天
				
				close all
				clear all
				
				%k=round(1000*rand(1,300));
				%随机生成300个在区间[0,1000]均匀分布的整数,表示仿真分析研究的天数为300天 
				%k表示报童每天能卖出的报纸的数量,设上限为1000,
				
				%k=round(1000*normrnd(0.5,0.3,1,300));
				%随机生成300个在区间[200,800]符合均值为500,方差为500的高斯分布的整数,
				
				k=round(1000*exprnd(0.5,300,1));
				%随机生成300个满足均值为500的负指数分布的整数
				
				
				
				a=1;       %每卖一份报纸可赚的钱数
				b=0.5;       %每退一份报纸要赔的钱数
				z=(1:1000);%给定一天的订报量从1到1000
				
				%损失模型
				c=zeros(1,1000);%每个订报量对应的损失
				
				for i=1:1000
				    c1(i)=b*(z(i)*length(find(k				         %c1(i)是30天内,因供过于求所造成的损失
				         %供过于求的天数是length(find(k				         %在这些天内,总共的进货量是z(i)*length(find(k				         %卖出去的货量是sum(k(find(k				         %所以30天内,多进的货的量是z(i)*length(find(k				    c2(i)=a*sum(k(find(k>=z(i))))-a*z(i)*length(find(k>=(z(i))));
				         %c2(i)是30天内,因供不应求所造成的损失
				         %供不应求的天数是length(find(k>=(z(i))))
				         %在这些天内,若进货刚好满足需求,应该赚的钱数是a*sum(k(find(k>=z(i))))
				         %但实际赚的钱数是实际的进货量z(i)*length(find(k>=(z(i))))乘以a
				    c(i)=1/300*(c1(i)+c2(i));
				         %对于一个确定的订报量z(i)(从1到1000的遍历),它的30天内的平均损失
				end
				subplot(2,1,1)
				plot(z,c);%画出订报量与损失钱数的关系图
				title('负指数分布,订报量与损失钱数关系图')
				xlabel('每天的订报量')
				ylabel('损失钱数')
				
				min_avelost_best_buy=z(find(c==min(c)))%使30天平均损失最小的最佳订报量
				min_avelost=min(c)                     %30天内采用最佳订报量时的最小平均损失
				
				%收益模型
				g=zeros(1,1000);%每个订报量对应的收益数
				
				for i=1:1000
				    g1(i)=a*sum(k(find(k				         %g1(i)是30天内,供过于求时所收益的钱数
				         %供过于求的天数是length(find(k				         %这30天内,卖出去的货量是sum(k(find(k				         %卖出去的货收到钱数是a*sum(k(find(k				         %而在这些天内,总共的进货量是z(i)*length(find(k				         %多进的货的量是z(i)*length(find(k				    %每份多进报要赔b元,未卖出去的报总应赔b*z(i)*length(find(k				         %所以这30天内总的收益的钱数=卖出去的报收到的钱数-未卖出的应赔的钱数
				    g2(i)=a*z(i)*length(find(k>=(z(i))));
				         %g2(i)是30天内,供不应求时所收益的钱数
				         %供不应求的天数是length(find(k>=(z(i))))
				         %在这些天内,赚的钱数是进货量z(i)*length(find(k>=(z(i))))乘以a
				    g(i)=1/300*(g1(i)+g2(i));
				         %对于一个确定的订报量z(i)(从1到1000的遍历),它的30天内的平均收益钱数
				end
				
				subplot(2,1,2)
				plot(z,g,'r');%画出订报量与收益钱数的关系图
				title('负指数分布,订报量与收益钱数关系图')
				xlabel('每天的订报量')
				ylabel('收益钱数')
				
				max_aveearn_best_buy=z(find(g==max(g)))%使30天平均收益最大的最佳订报量
				max_aveearn=max(g)                     %30天内采用最佳订报量时的最大平均收益
				
				
							

相关资源