目前能想到的保证globally optimal solution的方法太复杂了,只能提供一个能收敛到kkt点的算法
先写一下优化问题,记I是3*3的全1矩阵。X是任意3*3矩阵。>=和<=号都是对矩阵的每个元素的,例如A<=B意思是a_ij<=b_ij(for any i,j)
max_X min (|[1;1;1]*X*[1,0,0]|,|[1;1;1]*X*[0,1,0]|,|[1;1;1]*X*[0,0,1]|,|[1;0;0]*X*[1,1,1]|,|[0;1;0]*X*[1,1,1]|,|[0;0;1]*X*[1,1,1]|)
s.t. -I<=X<=I
[1;1;1]*X*[1,1,1]=0
加入一个new variable t=min(|[1;1;1]*X*[1,0,0]|,|[1;1;1]*X*[0,1,0]|,|[1;1;1]*X*[0,0,1]|,|[1;0;0]*X*[1,1,1]|,|[0;1;0]*X*[1,1,1]|,|[0;0;1]*X*[1,1,1]|)
优化问题等价于
max_(X,t) t
s.t. |[1;1;1]*X*[1,0,0]|>=t,....,|[0;0;1]*X*[1,1,1]|>=t
-I<=X<=I
[1;1;1]*X*[1,1,1]=0
|[1;1;1]*X*[1,0,0]|>=t,....,|[0;0;1]*X*[1,1,1]|>=t这些约束是nonconvex的,我们可以近似转化一下,例如对于第一个约束|[1;1;1]*X*[1,0,0]|>=t
定义f1(X)=|[1;1;1]*X*[1,0,0]|
f1(X)关于X是convex的,但是f1(X)不是处处可微的,所以要引入subgradient
f1(X)>=f1(X0)+trace(g1(X0)'*(X-X0)) (g1(X0)是f1在X0处的subgradient,如果X0处可微,subgradient就是gradient)
然后就成找到原优化问题的一个可以解的上届
max_(X,t) t
s.t. f1(X0)+trace(g1(X0)'*(X-X0))>=t,....,f6(X0)+trace(g6(X0)'*(X-X0))>=t
-I<=X<=I
[1;1;1]*X*[1,1,1]=0
这是一个convex的问题,可以保证很容易解出来
然后假设解出来的最优解是X_opt,把X_opt代入X0得到一个更加tight的上届
max_(X,t) t
s.t. f1(X_opt)+trace(g1(X_opt)'*(X-X_opt))>=t,....,f6(X_opt)+trace(g6(X_opt)'*(X-X_opt))>=t
-I<=X<=I
[1;1;1]*X*[1,1,1]=0
然后以此类推,把每次优化问题的最优解当成下一次优化问题中的X0,直到收敛