广义不等式问题
本节说明障碍方法如何扩展到广义不等式问题。考虑问题
其中
该问题的 KKT 条件为
其中
该方法的展开过程与标量约束的情形完全平行:一旦发展出适用于一般正常锥的对数函数的推广,就可以定义问题的对数障碍函数;从那一点开始,后面的展开与标量情形本质相同。特别地,中心路径、障碍方法与复杂度分析都非常相似。
对数障碍与中心路径
正常锥的广义对数
我们首先定义正常锥
是凹的、闭的、二阶连续可微的, ,且对 有 ; - 存在常数
,使得对所有 和所有 ,有 。
换言之,
我们将使用任何广义对数都满足的两个性质:若
(这意味着
第二个性质对
例子:非负象限。
例子:二阶锥。函数
是二阶锥
的广义对数,次数为 2。
恒等式
例子:半正定锥。
广义不等式的对数障碍函数
回到广义不等式问题。设
中心路径
下一步定义问题的中心路径。定义中心点
的解(假设极小点存在且唯一)。中心点由最优性条件
刻画(对某个
中心路径上的对偶点
与标量情形一样,中心路径上的点给出原问题的对偶可行点。对
并令
首先,由广义对数的单调性性质,
在
最后一行利用了
于是若定义
则原始可行点
例子:二阶锥规划。考虑变量
(
中心路径上的最优性条件为
(其中
中严格可行。与
与一般公式
例子:不等式形式的半定规划。考虑变量
(
用
由此得到刻画中心点的最优性条件:
因此矩阵
严格对偶可行,与
障碍方法
我们已经看到中心路径的关键性质如何推广到广义不等式问题:
- 计算中心路径上的一点即在等式约束下极小化一个二阶可微的凸函数(可以用 Newton 方法完成)。
- 与中心点
相关联的对偶可行点 的对偶间隙为 。特别地, 至多 -次优。
这意味着可以按完全相同的方式(与标量情形的障碍方法一样)求解广义不等式问题。从
外加一次初始中心点步。与标量情形结果的唯一差别是
阶段 I 与可行性问题:阶段 I 方法可以直接推广到广义不等式问题。给定
的可行性,求解问题
变量为
例子
一个小型 SOCP
求解 SOCP
其中
用障碍函数

上图由下面的 TikZ 代码编译而来:
\definecolor{cblue}{RGB}{31,119,180}
\definecolor{cred}{RGB}{214,39,40}
\definecolor{cgreen}{RGB}{44,160,44}
\definecolor{corange}{RGB}{255,127,14}
\definecolor{cpurple}{RGB}{148,103,189}
\definecolor{cbrown}{RGB}{140,86,75}
\definecolor{cpink}{RGB}{227,119,194}
\definecolor{cgray}{RGB}{127,127,127}
\begin{tikzpicture}[x=1cm,y=1cm,>=stealth,line cap=round,line join=round]
\draw[color=black!25,very thin] (0.0000,0.0000) -- (7.6000,0.0000) (0.0000,0.5500) -- (7.6000,0.5500) (0.0000,1.1000) -- (7.6000,1.1000) (0.0000,1.6500) -- (7.6000,1.6500) (0.0000,2.2000) -- (7.6000,2.2000) (0.0000,2.7500) -- (7.6000,2.7500) (0.0000,3.3000) -- (7.6000,3.3000) (0.0000,3.8500) -- (7.6000,3.8500) (0.0000,4.4000) -- (7.6000,4.4000);
\draw[color=black!15,very thin] (0.0000,0.0000) -- (0.0000,4.4000) (0.3176,0.0000) -- (0.3176,4.4000) (0.6352,0.0000) -- (0.6352,4.4000) (0.9527,0.0000) -- (0.9527,4.4000) (1.2703,0.0000) -- (1.2703,4.4000) (1.5879,0.0000) -- (1.5879,4.4000) (1.9055,0.0000) -- (1.9055,4.4000) (2.2230,0.0000) -- (2.2230,4.4000) (2.5406,0.0000) -- (2.5406,4.4000) (2.8582,0.0000) -- (2.8582,4.4000) (3.1758,0.0000) -- (3.1758,4.4000) (3.4933,0.0000) -- (3.4933,4.4000) (3.8109,0.0000) -- (3.8109,4.4000) (4.1285,0.0000) -- (4.1285,4.4000) (4.4461,0.0000) -- (4.4461,4.4000) (4.7636,0.0000) -- (4.7636,4.4000) (5.0812,0.0000) -- (5.0812,4.4000) (5.3988,0.0000) -- (5.3988,4.4000) (5.7164,0.0000) -- (5.7164,4.4000) (6.0340,0.0000) -- (6.0340,4.4000) (6.3515,0.0000) -- (6.3515,4.4000) (6.6691,0.0000) -- (6.6691,4.4000) (6.9867,0.0000) -- (6.9867,4.4000) (7.3043,0.0000) -- (7.3043,4.4000);
\draw[->,color=black!60] (0.0000,0.0000) -- (7.9500,0.0000) node[anchor=west,xshift=2pt,yshift=-6pt] {cumulative Newton steps};
\draw[->,color=black!60] (0.0000,0.0000) -- (0.0000,4.7500) node[left=1pt] {duality gap};
\node[left,font=\scriptsize,color=black!60] at (0.0000,0.0000) {$10^{-6}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,0.5500) {$10^{-5}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,1.1000) {$10^{-4}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,1.6500) {$10^{-3}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,2.2000) {$10^{-2}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,2.7500) {$10^{-1}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,3.3000) {1};
\node[left,font=\scriptsize,color=black!60] at (0.0000,3.8500) {$10$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,4.4000) {$10^{2}$};
\node[below,font=\scriptsize,color=black!60] at (0.0000,0.0000) {0};
\node[below,font=\scriptsize,color=black!60] at (0.8469,0.0000) {64};
\node[below,font=\scriptsize,color=black!60] at (1.6937,0.0000) {128};
\node[below,font=\scriptsize,color=black!60] at (2.5406,0.0000) {192};
\node[below,font=\scriptsize,color=black!60] at (3.3875,0.0000) {256};
\node[below,font=\scriptsize,color=black!60] at (4.2344,0.0000) {320};
\node[below,font=\scriptsize,color=black!60] at (5.0812,0.0000) {384};
\node[below,font=\scriptsize,color=black!60] at (5.9281,0.0000) {448};
\node[below,font=\scriptsize,color=black!60] at (6.7750,0.0000) {512};
\draw[cblue,very thick] plot coordinates {(0.000,4.400) (0.238,4.400) (0.238,4.234) (0.450,4.234) (0.450,4.069) (0.556,4.069) (0.556,3.903) (0.609,3.903) (0.609,3.738) (0.635,3.738) (0.635,3.572) (0.701,3.572) (0.701,3.407) (0.807,3.407) (0.807,3.241) (0.847,3.241) (0.847,3.075) (0.887,3.075) (0.887,2.910) (1.006,2.910) (1.006,2.744) (1.178,2.744) (1.178,2.579) (1.376,2.579) (1.376,2.413) (1.575,2.413) (1.575,2.248) (1.707,2.248) (1.707,2.082) (1.932,2.082) (1.932,1.917) (2.355,1.917) (2.355,1.751) (3.149,1.751) (3.149,1.585) (3.943,1.585) (3.943,1.420) (4.737,1.420) (4.737,1.254) (5.531,1.254) (5.531,1.089) (6.325,1.089) (6.325,0.923) (7.119,0.923) (7.119,0.758) (7.238,0.758) (7.238,0.592)};
\draw[cred,very thick] plot coordinates {(0.000,4.400) (0.119,4.400) (0.119,3.466) (0.212,3.466) (0.212,2.531) (0.384,2.531) (0.384,1.597) (0.423,1.597) (0.423,0.662)};
\draw[cgreen,very thick] plot coordinates {(0.000,4.400) (0.132,4.400) (0.132,3.203) (0.318,3.203) (0.318,2.006) (0.490,2.006) (0.490,0.809) (0.516,0.809) (0.516,-0.387)};
\node[anchor=south west,color=cblue] at (0.0132,4.2780) {$\mu=2$};
\node[anchor=south west,color=cred] at (4.1800,4.1811) {$\mu=50$};
\node[anchor=south west,color=cgreen] at (2.2800,3.5624) {$\mu=150$};
\end{tikzpicture}
上图由下面的 TikZ 代码编译而来:
\definecolor{cblue}{RGB}{31,119,180}
\definecolor{cred}{RGB}{214,39,40}
\definecolor{cgreen}{RGB}{44,160,44}
\definecolor{corange}{RGB}{255,127,14}
\definecolor{cpurple}{RGB}{148,103,189}
\definecolor{cbrown}{RGB}{140,86,75}
\definecolor{cpink}{RGB}{227,119,194}
\definecolor{cgray}{RGB}{127,127,127}
\begin{tikzpicture}[x=1cm,y=1cm,>=stealth,line cap=round,line join=round]
\draw[color=black!12,very thin] (0.0000,0) -- (0.0000,4.4) (0.7589,0) -- (0.7589,4.4) (2.1200,0) -- (2.1200,4.4) (3.1497,0) -- (3.1497,4.4) (4.1794,0) -- (4.1794,4.4) (5.5406,0) -- (5.5406,4.4) (6.5703,0) -- (6.5703,4.4) (7.6000,0) -- (7.6000,4.4) (0,0.0603) -- (7.6,0.0603) (0,0.1207) -- (7.6,0.1207) (0,0.1810) -- (7.6,0.1810) (0,0.2414) -- (7.6,0.2414) (0,0.3017) -- (7.6,0.3017) (0,0.3621) -- (7.6,0.3621) (0,0.4224) -- (7.6,0.4224) (0,0.4828) -- (7.6,0.4828) (0,0.5431) -- (7.6,0.5431) (0,0.6035) -- (7.6,0.6035) (0,0.6638) -- (7.6,0.6638) (0,0.7242) -- (7.6,0.7242) (0,0.7845) -- (7.6,0.7845) (0,0.8449) -- (7.6,0.8449) (0,0.9052) -- (7.6,0.9052) (0,0.9656) -- (7.6,0.9656) (0,1.0259) -- (7.6,1.0259) (0,1.0863) -- (7.6,1.0863) (0,1.1466) -- (7.6,1.1466) (0,1.2070) -- (7.6,1.2070) (0,1.2673) -- (7.6,1.2673) (0,1.3277) -- (7.6,1.3277) (0,1.3880) -- (7.6,1.3880) (0,1.4484) -- (7.6,1.4484) (0,1.5087) -- (7.6,1.5087) (0,1.5691) -- (7.6,1.5691) (0,1.6294) -- (7.6,1.6294) (0,1.6898) -- (7.6,1.6898) (0,1.7501) -- (7.6,1.7501) (0,1.8105) -- (7.6,1.8105) (0,1.8708) -- (7.6,1.8708) (0,1.9311) -- (7.6,1.9311) (0,1.9915) -- (7.6,1.9915) (0,2.0518) -- (7.6,2.0518) (0,2.1122) -- (7.6,2.1122) (0,2.1725) -- (7.6,2.1725) (0,2.2329) -- (7.6,2.2329) (0,2.2932) -- (7.6,2.2932) (0,2.3536) -- (7.6,2.3536) (0,2.4139) -- (7.6,2.4139) (0,2.4743) -- (7.6,2.4743) (0,2.5346) -- (7.6,2.5346) (0,2.5950) -- (7.6,2.5950) (0,2.6553) -- (7.6,2.6553) (0,2.7157) -- (7.6,2.7157) (0,2.7760) -- (7.6,2.7760) (0,2.8364) -- (7.6,2.8364) (0,2.8967) -- (7.6,2.8967) (0,2.9571) -- (7.6,2.9571) (0,3.0174) -- (7.6,3.0174) (0,3.0778) -- (7.6,3.0778) (0,3.1381) -- (7.6,3.1381) (0,3.1985) -- (7.6,3.1985) (0,3.2588) -- (7.6,3.2588) (0,3.3192) -- (7.6,3.3192) (0,3.3795) -- (7.6,3.3795) (0,3.4399) -- (7.6,3.4399) (0,3.5002) -- (7.6,3.5002) (0,3.5606) -- (7.6,3.5606) (0,3.6209) -- (7.6,3.6209) (0,3.6813) -- (7.6,3.6813) (0,3.7416) -- (7.6,3.7416) (0,3.8019) -- (7.6,3.8019) (0,3.8623) -- (7.6,3.8623) (0,3.9226) -- (7.6,3.9226) (0,3.9830) -- (7.6,3.9830) (0,4.0433) -- (7.6,4.0433) (0,4.1037) -- (7.6,4.1037) (0,4.1640) -- (7.6,4.1640) (0,4.2244) -- (7.6,4.2244) (0,4.2847) -- (7.6,4.2847) (0,4.3451) -- (7.6,4.3451) ;
\draw[->,color=black!60] (0,0) -- (7.8999999999999995,0) node[below] {$\mu$};
\draw[->,color=black!60] (0,0) -- (0,4.7) node[left] {total Newton steps};
\draw[cblue,very thick] plot [smooth] coordinates {(0.000,3.826) (0.317,1.744) (0.633,1.382) (0.950,1.310) (1.267,0.941) (1.583,0.960) (1.900,0.422) (2.217,0.501) (2.533,0.682) (2.850,0.344) (3.167,0.211) (3.483,0.235) (3.800,0.314) (4.117,0.193) (4.433,0.199) (4.750,0.193) (5.067,0.519) (5.383,0.567) (5.700,0.163) (6.017,0.266) (6.333,0.175) (6.650,0.501) (6.967,0.139) (7.283,0.217) (7.600,0.199)};
\fill[cblue] (0.000,3.826) circle (1.5pt);
\fill[cblue] (0.317,1.744) circle (1.5pt);
\fill[cblue] (0.633,1.382) circle (1.5pt);
\fill[cblue] (0.950,1.310) circle (1.5pt);
\fill[cblue] (1.267,0.941) circle (1.5pt);
\fill[cblue] (1.583,0.960) circle (1.5pt);
\fill[cblue] (1.900,0.422) circle (1.5pt);
\fill[cblue] (2.217,0.501) circle (1.5pt);
\fill[cblue] (2.533,0.682) circle (1.5pt);
\fill[cblue] (2.850,0.344) circle (1.5pt);
\fill[cblue] (3.167,0.211) circle (1.5pt);
\fill[cblue] (3.483,0.235) circle (1.5pt);
\fill[cblue] (3.800,0.314) circle (1.5pt);
\fill[cblue] (4.117,0.193) circle (1.5pt);
\fill[cblue] (4.433,0.199) circle (1.5pt);
\fill[cblue] (4.750,0.193) circle (1.5pt);
\fill[cblue] (5.067,0.519) circle (1.5pt);
\fill[cblue] (5.383,0.567) circle (1.5pt);
\fill[cblue] (5.700,0.163) circle (1.5pt);
\fill[cblue] (6.017,0.266) circle (1.5pt);
\fill[cblue] (6.333,0.175) circle (1.5pt);
\fill[cblue] (6.650,0.501) circle (1.5pt);
\fill[cblue] (6.967,0.139) circle (1.5pt);
\fill[cblue] (7.283,0.217) circle (1.5pt);
\fill[cblue] (7.600,0.199) circle (1.5pt);
\node[below,color=black!60] at (0.0000,0) {1.2};
\node[below,color=black!60] at (0.7589,0) {2};
\node[below,color=black!60] at (2.1200,0) {5};
\node[below,color=black!60] at (3.1497,0) {10};
\node[below,color=black!60] at (4.1794,0) {20};
\node[below,color=black!60] at (5.5406,0) {50};
\node[below,color=black!60] at (6.5703,0) {100};
\node[below,color=black!60] at (7.6000,0) {200};
\node[left,color=black!60] at (0,0.0603) {10};
\node[left,color=black!60] at (0,0.1810) {30};
\node[left,color=black!60] at (0,0.3017) {50};
\node[left,color=black!60] at (0,0.4224) {70};
\node[left,color=black!60] at (0,0.5431) {90};
\node[left,color=black!60] at (0,0.6638) {110};
\node[left,color=black!60] at (0,0.7845) {130};
\node[left,color=black!60] at (0,0.9052) {150};
\node[left,color=black!60] at (0,1.0259) {170};
\node[left,color=black!60] at (0,1.1466) {190};
\node[left,color=black!60] at (0,1.2673) {210};
\node[left,color=black!60] at (0,1.3880) {230};
\node[left,color=black!60] at (0,1.5087) {250};
\node[left,color=black!60] at (0,1.6294) {270};
\node[left,color=black!60] at (0,1.7501) {290};
\node[left,color=black!60] at (0,1.8708) {310};
\node[left,color=black!60] at (0,1.9915) {330};
\node[left,color=black!60] at (0,2.1122) {350};
\node[left,color=black!60] at (0,2.2329) {370};
\node[left,color=black!60] at (0,2.3536) {390};
\node[left,color=black!60] at (0,2.4743) {410};
\node[left,color=black!60] at (0,2.5950) {430};
\node[left,color=black!60] at (0,2.7157) {450};
\node[left,color=black!60] at (0,2.8364) {470};
\node[left,color=black!60] at (0,2.9571) {490};
\node[left,color=black!60] at (0,3.0778) {510};
\node[left,color=black!60] at (0,3.1985) {530};
\node[left,color=black!60] at (0,3.3192) {550};
\node[left,color=black!60] at (0,3.4399) {570};
\node[left,color=black!60] at (0,3.5606) {590};
\node[left,color=black!60] at (0,3.6813) {610};
\node[left,color=black!60] at (0,3.8019) {630};
\node[left,color=black!60] at (0,3.9226) {650};
\node[left,color=black!60] at (0,4.0433) {670};
\node[left,color=black!60] at (0,4.1640) {690};
\node[left,color=black!60] at (0,4.2847) {710};
\end{tikzpicture}一个小型 SDP
下一个例子是 SDP
变量
的障碍方法。

上图由下面的 TikZ 代码编译而来:
\definecolor{cblue}{RGB}{31,119,180}
\definecolor{cred}{RGB}{214,39,40}
\definecolor{cgreen}{RGB}{44,160,44}
\definecolor{corange}{RGB}{255,127,14}
\definecolor{cpurple}{RGB}{148,103,189}
\definecolor{cbrown}{RGB}{140,86,75}
\definecolor{cpink}{RGB}{227,119,194}
\definecolor{cgray}{RGB}{127,127,127}
\begin{tikzpicture}[x=1cm,y=1cm,>=stealth,line cap=round,line join=round]
\draw[color=black!25,very thin] (0.0000,0.0000) -- (7.6000,0.0000) (0.0000,0.5500) -- (7.6000,0.5500) (0.0000,1.1000) -- (7.6000,1.1000) (0.0000,1.6500) -- (7.6000,1.6500) (0.0000,2.2000) -- (7.6000,2.2000) (0.0000,2.7500) -- (7.6000,2.7500) (0.0000,3.3000) -- (7.6000,3.3000) (0.0000,3.8500) -- (7.6000,3.8500) (0.0000,4.4000) -- (7.6000,4.4000);
\draw[color=black!15,very thin] (0.0000,0.0000) -- (0.0000,4.4000) (0.3966,0.0000) -- (0.3966,4.4000) (0.7932,0.0000) -- (0.7932,4.4000) (1.1898,0.0000) -- (1.1898,4.4000) (1.5864,0.0000) -- (1.5864,4.4000) (1.9830,0.0000) -- (1.9830,4.4000) (2.3796,0.0000) -- (2.3796,4.4000) (2.7763,0.0000) -- (2.7763,4.4000) (3.1729,0.0000) -- (3.1729,4.4000) (3.5695,0.0000) -- (3.5695,4.4000) (3.9661,0.0000) -- (3.9661,4.4000) (4.3627,0.0000) -- (4.3627,4.4000) (4.7593,0.0000) -- (4.7593,4.4000) (5.1559,0.0000) -- (5.1559,4.4000) (5.5525,0.0000) -- (5.5525,4.4000) (5.9491,0.0000) -- (5.9491,4.4000) (6.3457,0.0000) -- (6.3457,4.4000) (6.7423,0.0000) -- (6.7423,4.4000) (7.1389,0.0000) -- (7.1389,4.4000) (7.5356,0.0000) -- (7.5356,4.4000);
\draw[->,color=black!60] (0.0000,0.0000) -- (7.9500,0.0000) node[anchor=west,xshift=2pt,yshift=-6pt] {cumulative Newton steps};
\draw[->,color=black!60] (0.0000,0.0000) -- (0.0000,4.7500) node[left=1pt] {duality gap};
\node[left,font=\scriptsize,color=black!60] at (0.0000,0.0000) {$10^{-6}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,0.5500) {$10^{-5}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,1.1000) {$10^{-4}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,1.6500) {$10^{-3}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,2.2000) {$10^{-2}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,2.7500) {$10^{-1}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,3.3000) {1};
\node[left,font=\scriptsize,color=black!60] at (0.0000,3.8500) {$10$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,4.4000) {$10^{2}$};
\node[below,font=\scriptsize,color=black!60] at (0.0000,0.0000) {0};
\node[below,font=\scriptsize,color=black!60] at (0.8924,0.0000) {9};
\node[below,font=\scriptsize,color=black!60] at (1.7847,0.0000) {18};
\node[below,font=\scriptsize,color=black!60] at (2.6771,0.0000) {27};
\node[below,font=\scriptsize,color=black!60] at (3.5695,0.0000) {36};
\node[below,font=\scriptsize,color=black!60] at (4.4618,0.0000) {45};
\node[below,font=\scriptsize,color=black!60] at (5.3542,0.0000) {54};
\node[below,font=\scriptsize,color=black!60] at (6.2466,0.0000) {63};
\node[below,font=\scriptsize,color=black!60] at (7.1389,0.0000) {72};
\draw[cblue,very thick] plot coordinates {(0.000,4.400) (0.099,4.400) (0.099,4.234) (0.198,4.234) (0.198,4.069) (0.397,4.069) (0.397,3.903) (1.487,3.903) (1.487,3.738) (2.280,3.738) (2.280,3.572) (2.776,3.572) (2.776,3.407) (3.074,3.407) (3.074,3.241) (3.272,3.241) (3.272,3.075) (3.470,3.075) (3.470,2.910) (3.669,2.910) (3.669,2.744) (3.867,2.744) (3.867,2.579) (4.164,2.579) (4.164,2.413) (4.363,2.413) (4.363,2.248) (4.561,2.248) (4.561,2.082) (4.759,2.082) (4.759,1.917) (5.057,1.917) (5.057,1.751) (5.255,1.751) (5.255,1.585) (5.453,1.585) (5.453,1.420) (5.751,1.420) (5.751,1.254) (5.949,1.254) (5.949,1.089) (6.147,1.089) (6.147,0.923) (6.346,0.923) (6.346,0.758) (6.544,0.758) (6.544,0.592) (6.742,0.592) (6.742,0.426) (6.941,0.426) (6.941,0.261) (7.040,0.261) (7.040,0.095) (7.238,0.095) (7.238,-0.070)};
\draw[cred,very thick] plot coordinates {(0.000,4.400) (1.091,4.400) (1.091,3.466) (1.884,3.466) (1.884,2.531) (2.380,2.531) (2.380,1.597) (2.578,1.597) (2.578,0.662) (2.776,0.662) (2.776,-0.272)};
\draw[cgreen,very thick] plot coordinates {(0.000,4.400) (0.595,4.400) (0.595,3.203) (1.091,3.203) (1.091,2.006) (1.686,2.006) (1.686,0.809) (2.082,0.809) (2.082,-0.387)};
\node[anchor=south west,color=cblue] at (0.0992,4.2780) {$\mu=2$};
\node[anchor=south west,color=cred] at (4.1800,4.1811) {$\mu=50$};
\node[anchor=south west,color=cgreen] at (2.2800,3.5624) {$\mu=150$};
\end{tikzpicture}
上图由下面的 TikZ 代码编译而来:
\definecolor{cblue}{RGB}{31,119,180}
\definecolor{cred}{RGB}{214,39,40}
\definecolor{cgreen}{RGB}{44,160,44}
\definecolor{corange}{RGB}{255,127,14}
\definecolor{cpurple}{RGB}{148,103,189}
\definecolor{cbrown}{RGB}{140,86,75}
\definecolor{cpink}{RGB}{227,119,194}
\definecolor{cgray}{RGB}{127,127,127}
\begin{tikzpicture}[x=1cm,y=1cm,>=stealth,line cap=round,line join=round]
\draw[color=black!12,very thin] (0.0000,0) -- (0.0000,4.4) (0.7589,0) -- (0.7589,4.4) (2.1200,0) -- (2.1200,4.4) (3.1497,0) -- (3.1497,4.4) (4.1794,0) -- (4.1794,4.4) (5.5406,0) -- (5.5406,4.4) (6.5703,0) -- (6.5703,4.4) (7.6000,0) -- (7.6000,4.4) (0,0.2174) -- (7.6,0.2174) (0,0.4348) -- (7.6,0.4348) (0,0.6522) -- (7.6,0.6522) (0,0.8696) -- (7.6,0.8696) (0,1.0870) -- (7.6,1.0870) (0,1.3043) -- (7.6,1.3043) (0,1.5217) -- (7.6,1.5217) (0,1.7391) -- (7.6,1.7391) (0,1.9565) -- (7.6,1.9565) (0,2.1739) -- (7.6,2.1739) (0,2.3913) -- (7.6,2.3913) (0,2.6087) -- (7.6,2.6087) (0,2.8261) -- (7.6,2.8261) (0,3.0435) -- (7.6,3.0435) (0,3.2609) -- (7.6,3.2609) (0,3.4783) -- (7.6,3.4783) (0,3.6957) -- (7.6,3.6957) (0,3.9130) -- (7.6,3.9130) (0,4.1304) -- (7.6,4.1304) (0,4.3478) -- (7.6,4.3478) ;
\draw[->,color=black!60] (0,0) -- (7.8999999999999995,0) node[below] {$\mu$};
\draw[->,color=black!60] (0,0) -- (0,4.7) node[left] {total Newton steps};
\draw[cblue,very thick] plot [smooth] coordinates {(0.000,3.826) (0.317,2.000) (0.633,1.326) (0.950,1.130) (1.267,0.913) (1.583,0.826) (1.900,0.652) (2.217,0.630) (2.533,0.652) (2.850,0.696) (3.167,0.500) (3.483,0.609) (3.800,0.587) (4.117,0.565) (4.433,0.522) (4.750,0.565) (5.067,0.587) (5.383,0.500) (5.700,0.348) (6.017,0.435) (6.333,0.435) (6.650,0.413) (6.967,0.413) (7.283,0.370) (7.600,0.500)};
\fill[cblue] (0.000,3.826) circle (1.5pt);
\fill[cblue] (0.317,2.000) circle (1.5pt);
\fill[cblue] (0.633,1.326) circle (1.5pt);
\fill[cblue] (0.950,1.130) circle (1.5pt);
\fill[cblue] (1.267,0.913) circle (1.5pt);
\fill[cblue] (1.583,0.826) circle (1.5pt);
\fill[cblue] (1.900,0.652) circle (1.5pt);
\fill[cblue] (2.217,0.630) circle (1.5pt);
\fill[cblue] (2.533,0.652) circle (1.5pt);
\fill[cblue] (2.850,0.696) circle (1.5pt);
\fill[cblue] (3.167,0.500) circle (1.5pt);
\fill[cblue] (3.483,0.609) circle (1.5pt);
\fill[cblue] (3.800,0.587) circle (1.5pt);
\fill[cblue] (4.117,0.565) circle (1.5pt);
\fill[cblue] (4.433,0.522) circle (1.5pt);
\fill[cblue] (4.750,0.565) circle (1.5pt);
\fill[cblue] (5.067,0.587) circle (1.5pt);
\fill[cblue] (5.383,0.500) circle (1.5pt);
\fill[cblue] (5.700,0.348) circle (1.5pt);
\fill[cblue] (6.017,0.435) circle (1.5pt);
\fill[cblue] (6.333,0.435) circle (1.5pt);
\fill[cblue] (6.650,0.413) circle (1.5pt);
\fill[cblue] (6.967,0.413) circle (1.5pt);
\fill[cblue] (7.283,0.370) circle (1.5pt);
\fill[cblue] (7.600,0.500) circle (1.5pt);
\node[below,color=black!60] at (0.0000,0) {1.2};
\node[below,color=black!60] at (0.7589,0) {2};
\node[below,color=black!60] at (2.1200,0) {5};
\node[below,color=black!60] at (3.1497,0) {10};
\node[below,color=black!60] at (4.1794,0) {20};
\node[below,color=black!60] at (5.5406,0) {50};
\node[below,color=black!60] at (6.5703,0) {100};
\node[below,color=black!60] at (7.6000,0) {200};
\node[left,color=black!60] at (0,0.2174) {10};
\node[left,color=black!60] at (0,0.6522) {30};
\node[left,color=black!60] at (0,1.0870) {50};
\node[left,color=black!60] at (0,1.5217) {70};
\node[left,color=black!60] at (0,1.9565) {90};
\node[left,color=black!60] at (0,2.3913) {110};
\node[left,color=black!60] at (0,2.8261) {130};
\node[left,color=black!60] at (0,3.2609) {150};
\node[left,color=black!60] at (0,3.6957) {170};
\node[left,color=black!60] at (0,4.1304) {190};
\end{tikzpicture}一族 SDP
考察障碍方法性能随问题维数的变化,考虑形如
的一族 SDP(变量

上图由下面的 TikZ 代码编译而来:
\definecolor{cblue}{RGB}{31,119,180}
\definecolor{cred}{RGB}{214,39,40}
\definecolor{cgreen}{RGB}{44,160,44}
\definecolor{corange}{RGB}{255,127,14}
\definecolor{cpurple}{RGB}{148,103,189}
\definecolor{cbrown}{RGB}{140,86,75}
\definecolor{cpink}{RGB}{227,119,194}
\definecolor{cgray}{RGB}{127,127,127}
\begin{tikzpicture}[x=1cm,y=1cm,>=stealth,line cap=round,line join=round]
\draw[color=black!25,very thin] (0.0000,0.0000) -- (7.6000,0.0000) (0.0000,0.7333) -- (7.6000,0.7333) (0.0000,1.4667) -- (7.6000,1.4667) (0.0000,2.2000) -- (7.6000,2.2000) (0.0000,2.9333) -- (7.6000,2.9333) (0.0000,3.6667) -- (7.6000,3.6667) (0.0000,4.4000) -- (7.6000,4.4000);
\draw[color=black!15,very thin] (0.0000,0.0000) -- (0.0000,4.4000) (0.6580,0.0000) -- (0.6580,4.4000) (1.3160,0.0000) -- (1.3160,4.4000) (1.9740,0.0000) -- (1.9740,4.4000) (2.6320,0.0000) -- (2.6320,4.4000) (3.2900,0.0000) -- (3.2900,4.4000) (3.9481,0.0000) -- (3.9481,4.4000) (4.6061,0.0000) -- (4.6061,4.4000) (5.2641,0.0000) -- (5.2641,4.4000) (5.9221,0.0000) -- (5.9221,4.4000) (6.5801,0.0000) -- (6.5801,4.4000) (7.2381,0.0000) -- (7.2381,4.4000);
\draw[->,color=black!60] (0.0000,0.0000) -- (7.9500,0.0000) node[anchor=west,xshift=2pt,yshift=-6pt] {cumulative Newton steps};
\draw[->,color=black!60] (0.0000,0.0000) -- (0.0000,4.7500) node[left=1pt] {duality gap};
\node[left,font=\scriptsize,color=black!60] at (0.0000,0.0000) {$10^{-3}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,0.7333) {$10^{-2}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,1.4667) {$10^{-1}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,2.2000) {1};
\node[left,font=\scriptsize,color=black!60] at (0.0000,2.9333) {$10$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,3.6667) {$10^{2}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,4.4000) {$10^{3}$};
\node[below,font=\scriptsize,color=black!60] at (0.0000,0.0000) {0};
\node[below,font=\scriptsize,color=black!60] at (1.3160,0.0000) {2};
\node[below,font=\scriptsize,color=black!60] at (2.6320,0.0000) {4};
\node[below,font=\scriptsize,color=black!60] at (3.9481,0.0000) {6};
\node[below,font=\scriptsize,color=black!60] at (5.2641,0.0000) {8};
\node[below,font=\scriptsize,color=black!60] at (6.5801,0.0000) {10};
\draw[cblue,very thick] plot coordinates {(0.000,3.446) (1.974,2.492) (4.606,1.538) (5.264,0.584)};
\node[anchor=west,color=cblue] at (5.4141,0.5836) {$n{=}50$};
\draw[cred,very thick] plot coordinates {(0.000,4.179) (4.606,3.225) (6.580,2.271) (7.238,1.317)};
\node[anchor=west,color=cred] at (7.3881,1.3170) {$n{=}500$};
\draw[cgreen,very thick] plot coordinates {(0.000,4.400) (1.974,3.446) (4.606,2.492) (5.264,1.538)};
\node[anchor=west,color=cgreen] at (5.4141,1.5377) {$n{=}1000$};
\end{tikzpicture}
上图由下面的 TikZ 代码编译而来:
\definecolor{cblue}{RGB}{31,119,180}
\definecolor{cred}{RGB}{214,39,40}
\definecolor{cgreen}{RGB}{44,160,44}
\definecolor{corange}{RGB}{255,127,14}
\definecolor{cpurple}{RGB}{148,103,189}
\definecolor{cbrown}{RGB}{140,86,75}
\definecolor{cpink}{RGB}{227,119,194}
\definecolor{cgray}{RGB}{127,127,127}
\begin{tikzpicture}[x=1cm,y=1cm,>=stealth,line cap=round,line join=round]
\draw[color=black!12,very thin] (0.0000,0) -- (0.0000,4.4) (1.1439,0) -- (1.1439,4.4) (2.6561,0) -- (2.6561,4.4) (3.8000,0) -- (3.8000,4.4) (4.9439,0) -- (4.9439,4.4) (6.4561,0) -- (6.4561,4.4) (7.6000,0) -- (7.6000,4.4) ;
\draw[cblue,thick] (0.0000,2.8530) -- (0.0000,3.8261);
\draw[cblue,thick] (-0.0700,2.8530) -- (0.0700,2.8530);
\draw[cblue,thick] (-0.0700,3.8261) -- (0.0700,3.8261);
\fill[cblue] (0.0000,3.3396) circle (1.6pt);
\draw[cblue,thick] (0.6691,2.2273) -- (0.6691,3.3068);
\draw[cblue,thick] (0.5991,2.2273) -- (0.7391,2.2273);
\draw[cblue,thick] (0.5991,3.3068) -- (0.7391,3.3068);
\fill[cblue] (0.6691,2.7671) circle (1.6pt);
\draw[cblue,thick] (1.3746,2.4100) -- (1.3746,3.1241);
\draw[cblue,thick] (1.3046,2.4100) -- (1.4446,2.4100);
\draw[cblue,thick] (1.3046,3.1241) -- (1.4446,3.1241);
\fill[cblue] (1.3746,2.7671) circle (1.6pt);
\draw[cblue,thick] (2.0675,2.0596) -- (2.0675,2.3295);
\draw[cblue,thick] (1.9975,2.0596) -- (2.1375,2.0596);
\draw[cblue,thick] (1.9975,2.3295) -- (2.1375,2.3295);
\fill[cblue] (2.0675,2.1946) circle (1.6pt);
\draw[cblue,thick] (2.7522,2.4100) -- (2.7522,3.1241);
\draw[cblue,thick] (2.6822,2.4100) -- (2.8222,2.4100);
\draw[cblue,thick] (2.6822,3.1241) -- (2.8222,3.1241);
\fill[cblue] (2.7522,2.7671) circle (1.6pt);
\draw[cblue,thick] (3.4522,2.7834) -- (3.4522,3.3232);
\draw[cblue,thick] (3.3822,2.7834) -- (3.5222,2.7834);
\draw[cblue,thick] (3.3822,3.3232) -- (3.5222,3.3232);
\fill[cblue] (3.4522,3.0533) circle (1.6pt);
\draw[cblue,thick] (4.1416,2.3425) -- (4.1416,2.8100);
\draw[cblue,thick] (4.0716,2.3425) -- (4.2116,2.3425);
\draw[cblue,thick] (4.0716,2.8100) -- (4.2116,2.8100);
\fill[cblue] (4.1416,2.5762) circle (1.6pt);
\draw[cblue,thick] (4.8330,2.5367) -- (4.8330,2.8066);
\draw[cblue,thick] (4.7630,2.5367) -- (4.9030,2.5367);
\draw[cblue,thick] (4.7630,2.8066) -- (4.9030,2.8066);
\fill[cblue] (4.8330,2.6716) circle (1.6pt);
\draw[cblue,thick] (5.5284,2.3425) -- (5.5284,2.8100);
\draw[cblue,thick] (5.4584,2.3425) -- (5.5984,2.3425);
\draw[cblue,thick] (5.4584,2.8100) -- (5.5984,2.8100);
\fill[cblue] (5.5284,2.5762) circle (1.6pt);
\draw[cblue,thick] (6.2187,2.4577) -- (6.2187,3.2673);
\draw[cblue,thick] (6.1487,2.4577) -- (6.2887,2.4577);
\draw[cblue,thick] (6.1487,3.2673) -- (6.2887,3.2673);
\fill[cblue] (6.2187,2.8625) circle (1.6pt);
\draw[cblue,thick] (6.9093,2.6288) -- (6.9093,3.0962);
\draw[cblue,thick] (6.8393,2.6288) -- (6.9793,2.6288);
\draw[cblue,thick] (6.8393,3.0962) -- (6.9793,3.0962);
\fill[cblue] (6.9093,2.8625) circle (1.6pt);
\draw[cblue,thick] (7.6000,2.8625) -- (7.6000,3.1487);
\draw[cblue,thick] (7.5300,2.8625) -- (7.6700,2.8625);
\draw[cblue,thick] (7.5300,3.1487) -- (7.6700,3.1487);
\fill[cblue] (7.6000,3.0056) circle (1.6pt);
\draw[->,color=black!60] (0,0) -- (7.8999999999999995,0) node[below] {$n$};
\draw[->,color=black!60] (0,0) -- (0,4.7) node[left] {mean Newton steps};
\node[below,color=black!60] at (0.0000,0) {10};
\node[below,color=black!60] at (1.1439,0) {20};
\node[below,color=black!60] at (2.6561,0) {50};
\node[below,color=black!60] at (3.8000,0) {100};
\node[below,color=black!60] at (4.9439,0) {200};
\node[below,color=black!60] at (6.4561,0) {500};
\node[below,color=black!60] at (7.6000,0) {1000};
\node[left,color=black!60] at (0,1.4312) {5};
\node[left,color=black!60] at (0,2.8625) {10};
\node[left,color=black!60] at (0,4.2937) {15};
\end{tikzpicture}基于自和谐的复杂度分析
本节把障碍方法(对普通不等式)的复杂度分析推广到广义不等式问题。外层迭代次数已经知道是
外加一次初始中心点步。剩下的是估计每个中心点步所需的 Newton 步数,这要用到自和谐函数的 Newton 方法复杂度理论。为简单起见,不计初始中心点的代价。
做与标量情形相同的假设:
例子:二阶锥规划。函数
自和谐(见自和谐一章的例子),因此 SOCP 的对数障碍函数满足闭性与自和谐性假设。
例子:半定规划。用
(变量
与标量情形完全一样,可以证明
因此当自和谐与有界下水平集条件成立时,每个中心点步所需 Newton 步数不超过
与普通不等式的障碍方法完全一样。一旦建立了这个基本界,广义不等式问题的复杂度分析与普通不等式情形完全相同,唯一的例外是:
对偶锥的广义对数
我们将用共轭函数证明上述界。设
该函数是凸的,定义域为
由上式可以得到不等式
它对任意