數學規劃模型的matlab求解

今天胡老師給我們講了數學規劃模型,數學規劃模型是優化模型的一種,包括線性規劃模型(目標函數和約束條件都是線性函數的優化問題); 非線性規劃模型(目標函數或者約束條件是非線性的函數); 整數規劃(決策變量是整數值得規劃問題); 多目標規劃(具有多個目標函數的規劃問題) ;目標規劃(具有不同優先級的目標和偏差的規劃問題) 動態規劃(求解多階段決策問題的最優化方法) 。數學規劃模型相對比較好理解,關鍵是要能熟練地求出模型的解。
以下是解線性規劃模型的方法:

1.線性規劃問題

線性規劃問題的標準形式爲:

min   f ' *x  

sub.to:A*x<b

        其中f、x、b、beq、lb、ub爲向量,A、Aeq爲矩陣。

MATLAB中,線性規劃問題(Linear Programming)的求解使用的是函數linprog。

函數 linprog

格式 x = linprog(f,A,b)    %求min f ' *x    sub.to A*x<=b   線性規劃的最優解。

x = linprog(f,A,b,Aeq,beq)    %等式約束 ,若沒有不等式約束 ,則A=[ ],b=[ ]。

x = linprog(f,A,b,Aeq,beq,lb,ub)    %指定x的範圍 ,若沒有等式約束 ,則Aeq=[ ],beq=[ ]

x = linprog(f,A,b,Aeq,beq,lb,ub,x0)    %設置初值x0

x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options)     % options爲指定的優化參數

[x,fval] = linprog(…)    % 返回目標函數最優值,即fval= f ' *x。

[x,lambda,exitflag] = linprog(…)    % lambda爲解x的Lagrange乘子。

[x, lambda,fval,exitflag] = linprog(…)    % exitflag爲終止迭代的錯誤條件。

[x,fval, lambda,exitflag,output] = linprog(…)    % output爲關於優化的一些信息

說明 若exitflag>0表示函數收斂於解x,exitflag=0表示超過函數估值或迭代的最大數字,exitflag<0表示函數不收斂於解x;若lambda=lower 表示下界lb,lambda=upper表示上界ub,lambda=ineqlin表示不等式約束,lambda=eqlin表示等式約束,lambda中的非0元素表示對應的約束是有效約束;output=iterations表示迭代次數,output=algorithm表示使用的運算規則,output=cgiterations表示PCG迭代次數。

2.非線性規劃問題

利用函數fminbnd求有約束的一元函數的最小值

格式    x = fminbnd(fun,x1,x2)  

x = fminbnd(fun,x1,x2,options)    % options爲指定優化參數選項

[x,fval] = fminbnd(…)    % fval爲目標函數的最小值

[x,fval,exitflag] = fminbnd(…)    %xitflag爲終止迭代的條件

[x,fval,exitflag,output] = fminbnd(…)    % output爲優化信息

 

命令   利用函數fminsearch求無約束多元函數最小值

函數   fminsearch

格式   x = fminsearch(fun,x0)    %x0爲初始點,fun爲目標函數的表達式字符串或MATLAB自定義函數的函數柄。

x = fminsearch(fun,x0,options)    % options查optimset

[x,fval] = fminsearch(…)    %最優點的函數值

[x,fval,exitflag] = fminsearch(…)    % exitflag與單變量情形一致

[x,fval,exitflag,output] = fminsearch(…)   %output與單變量情形一致

注意:fminsearch採用了Nelder-Mead型簡單搜尋法。

命令   利用函數fminunc求多變量無約束函數最小值

函數   fminunc

格式   x = fminunc(fun,x0)    %返回給定初始點x0的最小函數值點

x = fminunc(fun,x0,options)    % options爲指定優化參數

[x,fval] = fminunc(…)    %fval最優點x處的函數值

[x,fval,exitflag] = fminunc(…)    % exitflag爲終止迭代的條件,與上同。

[x,fval,exitflag,output] = fminunc(…)    %output爲輸出優化信息

[x,fval,exitflag,output,grad] = fminunc(…)    % grad爲函數在解x處的梯度值

[x,fval,exitflag,output,grad,hessian] = fminunc(…)    %目標函數在解x處的海賽(Hessian)值

注意:當函數的階數大於2時,使用fminunc比fminsearch更有效,但當所選函數高度不連續時,使用fminsearch效果較好。

利用fmincon求線性有約束的多元函數的最小值

函數   fmincon

格式   x = fmincon(fun,x0,A,b)

x = fmincon(fun,x0,A,b,Aeq,beq)

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

[x,fval] = fmincon(…)

[x,fval,exitflag] = fmincon(…)

[x,fval,exitflag,output] = fmincon(…)

[x,fval,exitflag,output,lambda] = fmincon(…)

[x,fval,exitflag,output,lambda,grad] = fmincon(…)

[x,fval,exitflag,output,lambda,grad,hessian] = fmincon(…)

函數   fminbnd

格式   x = fminbnd(fun,x1,x2)    %返回自變量x在區間 上函數fun取最小值時x值,fun爲目標函數的表達式字符串或MATLAB自定義函數的函數柄。

x = fminbnd(fun,x1,x2,options)    % options爲指定優化參數選項

[x,fval] = fminbnd(…)    % fval爲目標函數的最小值

[x,fval,exitflag] = fminbnd(…)    %xitflag爲終止迭代的條件

[x,fval,exitflag,output] = fminbnd(…)    % output爲優化信息

說明   若參數exitflag>0,表示函數收斂於x,若exitflag=0,表示超過函數估計值或迭代的最大數字,exitflag<0表示函數不收斂於x;若參數output=iterations表示迭代次數,output=funccount表示函數賦值次數,output=algorithm表示所使用的算法。

3.二次規劃問題

函數   quadprog

格式   x = quadprog(H,f,A,b)    %其中H,f,A,b爲標準形中的參數,x爲目標函數的最小值。

x = quadprog(H,f,A,b,Aeq,beq)    %Aeq,beq滿足等約束條件 。

x = quadprog(H,f,A,b,Aeq,beq,lb,ub)    % lb,ub分別爲解x的下界與上界。

x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0)    %x0爲設置的初值

x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options)    % options爲指定的優化參數

[x,fval] = quadprog(…)    %fval爲目標函數最優值

[x,fval,exitflag] = quadprog(…)    % exitflag與線性規劃中參數意義相同

[x,fval,exitflag,output] = quadprog(…)    % output與線性規劃中參數意義相同

[x,fval,exitflag,output,lambda] = quadprog(…)    % lambda與線性規劃中參數意義相同

4.     極小化極大(Minmax)問題

函數   fminimax

格式   x = fminimax(fun,x0)

          x = fminimax(fun,x0,A,b)

x = fminimax(fun,x0,A,b,Aeq,beq)

x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub)

x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)

x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

[x,fval,maxfval] = fminimax(…)

[x,fval,maxfval,exitflag] = fminimax(…)

[x,fval,maxfval,exitflag,output] = fminimax(…)

[x,fval,maxfval,exitflag,output,lambda] = fminimax(…)

 

5.多目標規劃問題

函數   fgoalattain

格式   x = fgoalattain(fun,x0,goal,weight)

x = fgoalattain(fun,x0,goal,weight,A,b)

x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq)

x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub)

x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon)

x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon,options)

[x,fval] = fgoalattain(…)

[x,fval,attainfactor] = fgoalattain(…)

[x,fval,attainfactor,exitflag] = fgoalattain(…)

[x,fval,attainfactor,exitflag,output] = fgoalattain(…)

[x,fval,attainfactor,exitflag,output,lambda] = fgoalattain(…)

6.最小二乘最優問題

有約束線性最小二乘

函數   lsqlin   

格式   x = lsqlin(C,d,A,b)    %求在約束條件 下,方程Cx = d的最小二乘解x。

x = lsqlin(C,d,A,b,Aeq,beq)    %Aeq、beq滿足等式約束 ,若沒有不等式約束,則設A=[ ],b=[ ]。

x = lsqlin(C,d,A,b,Aeq,beq,lb,ub)    %lb、ub滿足 ,若沒有等式約束,則Aeq=[ ],beq=[ ]。

x = lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0)    % x0爲初始解向量,若x沒有界,則lb=[ ],ub=[ ]。

x = lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0,options)    % options爲指定優化參數

[x,resnorm] = lsqlin(…)    % resnorm=norm(C*x-d)^2,即2-範數。

[x,resnorm,residual] = lsqlin(…)    %residual=C*x-d,即殘差。

[x,resnorm,residual,exitflag] = lsqlin(…)    %exitflag爲終止迭代的條件

[x,resnorm,residual,exitflag,output] = lsqlin(…)    % output表示輸出優化信息

[x,resnorm,residual,exitflag,output,lambda] = lsqlin(…)    % lambda爲解x的Lagrange乘子

非線性數據(曲線)擬合

函數   lsqcurvefit

格式   x = lsqcurvefit(fun,x0,xdata,ydata)

x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub)

x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options)

[x,resnorm] = lsqcurvefit(…)

[x,resnorm,residual] = lsqcurvefit(…)

[x,resnorm,residual,exitflag] = lsqcurvefit(…)

[x,resnorm,residual,exitflag,output] = lsqcurvefit(…)

[x,resnorm,residual,exitflag,output,lambda] = lsqcurvefit(…)

 

非線性最小二乘

函數   lsqnonlin

格式   x = lsqnonlin(fun,x0)    %x0爲初始解向量;fun爲 ,i=1,2,…,m,fun返回向量值F,而不是平方和值,平方和隱含在算法中,fun的定義與前面相同。

x = lsqnonlin(fun,x0,lb,ub)     %lb、ub定義x的下界和上界: 。

x = lsqnonlin(fun,x0,lb,ub,options)    %options爲指定優化參數,若x沒有界,則lb=[ ],ub=[ ]。

[x,resnorm] = lsqnonlin(…)     % resnorm=sum(fun(x).^2),即解x處目標函數值。

[x,resnorm,residual] = lsqnonlin(…)    % residual=fun(x),即解x處fun的值。

[x,resnorm,residual,exitflag] = lsqnonlin(…)     %exitflag爲終止迭代條件。

[x,resnorm,residual,exitflag,output] = lsqnonlin(…)    %output輸出優化信息。

[x,resnorm,residual,exitflag,output,lambda] = lsqnonlin(…)    %lambda爲Lagrage乘子。

[x,resnorm,residual,exitflag,output,lambda,jacobian] =lsqnonlin(…)    %fun在解x處的Jacobian矩。

 

非負線性最小二乘

函數   lsqnonneg

格式   x = lsqnonneg(C,d)    %C爲實矩陣,d爲實向量

x = lsqnonneg(C,d,x0)    % x0爲初始值且大於0

x = lsqnonneg(C,d,x0,options)    % options爲指定優化參數

[x,resnorm] = lsqnonneg(…)    % resnorm=norm (C*x-d)^2

[x,resnorm,residual] = lsqnonneg(…)    %residual=C*x-d

[x,resnorm,residual,exitflag] = lsqnonneg(…)

[x,resnorm,residual,exitflag,output] = lsqnonneg(…)

[x,resnorm,residual,exitflag,output,lambda] = lsqnonneg(…)

6.非線性方程(組)求解

非線性方程的解

函數   fzero

格式   x = fzero (fun,x0)    %用fun定義表達式f(x),x0爲初始解。

x = fzero (fun,x0,options)

[x,fval] = fzero(…)      %fval=f(x)

[x,fval,exitflag] = fzero(…)

[x,fval,exitflag,output] = fzero(…)

非線性方程組的解
函數   fsolve

格式   x = fsolve(fun,x0)    %用fun定義向量函數,其定義方式爲:先定義方程函數function F = myfun (x)。

F =[表達式1;表達式2;…表達式m]    %保存爲myfun.m,並用下面方式調用:x = fsolve(@myfun,x0),x0爲初始估計值。

x = fsolve(fun,x0,options)

[x,fval] = fsolve(…)      %fval=F(x),即函數值向量

[x,fval,exitflag] = fsolve(…)

[x,fval,exitflag,output] = fsolve(…)

[x,fval,exitflag,output,jacobian] = fsolve(…)    % jacobian爲解x處的Jacobian陣。

其餘參數與前面參數相似。

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章