Matlab求解非線性規(guī)劃問(wèn)題
1.非線性規(guī)劃
與線性規(guī)劃問(wèn)題類似,但目標(biāo)函數(shù)和約束條件中包含非線性的等式或不等式。
2.matlab函數(shù)
fmincon是matlab中一個(gè)優(yōu)化函數(shù),常用于求解非線性約束問(wèn)題。函數(shù)定義如下:
X=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

其中,各參數(shù)含義如下:
fun:目標(biāo)函數(shù),求最小化
x0:初值(可任意選擇)
A,b,Aeq,beq定義了線性約束
A:不等式系數(shù)矩陣
b:不等式右端值
Aeq:等式系數(shù)矩陣
beq:等式右端值
lb:變量下界
ub:變量上界
c.ceq定義非線性約束
?nonlcon:定義非線性約束
options:優(yōu)化選項(xiàng),包括迭代次數(shù)、容差等。

3.例子

①首先觀察這個(gè)式子,由于是求最小化問(wèn)題,需要先對(duì)約束條件進(jìn)行處理,轉(zhuǎn)化為標(biāo)準(zhǔn)形式。即不等號(hào)都需要變成<=形式,且x必須都大于0.
②定義目標(biāo)函數(shù)
function f=objfun(x)
f=x(1)^2+x(2)^2+x(3)^2+8;
end?
③定義非線性約束
function[g,h]=nonlcon(x)
%g表示不等式約束
g(1)=-x(1)^2+x(2)-x(3)^2
g(2)=x(1)+x(2)^2+x(3)^2-20
%h代表等式約束
h(1)=-x(1)-x(2)^2+2
h(2)=x(2)+2*x(3)^2-3
end
④編寫(xiě)主函數(shù),設(shè)置初始點(diǎn)、上下界、等式/不等式約束和優(yōu)化選項(xiàng)
x0=rand(3,1)? %生成3×1的隨機(jī)矩陣,初始值
%本例中不存在線性約束,關(guān)于線性約束的等式和不等式對(duì)應(yīng)的系數(shù)矩陣和右端值都為空。
A=[];
b=[];
Aeq=[];
beq=[];
lb=zeros(3,1); ??%3×1的0矩陣 自變量下限為零
ub=[]; %上限無(wú)要求
options=optimset;
⑤求解
[x,y]=fmincon(‘objfun’,x0,A,b,Aeq,beq,lb,ub,’nonlcon’,options);
%x為最優(yōu)解,y為最優(yōu)值

4.matlab之優(yōu)化算法globalsearch
流程如下:
函數(shù)描述
建立結(jié)構(gòu)體problem= createOptimProblem('fmincon','objective',...);
配置GlobalSearch求解器 gs=GlobalSearch
運(yùn)行求解器run(GS,problem)
舉例:
problem = createOptimProblem('fmincon','objective',objfun,'x0',x0,'lb',lb,'ub',ub, ’nonlcon’, nonlcon,'options',optimset('Algorithm','SQP','Disp','none'));
gs = GlobalSearch;
[p,G] = run(gs,problem);