MATLAB优化问题
1.無約束的優化問題
fminbnd fminsearch fminunc %求解不連續的函數極值問題效果不佳 fminimax 以及 fmincon % 解決有約束的問題,被稱作萬能函數2.有約束的優化問題
(1)線性規劃
一般形式
例:
標準形式為:
?matlab求解
針對上邊的標準形式,matlab的求解函數為linprog 調用格式為
注意:當函數后面的參數缺失時,可以直接略去,如?
但缺失中間的參數,需要用空數組符號[]補位。如
例:求解線性規劃問題
解:
(1)化為標準形式
(2)寫成矩陣形式?
?其中
C=[-2,1,-1]; A=[1,1,1;-2,0,1]; b=[1;-2];
代碼:
C=[-2,1,-1]; A=[1,1,1;-2,0,1]; b=[1;-2]; X=linprog(C,A,b,[],[],zeros(3,1))(2)混合數學規劃問題
當線性規劃模型中存在整數變量,則稱為整數規劃模型或混合規劃模型。
在整數變量中,一種重要的整數變量是0-1變量,它在處理定性的量中有重要應用。
線性整數規劃求解的matlab函數為 X=intlinprog(c,intcon,A,b,A1,b1,L,U);
函數的參數與linprog相同,只是在c后面添加參量intcon,用來指示哪些變量是整數變量。如intcon=[2,3]表示第2,3個變量是整變量。
例:計算
f=[8,1];intcon=[2]; A=[-1 -2-4 -12 1]; b=[14;-33;20]; L=[0;0]; x=intlinprog(f,intcon,A,b,[],[],L)?01整數規劃
例:某企業擬在8個居民區A1,A2,…,A8建若干個門店,門店的備選地址有B1,B2,…,B6。各備選地址能覆蓋的居民區如下表:
| 備選地址 | B1 | B2 | B3 | B4 | B5 | B6 |
| 覆蓋小區 | A1,A5, A7 | A1,A2,A5,A8 | A1,A3, A5 | A2,A4, A8 | A3,A6 | A4,A6, A8 |
如何選址,可以用最少的門店覆蓋所有居民區
解:
(1)決策變量:決策是門店選址,應使用0-1變量?,xi=1,即選擇Bi,i=1,2,…,6
(2)目標:總門店數最少,即 min ? x1+x2+…+x6
(3)約束條件:
代碼:
?
(3)二次規劃
當目標函數是二次函數時,數學規劃稱為二次規劃 二次規劃的標準形式如下(目標函數為二次,約束條件為線性)
x = quadprog(H,f) x = quadprog(H,f,A,b) x = quadprog(H,f,A,b,Aeq,beq) x = quadprog(H,f,A,b,Aeq,beq,lb,ub) x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0) x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options) 求解非線性規劃問題:min 1/2*x’*H*x, A*x ≤ b, Aeq*x = beq;lb ≤ x ≤ ub;注意:H 為二次型系數矩陣
?例:解下列二次規劃
H = [1 -1; -1 2]; f = [-2; -6]; A = [1 1; -1 2; 2 1]; b = [2; 2; 3]; lb = zeros(2,1); opts = optimoptions('quadprog','Algorithm','active-set'); [x,fval] = quadprog(H,f,A,b,[],[],lb,[],[],opts)?(4)非線性規劃
Matlab中的非線性規劃為以下規范形式:
函數形式:[x,f] = fmincon(fun,x0,A,b,Aeq,beq, L, U, nonlcon)
x=fmincon (fun, 初值, A, b ) x=fmincon (fun, 初值, A, b, Aeq,beq ) x=fmincon (fun, 初值, A, b, Aeq, beq, lb, ub ) x=fmincon (fun, 初值, A,b,Aeq,beq,lb,ub,nonlcon, options)fun寫成如下的M-函數形式 (objfun.m) :
function ?f = objfun (x)
? ? f = f(x);
end
非線性約束條件寫成如下的M-函數形式
function [c,ceq]=nonlcon(x)
? ? c = c(x);
? ? ceq=ceq(x);
end
[x, f]=fmincon (...)同時返回解x處的函數值
例:
解:
第一步,化為標準形式,這里約束條件無線性函數,也無等式約束
?第二步,在 editor窗口寫目標函數,保存
function f = objfun(x) f = -x(1)^2*x(2)*x(3)^2/(2*x(1)^3*x(3)^2+3*x(1)^2*x(2)^2+2*x(2)^2*x(3)^3+x(1)^3*x(2)^2*x(3)^2); end第三步,在 editor窗口寫非線性約束函數,保存
function [c, ceq] = nonlincon(x) c=[-x(1)^2-x(2)^2-x(3)^2+1; x(1)^2+x(2)^2+x(3)^2-4]; ceq = [ ]; end第四步,在commond window求解
options = optimset('Algorithm', 'interior-point', 'Display', 'off'); %設置算法[x,fval] = fmincon(@objfun, [1,1,1],[],[],[],[],[0,0,0],[],@nonlincon, options)?
總結
以上是生活随笔為你收集整理的MATLAB优化问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MATLAB随机模拟
- 下一篇: CodeForces - 1350D O