⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 baotong.m

📁 一个报童从报刊发行中心订报后零售
💻 M
字号:
%计算机仿真作业三--报童问题--(概率统计分析问题)
%仿真天数为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<(z(i))))-sum(k(find(k<z(i)))));
         %c1(i)是30天内,因供过于求所造成的损失
         %供过于求的天数是length(find(k<(z(i))))
         %在这些天内,总共的进货量是z(i)*length(find(k<(z(i))))
         %卖出去的货量是sum(k(find(k<z(i))))
         %所以30天内,多进的货的量是z(i)*length(find(k<(z(i))))-sum(k(find(k<z(i))))
    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<z(i))))-b*(z(i)*length(find(k<(z(i))))-sum(k(find(k<z(i)))));
         %g1(i)是30天内,供过于求时所收益的钱数
         %供过于求的天数是length(find(k<(z(i))))
         %这30天内,卖出去的货量是sum(k(find(k<z(i))))
         %卖出去的货收到钱数是a*sum(k(find(k<z(i))))
         %而在这些天内,总共的进货量是z(i)*length(find(k<(z(i))))
         %多进的货的量是z(i)*length(find(k<(z(i))))-sum(k(find(k<z(i))))
    %每份多进报要赔b元,未卖出去的报总应赔b*z(i)*length(find(k<(z(i))))-sum(k(find(k<z(i))))
         %所以这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天内采用最佳订报量时的最大平均收益


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -