约束优化方法
约束优化是寻求具有约束条件的线性或者非线性规划问题解的数值算法。
随机方向法
基本思路是在可行域内选择一个起始点,产生若干个随机方向,从中选择一个可以使目标函数值下降最快的随机方向作为可行搜索方向
d
⃗
\vec{d}
d.
从初始点
x
0
x_0
x0出发,沿着
d
⃗
\vec{d}
d方向以一定步长搜索,得到新点
x
x
x,并且满足约束条件
{
g
j
(
x
)
≤
0
(
j
=
1
,
2
,
…
,
m
)
f
(
x
)
<
f
(
x
0
)
\begin{cases} g_j(x)\leq 0(j=1,2,\dots, m)\\ f(x)<f(x_0) \end{cases}
{gj(x)≤0(j=1,2,…,m)f(x)<f(x0)
复合形法
在 n n n维空间的可行域中选取 K K K个点作为初始复合形的顶点。然后比较复合形中各顶点目标函数的大小,其中目标函数最大的点为坏点,用其他点(映射点)替换坏点,形成新的复合形。
可行方向法
从可行点出发,沿着下降可行方向进行搜索,求出使目标函数值下降的新的可行点。
二次规划(QP)
QP数学模型为
min
x
1
2
x
T
H
x
+
f
T
x
s
.
t
.
{
A
x
≤
b
A
e
q
⋅
x
=
b
e
q
l
b
≤
x
≤
u
b
\min_x\frac{1}{2}x^THx+f^Tx\\ s.t. \begin{cases} Ax\leq b\\ Aeq\cdot x=beq\\ lb\leq x\leq ub \end{cases}
xmin21xTHx+fTxs.t.⎩⎪⎨⎪⎧Ax≤bAeq⋅x=beqlb≤x≤ub
求解指令
[x, fval, exitflag, output, lambda]=quadprog(H, f, A, b, lb, ub, x0, options)
:返回解x
和目标值fval
,和解x
处包含的拉格朗日乘子的lambda
结构参数。
拉格朗日法
拉格朗日乘子法就是求函数 f ( x 1 , x 2 , … ) f(x_1, x_2, \dots) f(x1,x2,…)在 g ( x 1 , x 2 , … ) = 0 g(x_1, x_2, \dots)=0 g(x1,x2,…)=0的约束条件下的极值的方法。
- PH算法(等式约束)
效用函数为
min M ( x , u ( k ) , σ k ) = f ( x ) + u ( k ) T h ( x ) + σ k h ( x ) T h ( x ) \min M(x, u^{(k)}, \sigma_k)=f(x)+u^{(k)T}h(x)+\sigma_k h(x)^Th(x) minM(x,u(k),σk)=f(x)+u(k)Th(x)+σkh(x)Th(x)
判定函数为
ϕ k = ∥ h ( x ( k ) ) ∥ \phi_k=\lVert h(x^{(k)})\rVert ϕk=∥h(x(k))∥ - PHR算法
松弛变量法
M ( u , v , p ) = f ( x ) + 1 2 ρ ∑ 2 ρ l { [ max ( 0 , u i + ρ g i ( x ) ) ] 2 − u i 2 } + ∑ j = 1 l v j h j ( x ) + ρ 2 ∑ j = 1 l h j 2 ( x ) M(u, v, p)=f(x)+\frac{1}{2\rho}\sum_{2\rho}^l\{[\max(0, u_i+\rho g_i(x))]^2-u_i^2\}+\sum_{j=1}^l v_jh_j(x)+\frac{\rho}{2}\sum_{j=1}^l h_j^2(x) M(u,v,p)=f(x)+2ρ12ρ∑l{[max(0,ui+ρgi(x))]2−ui2}+j=1∑lvjhj(x)+2ρj=1∑lhj2(x)
乘子的修正公式为
{ v j ( k + 1 ) = v j ( k ) + ρ h j ( x ( k ) ) , j = 1 , … , l u i ( k + 1 ) = max [ 0 , u i ( k ) + ρ g i ( x ( k ) ) ] , i = 1 , … , m \begin{cases} v_j^{(k+1)}=v_j^{(k)}+\rho h_j(x^{(k)}), j=1, \dots, l\\ u_i^{(k+1)}=\max[0, u_i^{(k)}+\rho g_i(x^{(k)})], i=1,\dots, m \end{cases} {vj(k+1)=vj(k)+ρhj(x(k)),j=1,…,lui(k+1)=max[0,ui(k)+ρgi(x(k))],i=1,…,m
判断函数为
ϕ k = { ∑ j = 1 l h j 2 ( x ( k ) ) + ∑ i = 1 m max ( − g i ( x ( k ) ) , u i ( k ) ρ ) 2 } 1 / 2 \phi_k=\{\sum_{j=1}^l h_j^2(x^{(k)})+\sum_{i=1}^m\max(-g_i(x^{(k)}), \frac{u_i^{(k)}}{\rho})^2\}^{1/2} ϕk={j=1∑lhj2(x(k))+i=1∑mmax(−gi(x(k)),ρui(k))2}1/2
应用:投资组合管理
%%
clear all;
clc;
ExpReturn = [0.0017, 0.0015, 0.0005];
ExpCovariance = [
0.0010, 0.0004, 0.0005;
0.0004, 0.0016, 0.0003;
0.0005, 0.0003, 0.0013;
];
NumPorts = 5;
NumAssets = 3;
PVal = 1;
AssetMin = 0;
AssetMax = [0.6, 0.7, 0.5];
GroupA = [1 0 0];
GroupB = [0 1 1];
GroupMax = [0.7, 0.5];
AtoBmax = 3;
ConSet = portcons('PortValue', PVal, NumAssets, 'AssetLims', AssetMin, AssetMax, NumAssets, 'GroupComparison', GroupA, NaN, AtoBmax,...
GroupB, GroupMax);
%%
A = ConSet(:, 1:end-1);
b = ConSet(:, end);
p = Portfolio;
p = setAssetMoments(p, ExpReturn, ExpCovariance);
p = setInequality(p, A, b);
PortWts = estimateFrontier(p, NumPorts);
[PortRisk, PortReturn] = estimatePortMoments(p, PortWts);
disp('Risk');
PortRisk
disp('Return');
PortReturn
disp('Efficient Matrix');
PortWts