蒙特卡洛算法优化非线性规划问题实例

求解此题需要三个函数文件
目标函数文件
function z=goal(x)
z=3*(x(1)-2)^2+4*(x(2)-1)^2+x(1)*x(2)+2*(0.5*x(3)-3)^2;
约束条件函数文件
function lpc=lpconst(x)
if 2*x(1)+2*x(2)+6*x(3)<=16 && 3*x(1)+5*x(2)+2*x(3)<=20
lpc=1;
else
lpc=0;
end
蒙特卡罗模拟求解函数文件
%随机模拟解非线性规划
function [Zmin,sol,r1,r2,r3]=randlp(a1,b1,a2,b2,a3,b3,n)
% 符合题目的调用参数 randlp(0,12,0,12,0,20,1000)
% a1,b1是试验点x1的上下界; a2,b2是试验点x2的上下界; a3,b3是试验点x3的上下界;
% n=1000; %试验点个数
r1=unifrnd(a1,b1,n,1); %nx1阶的[a,b]均匀分布随机数矩阵
r2=unifrnd(a2,b2,n,1);
r3=unifrnd(a3,b3,n,1);
sol=[r1(1) r2(1) r3(1)];
Zmin=inf;
for i=1:n
x1=r1(i);
x2=r2(i);
x3=floor(r3(i)); %x3取整
lpc=lpconst([x1 x2 x3]);
if lpc==1
z=goal([x1 x2 x3]);
if z<Zmin
Zmin=z;
sol=[x1 x2 x3];
end
end
end
运行结果:
(1)模拟一千次
(2)模拟一万次

(3)模拟十万次

(4)模拟一百万次

(5)模拟一千万次

由上述五种情况的模拟可知,蒙特卡罗算法局限性大,精度不是很高。推荐数学建模求解时使用login求解。
参考博客:
https://blog.csdn.net/weixin_33890499/article/details/94616181
版权声明:本文为weixin_43848614原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。