蒙泰卡罗应用实例之买书问题(matlab)
问题重述:
现在小明要在网上买5本书,下面是A书店到F书店5本书的单价和运费:
现在问怎样买书划算?
蒙泰卡罗模拟代码如下(matlab编程):
clc;
clear;
tic
n=100000;%模拟次数
price=[18 39 29 48 59;24 45 23 54 44;22 45 23 53 53;28 47 17 57 47;24 42 24 47 59;27 48 20 55 53;];%书单价
transfee=[10 15 15 10 10 15]';%运费
expense=1000;%总费用初始值
%开始循环n次
for i=1:n
BP=zeros(6,5);%BP用来存放此处的书的购买状态,买的话为1,不买的话是0
bp1=zeros(6,1);%存放是否付这家店铺的运费,付的话是1,不付的话是零
a=randi([1,6],1,5);%生成5个随机数第i个数表示的是第书i在a(i)家购买
%对BP进行赋值
for j=1:5
BP(a(j),j)=1;
end
%对bp1进行赋值
for j=1:6
if (sum(BP(j,:))==0)
bp1(j)=0;
else
bp1(j)=1;
end
end
bp1=bp1';
ex=sum(sum(BP.*price))+bp1*transfee; %计算这次模拟的价格
%如果这次模拟的价格小于现在支出的总费用的时候舒心总费用
if ex<=expense
expense=ex;
end
end
expense%输出结果即支出总费用
toc
运行结果如下:
最小费用是:189
运行时间:1.361769s
如果说你想知道189最优解的购买情况的话可以在代码里面加:
if ex=189
disp(BP,bp1);
end