數(shù)學(xué)規(guī)劃模型的matlab求解
以下是解線性規(guī)劃模型的方法: 1.線性規(guī)劃問題 線性規(guī)劃問題的標(biāo)準(zhǔn)形式為: min f ' *x sub.to:A*x<b 其中f、x、b、beq、lb、ub為向量,A、Aeq為矩陣。 MATLAB中,線性規(guī)劃問題(Linear Programming)的求解使用的是函數(shù)linprog。 函數(shù) linprog 格式 x = linprog(f,A,b) %求min f ' *x sub.to A*x<=b 線性規(guī)劃的最優(yōu)解。 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) %設(shè)置初值x0 x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options) % options為指定的優(yōu)化參數(shù) [x,fval] = linprog(…) % 返回目標(biāo)函數(shù)最優(yōu)值,即fval= f ' *x。 [x,lambda,exitflag] = linprog(…) % lambda為解x的Lagrange乘子。 [x, lambda,fval,exitflag] = linprog(…) % exitflag為終止迭代的錯誤條件。 [x,fval, lambda,exitflag,output] = linprog(…) % output為關(guān)于優(yōu)化的一些信息 說明 若exitflag>0表示函數(shù)收斂于解x,exitflag=0表示超過函數(shù)估值或迭代的最大數(shù)字,exitflag<0表示函數(shù)不收斂于 解x;若lambda=lower 表示下界lb,lambda=upper表示上界ub,lambda=ineqlin表示不等式約束,lambda=eqlin表示等式約 束,lambda中的非0元素表示對應(yīng)的約束是有效約束;output=iterations表示迭代次數(shù),output=algorithm表示使用的 運(yùn)算規(guī)則,output=cgiterations表示PCG迭代次數(shù)。 2.非線性規(guī)劃問題 利用函數(shù)fminbnd求有約束的一元函數(shù)的最小值 格式 x = fminbnd(fun,x1,x2) x = fminbnd(fun,x1,x2,options) % options為指定優(yōu)化參數(shù)選項 [x,fval] = fminbnd(…) % fval為目標(biāo)函數(shù)的最小值 [x,fval,exitflag] = fminbnd(…) %xitflag為終止迭代的條件 [x,fval,exitflag,output] = fminbnd(…) % output為優(yōu)化信息 命令 利用函數(shù)fminsearch求無約束多元函數(shù)最小值 函數(shù) fminsearch 格式 x = fminsearch(fun,x0) %x0為初始點(diǎn),fun為目標(biāo)函數(shù)的表達(dá)式字符串或MATLAB自定義函數(shù)的函數(shù)柄。 x = fminsearch(fun,x0,options) % options查optimset [x,fval] = fminsearch(…) %最優(yōu)點(diǎn)的函數(shù)值 [x,fval,exitflag] = fminsearch(…) % exitflag與單變量情形一致 [x,fval,exitflag,output] = fminsearch(…) %output與單變量情形一致 注意:fminsearch采用了Nelder-Mead型簡單搜尋法。 命令 利用函數(shù)fminunc求多變量無約束函數(shù)最小值 函數(shù) fminunc 格式 x = fminunc(fun,x0) %返回給定初始點(diǎn)x0的最小函數(shù)值點(diǎn) x = fminunc(fun,x0,options) % options為指定優(yōu)化參數(shù) [x,fval] = fminunc(…) %fval最優(yōu)點(diǎn)x處的函數(shù)值 [x,fval,exitflag] = fminunc(…) % exitflag為終止迭代的條件,與上同。 [x,fval,exitflag,output] = fminunc(…) %output為輸出優(yōu)化信息 [x,fval,exitflag,output,grad] = fminunc(…) % grad為函數(shù)在解x處的梯度值 [x,fval,exitflag,output,grad,hessian] = fminunc(…) %目標(biāo)函數(shù)在解x處的海賽(Hessian)值 注意:當(dāng)函數(shù)的階數(shù)大于2時,使用fminunc比fminsearch更有效,但當(dāng)所選函數(shù)高度不連續(xù)時,使用fminsearch效果較好。 利用fmincon求線性有約束的多元函數(shù)的最小值 函數(shù) 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(…) 函數(shù) fminbnd 格式 x = fminbnd(fun,x1,x2) %返回自變量x在區(qū)間 上函數(shù)fun取最小值時x值,fun為目標(biāo)函數(shù)的表達(dá)式字符串或MATLAB自定義函數(shù)的函數(shù)柄。 x = fminbnd(fun,x1,x2,options) % options為指定優(yōu)化參數(shù)選項 [x,fval] = fminbnd(…) % fval為目標(biāo)函數(shù)的最小值 [x,fval,exitflag] = fminbnd(…) %xitflag為終止迭代的條件 [x,fval,exitflag,output] = fminbnd(…) % output為優(yōu)化信息 說明 若參數(shù)exitflag>0,表示函數(shù)收斂于x,若exitflag=0,表示超過函數(shù)估計值或迭代的最大數(shù)字,exitflag<0表示函 數(shù)不收斂于x;若參數(shù)output=iterations表示迭代次數(shù),output=funccount表示函數(shù)賦值次 數(shù),output=algorithm表示所使用的算法。 3.二次規(guī)劃問題 函數(shù) quadprog 格式 x = quadprog(H,f,A,b) %其中H,f,A,b為標(biāo)準(zhǔn)形中的參數(shù),x為目標(biāo)函數(shù)的最小值。 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為設(shè)置的初值 x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options) % options為指定的優(yōu)化參數(shù) [x,fval] = quadprog(…) %fval為目標(biāo)函數(shù)最優(yōu)值 [x,fval,exitflag] = quadprog(…) % exitflag與線性規(guī)劃中參數(shù)意義相同 [x,fval,exitflag,output] = quadprog(…) % output與線性規(guī)劃中參數(shù)意義相同 [x,fval,exitflag,output,lambda] = quadprog(…) % lambda與線性規(guī)劃中參數(shù)意義相同 4. 極小化極大(Minmax)問題 函數(shù) 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.多目標(biāo)規(guī)劃問題 函數(shù) 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.最小二乘最優(yōu)問題 有約束線性最小二乘 函數(shù) lsqlin 格式 x = lsqlin(C,d,A,b) %求在約束條件 下,方程Cx = d的最小二乘解x。 x = lsqlin(C,d,A,b,Aeq,beq) %Aeq、beq滿足等式約束 ,若沒有不等式約束,則設(shè)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為指定優(yōu)化參數(shù) [x,resnorm] = lsqlin(…) % resnorm=norm(C*x-d)^2,即2-范數(shù)。 [x,resnorm,residual] = lsqlin(…) %residual=C*x-d,即殘差。 [x,resnorm,residual,exitflag] = lsqlin(…) %exitflag為終止迭代的條件 [x,resnorm,residual,exitflag,output] = lsqlin(…) % output表示輸出優(yōu)化信息 [x,resnorm,residual,exitflag,output,lambda] = lsqlin(…) % lambda為解x的Lagrange乘子 非線性數(shù)據(jù)(曲線)擬合 函數(shù) 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(…) 非線性最小二乘 函數(shù) 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為指定優(yōu)化參數(shù),若x沒有界,則lb=[ ],ub=[ ]。 [x,resnorm] = lsqnonlin(…) % resnorm=sum(fun(x).^2),即解x處目標(biāo)函數(shù)值。 [x,resnorm,residual] = lsqnonlin(…) % residual=fun(x),即解x處fun的值。 [x,resnorm,residual,exitflag] = lsqnonlin(…) %exitflag為終止迭代條件。 [x,resnorm,residual,exitflag,output] = lsqnonlin(…) %output輸出優(yōu)化信息。 [x,resnorm,residual,exitflag,output,lambda] = lsqnonlin(…) %lambda為Lagrage乘子。 [x,resnorm,residual,exitflag,output,lambda,jacobian] =lsqnonlin(…) %fun在解x處的Jacobian矩。 非負(fù)線性最小二乘 函數(shù) lsqnonneg 格式 x = lsqnonneg(C,d) %C為實(shí)矩陣,d為實(shí)向量 x = lsqnonneg(C,d,x0) % x0為初始值且大于0 x = lsqnonneg(C,d,x0,options) % options為指定優(yōu)化參數(shù) [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.非線性方程(組)求解 非線性方程的解 函數(shù) fzero 格式 x = fzero (fun,x0) %用fun定義表達(dá)式f(x),x0為初始解。 x = fzero (fun,x0,options) [x,fval] = fzero(…) %fval=f(x) [x,fval,exitflag] = fzero(…) [x,fval,exitflag,output] = fzero(…) 非線性方程組的解 函數(shù) fsolve 格式 x = fsolve(fun,x0) %用fun定義向量函數(shù),其定義方式為:先定義方程函數(shù)function F = myfun (x)。 F =[表達(dá)式1;表達(dá)式2;…表達(dá)式m] %保存為myfun.m,并用下面方式調(diào)用:x = fsolve(@myfun,x0),x0為初始估計值。 x = fsolve(fun,x0,options) [x,fval] = fsolve(…) %fval=F(x),即函數(shù)值向量 [x,fval,exitflag] = fsolve(…) [x,fval,exitflag,output] = fsolve(…) [x,fval,exitflag,output,jacobian] = fsolve(…) % jacobian為解x處的Jacobian陣。 其余參數(shù)與前面參數(shù)相似。 |
數(shù)學(xué)規(guī)劃模型是優(yōu)化模型的一種,包括線性規(guī)劃模型(目標(biāo)函數(shù)和約束條件都是線性函數(shù)的優(yōu)化問題);
非線性規(guī)劃模型(目標(biāo)函數(shù)或者約束條件是非線性的函數(shù)); 整數(shù)規(guī)劃(決策變量是整數(shù)值得規(guī)劃問題); 多目標(biāo)規(guī)劃(具有多個目標(biāo)函數(shù)的規(guī)劃問題)
;目標(biāo)規(guī)劃(具有不同優(yōu)先級的目標(biāo)和偏差的規(guī)劃問題) 動態(tài)規(guī)劃(求解多階段決策問題的最優(yōu)化方法)
。數(shù)學(xué)規(guī)劃模型相對比較好理解,關(guān)鍵是要能熟練地求出模型的解。
|