如何利用MATLAB解非线性规划

如题所述

给你一个例子吧。
目标函数:f=x1y1+x2y2+x3y3+x4y4
约束条件:4y1+80y2+35y3+25y4<=600
9y1+2y2+30y3+40y4<=700
y1=-6.49*x1+6748
y2=-1.2*x2+1184
y3=-0.22x3+0.026x4+420
y4=-0.034x4+0.027x3+70
所有变量均〉=0
求:目标函数最大值

我的求解过程如下:
在Matlab下输入:edit,然后将下面两行百分号之间的内容,复制进去,保存
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function f=zhidao_theendoflife(x)
%目标函数构造
x1=x(1);
x2=x(2);
x3=x(3);
x4=x(4);

y1=-6.49*x1+6748;
y2=-1.2*x2+1184;
y3=-0.22*x3+0.026*x4+420;
y4=-0.034*x4+0.027*x3+70;

f=x1*y1+x2*y2+x3*y3+x4*y4;
f=-f;%你要求最大值,这里加负,然后计算最小值
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

在Matlab下输入:edit,然后将下面两行百分号之间的内容,复制进去,保存
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [y,yeq]=zhidao_theendoflife_cond(x)
%约束条件
x1=x(1);
x2=x(2);
x3=x(3);
x4=x(4);

y1=-6.49*x1+6748;
y2=-1.2*x2+1184;
y3=-0.22*x3+0.026*x4+420;
y4=-0.034*x4+0.027*x3+70;

y=[4*y1+80*y2+35*y3+25*y4-600;9*y1+2*y2+30*y3+40*y4-700]; %加约束的话,在这里加
yeq=[];%等式约束
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

返回Matlab输入:
x0=[0;0;0;0]; xm=[0;0;0;0]; xM=inf*[1;1;1;1]; A=[]; B=[]; Aeq=[]; Beq=[];
[x,f_min,flag,c]=fmincon('zhidao_theendoflife',x0,A,B,Aeq,Beq,xm,xM,'zhidao_theendoflife_cond');
f_max=-f_min;
x,f_max

运行得
x =
1.0e+003 *
0.9840
0.9619
2.8354
4.0759
f_max =
1.3974e+005
温馨提示:内容为网友见解,仅供参考
第1个回答  2020-05-03
给你一个例子吧。
目标函数:f=x1y1+x2y2+x3y3+x4y4
约束条件:4y1+80y2+35y3+25y4<=600
9y1+2y2+30y3+40y4<=700
y1=-6.49*x1+6748
y2=-1.2*x2+1184
y3=-0.22x3+0.026x4+420
y4=-0.034x4+0.027x3+70
所有变量均〉=0
求:目标函数最大值
我的求解过程如下:
在Matlab下输入:edit,然后将下面两行百分号之间的内容,复制进去,保存
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function
f=zhidao_theendoflife(x)
%目标函数构造
x1=x(1);
x2=x(2);
x3=x(3);
x4=x(4);
y1=-6.49*x1+6748;
y2=-1.2*x2+1184;
y3=-0.22*x3+0.026*x4+420;
y4=-0.034*x4+0.027*x3+70;
f=x1*y1+x2*y2+x3*y3+x4*y4;
f=-f;%你要求最大值,这里加负,然后计算最小值
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
在Matlab下输入:edit,然后将下面两行百分号之间的内容,复制进去,保存
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function
[y,yeq]=zhidao_theendoflife_cond(x)
%约束条件
x1=x(1);
x2=x(2);
x3=x(3);
x4=x(4);
y1=-6.49*x1+6748;
y2=-1.2*x2+1184;
y3=-0.22*x3+0.026*x4+420;
y4=-0.034*x4+0.027*x3+70;
y=[4*y1+80*y2+35*y3+25*y4-600;9*y1+2*y2+30*y3+40*y4-700];
%加约束的话,在这里加
yeq=[];%等式约束
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
返回Matlab输入:
x0=[0;0;0;0];
xm=[0;0;0;0];
xM=inf*[1;1;1;1];
A=[];
B=[];
Aeq=[];
Beq=[];
[x,f_min,flag,c]=fmincon('zhidao_theendoflife',x0,A,B,Aeq,Beq,xm,xM,'zhidao_theendoflife_cond');
f_max=-f_min;
x,f_max
运行得
x
=
1.0e+003
*
0.9840
0.9619
2.8354
4.0759
f_max
=
1.3974e+005
第2个回答  推荐于2018-04-13
用蒙特卡洛法求解的基本思想
1
在估计的区域内随机取若干试验点。
2
然后从实验点中找出可行点。
3
再从可行点中选择最小点。
END
基本假设
试验点的第j个分量xj服从[aj ,bj]内的均匀分布.
END
求解过程
1
先产生一个随机数作为初始试验点,以后则将上一个试验点的第j个分量随机产生,其它分量不变而产生一新的试验点.这样,每产生一个新试验点只需一个新的随机数分量.当K>MAXK或P>MAXP时停止迭代.
2
符号说明:
P: 试验点总数;  MAXP:最大试验点总数;
K: 可行点总数;  MAXK:最大可行点数;
X*:迭代产生的最优点;  Q:迭代产生的最小值f(X*),其初始值为计算机所能表示的最大数.

利用matlab 求解非线性规划问题
利用matlab 求解非线性规划问题,其运行代码编写,可以这样来考虑:1、创建目标函数,myobj(x)f=-(2*x1+3*x1^2+3*x2+x2^2+x3)2、创建约束条件函数,mycon(x)根据给出的条件,来写不等式条件和等式条件 3、使用fmincon()函数,求解x1,x2,x3。即 [x,fval,exitflag]=fmincon(@myobj,x...

matlab 求解非线性规划 代码
matlab 求解非线性规划可以用fmincon函数来求解。求解过程如下:第一步、自定义目标函数,fmin(x)fmin=@(x) 0.007395768*x(1)^2 + 0.002729374*x(2)^2 + 0.006876885*x(1)*x(2)第二步、确定初始条件,即x0=[0,0]第三步、确定等式条件,即Aeq=[1,1],beq=[1]第四步、确定x的上下...

用matlab求非线性规划问题的最优解
题主给出的非线性规划问题,其最优解可以用matlab的fmincon函数求解,求解方法如下:1、根据条件,确定x、y、z的上下限 lb=[0,0,5];ub=[15,5,8];2、自定义目标函数,fmincon_fun(k),即 x=k(1);y=k(2);z=k(3);m=21.6*sqrt(5^2+(8-z)^2 )+7.2*(sqrt(x^2+(5-x)^2...

三用matlab或lingo求解以下非线性规划问题:(1maxf(x)=x2 +x22 +x...
对于非线性规划问题,一般需要使用专门的优化软件或库来求解。该函数可以处理具有约束的非线性最小化问题。以下是MATLAB代码:matlab% 定义目标函数 f = @(x) x.^2 + x.^4 + x;定义约束条件 x0 = 0; % 初始值 A = []; % 不存在等式约束 b = []; % 不存在等式约束 lsqminconf(@(x...

如何在MATLAB中用蒙特卡洛法解非线性规划问题
MATLAB编程步骤:1 确定求解的非线性规划问题 2 依次编写三个m文件,首先编写目标函数的m文件 3 然后编写约束条件的m文件 4 再依据蒙特卡洛法求解的基本思想编写主程序的m文件。先初始化,利用unifrnd函数产生服从均匀分布的随机数,作为试验点。5 然后调用目标函数和约束条件的m文件,找出最优解 6 最后...

matlab非线性规划fmincon函数中目标函数参数传递问题,怎么解?
2、无可行点 在TolCon约束精度内,求解器不能找到一个满足所有约束条件的点,此时,可以尝试以下方法:(1)检查线性约束 通过求解一个线性规划问题来找到一个满足界约束和线性约束的点。i)定义一个目标函数是常值0的线性规划问题、f = zeros(size(x0)); % assumes x0 is the initial point i...

matlab怎么实现整数线性规划或者非线性规划?
做线性规划的老大是LINGO,用起来很方便,比较傻瓜的一种。MATLAB做矩阵问题比较厉害。MATLAB做线性和非线性规划都有工具箱,做整数线性规划要额外到网上下载ipslv_mex的工具箱。我感觉是不太好用。在MATLAB中输入help linprog就会看到用法。参考资料:MA ...

求助一个用Matlab求解非线性规划的问题,不胜感激!
1. 把[x,fval]=fmincon('fun',x0,A,b,Aeq,beq,VLB,VUB,'mycon')改为 [x,fval]=fmincon('fun',x0,A,b,Aeq,beq,VLB,VUB)我不是太清楚你为什么要加mycon没用吧。2. 目标函数加负号(因为fmincon是求最小值)function f=fun(x)f=-(3.4854*x(1)+6.2879*x(3)+5.6932*x(4))...

用matlab怎么求解
用非线性规划函数 fmincon 求解。由于该函数默认求的是目标函数的最小值,所以我们编程时的目标函数应该为原目标函数取负。程序如下:结果如下:ymin=-800,5a*(1+0.1b)*(1+0.2c) 的最大值应该是 800.

怎么写出下面问题的matlab模型
该问题实际上就是求非线性规划问题。可以用matlab的fmincon()非线性规划函数来求解。求解思路:1、建立目标函数 fmincon_fun( ),即 min z=5000*sum(xi)+6500*sum(yi)+200*sum(zi);2、建立约束函数 fmincon_con( ),即 ceq1 = x1+y1-z2-3000 ceq2 = x2+y2+z2-z3-4500 ceq3 = ...

相似回答