蒙特卡洛法:
某些问题而言,利用穷举法,会导致计算量过大。蒙特卡洛就是随机生成很多解,然后不断寻找更好的解。到了一定次数,结果就会很接近。
具体问题:
目标函数写成Max
条件:条件<=0(代码里面假设有四个)
代码:
首先根据目标和条件给定函数mengte()
function [f,g]=mengte(x);
f=目标函数
g=[条件1
条件2
条件3
条件4
]
然后,再写出关于蒙特卡洛的具体程序M
p0=0;
for i=1:10^6
x=99*rand(5,1) %5行1列的随机数,由于x的范围在1~99,所以乘99
x1=floor(x0);x2=ceil(x0); %floor向下求整,ceil向上求整,符合整数要求
[f,g]=mengte[x1];
if sum(g<=0)==4 %满足规划要求条件
if p0<f
x0=x1;p0=f; %如果有更好地结果,进行替换
end
end
[f,g]=mengte[x2];
if sum(g<=0)==4
if p0<f
x0=x1;p0=f
end
end
end
x0,p0
end
程序参考:《数模大全》司守奎