数学建模实例——matlab蒙特卡洛算法优化非线性规划问题

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

在这里插入图片描述

求解此题需要三个函数文件

目标函数文件

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

https://www.ilovematlab.cn/thread-492291-1-1.html


版权声明:本文为weixin_43848614原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。