报童问题是数学建模中比较典型的一类题,运用插值拟合等基本模型,运用概率论与数理统计等背景知识,得出其报童收益模型,以获得最大利润为目的建立模型, 学会此类问题的求解很是关键,今天我就以一个例题进行简单的解释.
题目:
报童问题
某报童以每份0.03元的价格买进报纸,以0.05元的价格出售,根据长期统计,报纸每天的销售量以及百分率为
销售量 | 500 | 600 | 700 |
概率p(d) | 0.6 | 0.2 | 0.2 |
已知当天销售不出去的报纸,将以每份0.02元的价格退还给报社,试用模拟方法确定报童每天买进多少份报纸,能使平均总收入最大?
问题分析:
由题意可知:
要使报童获利最大,则要求:max{卖出去的报纸钱+退回报社获得的钱-买进报纸的总钱数}
那么,我们首先应该确定报童订购报纸的数量分布概率,于是我们可以随机产生报童卖报的10000天的报纸订购量.用这10000天的平均收入大致确定其最大利润时的订购量.
也就是说随机生成3*10000的表格,其中每个空格表示在订购量确定,销售量随机的情况下,当天的利润;
订购量 | 1 | 2 | 3 | ...... | 9998 | 9999 | 10000 | 总利润 |
500 | 订购量为500,销售量随机的利润 | 订购量为500,销售量随机的利润 | 订购量为500,销售量随机的利润 | ...... | 订购量为500,销售量随机的利润 | 订购量为500,销售量随机的利润 | 订购量为500,销售量随机的利润 | 订购量为500时,这10000天的利润和 |
600 | 订购量为600,销售量随机的利润 | 订购量为600,销售量随机的利润 | 订购量为600,销售量随机的利润 | ...... | 订购量为600,销售量随机的利润 | 订购量为600,销售量随机的利润 | 订购量为600,销售量随机的利润 | 订购量为600时,这10000天的利润和 |
700 | 订购量为700,销售量随机的利润 | 订购量为700,销售量随机的利润 | 订购量为700,销售量随机的利润 | ...... | 订购量为700,销售量随机的利润 | 订购量为700,销售量随机的利润 | 订购量为700,销售量随机的利润 | 订购量为700时,这10000天的利润和 |
MATLAB编程代码如下:
lr:表示利润; lr0:表示当天随机利润; lr1:表示10000天的总利润之和; dgl:表示订购量; xsl:表示销售量;
注意:
s=sum(A),按列求和.
s=sum(A,dim),按照指定为度求和.
dim=1,表示对列求和;dim=2,表示对行求和;dim=3,表示对页求和;
%生成3*10000的矩阵,行分别表示订购量为500,600,700,列表示随机产生的10000天的利润
lr=zeros(3,10000);
%订购量在500-700之间以步长为100进行循环
for dgl=500:100:700
%天数在1-10000之间以步长为1 进行循环
for j=1:1:10000
%产生随机数,范围为0-1
x=rand;
%所产生的随机数确定了对应的订购量
if x<0.6
xsl=500;
elseif x<0.8
xsl=600;
else
xsl=700;
end
%计算利润
%销售量大于订购量,利润为 (0.05-0.03)*订购量
if xsl>dgl
lr0=dgl*0.02;
%销售量小于等于订购量,利润为 销售量*(0.05-0.03)-(订购量-销售量)*(0.03-0.02)
else
lr0=xsl*0.02-0.01*(dgl-xsl);
end
%将利润的值赋值给3*10000的表格中每个空
lr(dgl/100-4,j)=lr0;
end
end
%要确定具体订购量,则需确定这随机10000天中平均利润(总利润)在哪个订购量最大
lr1=sum(lr,2);
代码结果展示:
图1为产生的10000天的随机利润
图2为这10000天的总利润之和
由图2看出,订购量为600时总利润最大,也就是平均利润最大.即问题得到解决.
以上就是通过MATLAB对报童问题进行求解.希望我的解释能够帮助到你们,