用MATLAB求解以下优化问题
设计变量:X={x1,x2,x3,x4}T约束条件:g1(X)=-x(1)*x(1)-x(2)*x(2)-x(3)*x(3)-x(4)*x(4)-x(1)+x(2)-x(...
设计变量:X = {x1, x2 , x3 , x4}T
约束条件:g1( X )=-x(1)* x(1)-x(2)* x(2)- x(3)* x(3)- x(4)* x(4)- x(1)+ x(2)- x(3)+x(4)+9≥0
g2( X )=-x(1)*x(1)-2*x(2)*x(2)-x(3)*x(3)-2*x(4)*x(4)+x(1)+x(4)+8≥0
g3( X )= -2*x(1)*x(1)-x(2)*x(2)-x(3)*x(3)-2*x(1)+x(2)+x(4)+5≥0
目标函数:f( X) =x(1)*x(1)+x(2)*x(2)+2*x(3)*x(3)+x(4)*x(4)-5*x(1)-5*x(2)-21*x(3)+7*x(4)+1→min 展开
约束条件:g1( X )=-x(1)* x(1)-x(2)* x(2)- x(3)* x(3)- x(4)* x(4)- x(1)+ x(2)- x(3)+x(4)+9≥0
g2( X )=-x(1)*x(1)-2*x(2)*x(2)-x(3)*x(3)-2*x(4)*x(4)+x(1)+x(4)+8≥0
g3( X )= -2*x(1)*x(1)-x(2)*x(2)-x(3)*x(3)-2*x(1)+x(2)+x(4)+5≥0
目标函数:f( X) =x(1)*x(1)+x(2)*x(2)+2*x(3)*x(3)+x(4)*x(4)-5*x(1)-5*x(2)-21*x(3)+7*x(4)+1→min 展开
3个回答
展开全部
clear
clc
%求解优化函数
f=@(x) x(1).*x(1)+x(2).*x(2)+2.*x(3).*x(3)+x(4).*x(4)-5.*x(1)-5.*x(2)-21.*x(3)+7.*x(4)+1;
x0=[1,1,1,1]; %初始解向量
options=optimset('maxfunevals',10000,'algorithm','active-set');
m=fmincon(f,[1,2,2,2],[],[],[],[],[],[],@mycon1,options) %最优解的位置
f(m) %最优解
mycon1(m) %约束
function [c,ceq]=mycon1(x)
%本函数用来保存非线性约束条件
ceq=[];
c(1)=-(-x(1).* x(1)-x(2).* x(2)- x(3).* x(3)- x(4).* x(4)- x(1)+ x(2)- x(3)+x(4)+9);
c(2)=-(-x(1).*x(1)-2.*x(2).*x(2)-x(3).*x(3)-2*x(4).*x(4)+x(1)+x(4)+8);
c(3)=-(-2.*x(1).*x(1)-x(2).*x(2)-x(3).*x(3)-2.*x(1)+x(2)+x(4)+5);
end
我是调用matlab的内部函数求解的。这样很简单很方便。matlab里有很多自带的求解优化的函数,还有优化工具箱,可以自动生成你需要的优化代码。很方便,功能也很强大。希望能 解决你的问题呦~~O(∩_∩)O~
clc
%求解优化函数
f=@(x) x(1).*x(1)+x(2).*x(2)+2.*x(3).*x(3)+x(4).*x(4)-5.*x(1)-5.*x(2)-21.*x(3)+7.*x(4)+1;
x0=[1,1,1,1]; %初始解向量
options=optimset('maxfunevals',10000,'algorithm','active-set');
m=fmincon(f,[1,2,2,2],[],[],[],[],[],[],@mycon1,options) %最优解的位置
f(m) %最优解
mycon1(m) %约束
function [c,ceq]=mycon1(x)
%本函数用来保存非线性约束条件
ceq=[];
c(1)=-(-x(1).* x(1)-x(2).* x(2)- x(3).* x(3)- x(4).* x(4)- x(1)+ x(2)- x(3)+x(4)+9);
c(2)=-(-x(1).*x(1)-2.*x(2).*x(2)-x(3).*x(3)-2*x(4).*x(4)+x(1)+x(4)+8);
c(3)=-(-2.*x(1).*x(1)-x(2).*x(2)-x(3).*x(3)-2.*x(1)+x(2)+x(4)+5);
end
我是调用matlab的内部函数求解的。这样很简单很方便。matlab里有很多自带的求解优化的函数,还有优化工具箱,可以自动生成你需要的优化代码。很方便,功能也很强大。希望能 解决你的问题呦~~O(∩_∩)O~
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你没有说用什么优化算法,我用的模拟退火,而且x1,x2,x3,x4都没有交代多大范围,所以我随便取值在n以内;(这个n你可以随便调节)程序如下:
%% 模拟退火算法进行优化 (起始温度:100; 终止温度:1;退火速率0.9)
clear all;clc;
double startT;
double endT;
double rate;
double bestx1;
double bestx2;
double bestx3;
double bestx4;
double f;
f=0;
startT=100;
endT=1;
rate=0.9;
double n;
n=2.3;
while startT>=endT%开始模拟退火
x1=rand(1,1)*n;%产生n以内随机数
x2=rand(1,1)*n;
x3=rand(1,1)*n;
x4=rand(1,1)*n;
g1=-x1^2-x2^2-x3^2-x4^2-x1+x2-x3+x4+9;%三个约束条件
g2=-x1^2-2*x2^2-x3^2-2*x4^2+x1+x4+8;
g3=-2*x1^2-x2^2-x3^2-2*x1+x2+x4+5;
if g1>=0 & g2>=0 & g3>=0%满足三个约束条件,降温
startT=rate*startT;
tempf=x1^2+x2^2+2*x3^2+x4^2-5*x1-21*x3+7*x4+1;
if tempf<f%找f最小值
f=tempf;
bestx1=x1;
bestx2=x2;
bestx3=x3;
bwstx4=x4;
end
end
end
%% 模拟退火算法进行优化 (起始温度:100; 终止温度:1;退火速率0.9)
clear all;clc;
double startT;
double endT;
double rate;
double bestx1;
double bestx2;
double bestx3;
double bestx4;
double f;
f=0;
startT=100;
endT=1;
rate=0.9;
double n;
n=2.3;
while startT>=endT%开始模拟退火
x1=rand(1,1)*n;%产生n以内随机数
x2=rand(1,1)*n;
x3=rand(1,1)*n;
x4=rand(1,1)*n;
g1=-x1^2-x2^2-x3^2-x4^2-x1+x2-x3+x4+9;%三个约束条件
g2=-x1^2-2*x2^2-x3^2-2*x4^2+x1+x4+8;
g3=-2*x1^2-x2^2-x3^2-2*x1+x2+x4+5;
if g1>=0 & g2>=0 & g3>=0%满足三个约束条件,降温
startT=rate*startT;
tempf=x1^2+x2^2+2*x3^2+x4^2-5*x1-21*x3+7*x4+1;
if tempf<f%找f最小值
f=tempf;
bestx1=x1;
bestx2=x2;
bestx3=x3;
bwstx4=x4;
end
end
end
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
怎么这么专业的问题啊,这个能有专业人士来回答吗
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询