如何写出最大化优化问题的KKT最优条件

1.引言

书本上通常是给出最小化优化问题,KKT条件的表达形式。例如,在《凸优化》书籍1中,考虑的是最小化问题的标准形式,建模形式如下所示:
m i n f 0 ( x ) s . t . f i ( x ) ≤ 0 : λ i , i = 1 , ⋯   , m h i ( x ) = 0 : μ i , i = 1 , ⋯   , p x ∈ R n (1) \begin{aligned} min \quad &f_0(x) \\ s.t. \quad &f_i(x) \le 0 : \lambda_i, i=1,\cdots,m \\ &h_i(x) = 0 : \mu_i,i=1,\cdots,p \\ &x \in R^n \end{aligned} \tag{1} mins.t.f0(x)fi(x)0:λi,i=1,,mhi(x)=0:μi,i=1,,pxRn(1)
该优化问题的拉格朗日函数为:
L ( x , λ , μ ) = f 0 ( x ) + ∑ i = 1 m λ i f i ( x ) + ∑ i = 1 p μ i h i ( x ) (2) L(x,\lambda,\mu)=f_0(x)+\sum_{i=1}^{m}\lambda_if_i(x)+\sum_{i=1}^{p}\mu_ih_i(x)\tag{2} L(x,λ,μ)=f0(x)+i=1mλifi(x)+i=1pμihi(x)(2)
由此,凸问题的KKT条件如下所示:
f i ( x ~ ) ≤ 0 , i = 1 , ⋯   , m h i ( x ~ ) = 0 , i = 1 , ⋯   , p λ i ~ ≥ 0 , i = 1 , ⋯   , m λ i ~ f i ( x ~ ) = 0 , i = 1 , ⋯   , m ∇ f 0 ( x ~ ) + ∑ i = 1 m λ ~ ∇ f i ( x ~ ) + ∑ i = 1 p μ ~ i ∇ h i ( x ~ ) = 0 , (3) \begin{aligned} f_i(\tilde{x}) \le 0&, \quad i=1,\cdots,m \\ h_i(\tilde{x})=0& , \quad i=1,\cdots,p \\ \tilde{\lambda_i} \ge 0& , \quad i=1,\cdots,m \\ \tilde{\lambda_i}f_i(\tilde{x})=0&,\quad i=1,\cdots,m \\ \nabla f_0(\tilde{x}) + \sum^{m}_{i=1} \tilde{\lambda}\nabla f_i(\tilde{x})+\sum^p_{i=1}\tilde{\mu}_i\nabla h_i(\tilde{x})=0 &, \end{aligned} \tag{3} fi(x~)0hi(x~)=0λi~0λi~fi(x~)=0f0(x~)+i=1mλ~fi(x~)+i=1pμ~ihi(x~)=0,i=1,,m,i=1,,p,i=1,,m,i=1,,m,(3)
前三项满足原对偶约束条件,第四项满足互补松弛约束,第五项拉格朗日函数在 x ~ \tilde{x} x~处导数为零。该书籍提出,当原问题是凸问题时,满足KKT条件的点就是原问题和对偶问题的最优解。变量上标上波浪号,意思就是问题的最优解。

2.模型与方法

基于引言中所提出的模型与方法,接下来分析最大化问题的KKT条件该如何撰写。首先针对一个最大化优化问题,建立模型如下所示:
m a x g 0 ( x ) s . t . f i ( x ) ≤ 0 : λ i , i = 1 , ⋯   , m h i ( x ) = 0 : μ i , i = 1 , ⋯   , p x ∈ R n (4) \begin{aligned} max \quad &g_0(x) \\ s.t. \quad &f_i(x) \le 0 : \lambda_i, i=1,\cdots,m \\ &h_i(x) = 0 : \mu_i,i=1,\cdots,p \\ &x \in R^n \end{aligned} \tag{4} maxs.t.g0(x)fi(x)0:λi,i=1,,mhi(x)=0:μi,i=1,,pxRn(4)
g 0 ( x ) g_0(x) g0(x)最大的问题,即求 − g 0 ( x ) -g_0(x) g0(x)最小的问题,因此上述问题进行下列等效变换:
m i n − g 0 ( x ) s . t . f i ( x ) ≤ 0 : λ i , i = 1 , ⋯   , m h i ( x ) = 0 : μ i , i = 1 , ⋯   , p x ∈ R n (5) \begin{aligned} min \quad &-g_0(x) \\ s.t. \quad &f_i(x) \le 0 : \lambda_i, i=1,\cdots,m \\ &h_i(x) = 0 : \mu_i,i=1,\cdots,p \\ &x \in R^n \end{aligned} \tag{5} mins.t.g0(x)fi(x)0:λi,i=1,,mhi(x)=0:μi,i=1,,pxRn(5)
此时,拉格朗日函数表示为:
L ( x , λ , μ ) = − g 0 ( x ) + ∑ i = 1 m λ i f i ( x ) + ∑ i = 1 p μ i h i ( x ) (6) L(x,\lambda,\mu)=-g_0(x)+\sum_{i=1}^{m}\lambda_if_i(x)+\sum_{i=1}^{p}\mu_ih_i(x)\tag{6} L(x,λ,μ)=g0(x)+i=1mλifi(x)+i=1pμihi(x)(6)
因此,该最大化问题的拉格朗日函数为:
f i ( x ~ ) ≤ 0 , i = 1 , ⋯   , m h i ( x ~ ) = 0 , i = 1 , ⋯   , p λ i ~ ≥ 0 , i = 1 , ⋯   , m λ i ~ f i ( x ~ ) = 0 , i = 1 , ⋯   , m − ∇ g 0 ( x ~ ) + ∑ i = 1 m λ ~ ∇ f i ( x ~ ) + ∑ i = 1 p μ ~ i ∇ h i ( x ~ ) = 0 , (7) \begin{aligned} f_i(\tilde{x}) \le 0&, \quad i=1,\cdots,m \\ h_i(\tilde{x})=0& , \quad i=1,\cdots,p \\ \tilde{\lambda_i} \ge 0& , \quad i=1,\cdots,m \\ \tilde{\lambda_i}f_i(\tilde{x})=0&,\quad i=1,\cdots,m \\ -\nabla g_0(\tilde{x}) + \sum^{m}_{i=1} \tilde{\lambda}\nabla f_i(\tilde{x})+\sum^p_{i=1}\tilde{\mu}_i\nabla h_i(\tilde{x})=0 &, \end{aligned} \tag{7} fi(x~)0hi(x~)=0λi~0λi~fi(x~)=0g0(x~)+i=1mλ~fi(x~)+i=1pμ~ihi(x~)=0,i=1,,m,i=1,,p,i=1,,m,i=1,,m,(7)

3.程序验证

撰写MATLAB程序,对结果进行数值上的验证。首先,构造一个最大优化问题:
m a x 2 x 1 + x 2 s . t . x 1 + x 2 ≤ 5 : λ x 1 + 2 x 2 + 5 = 0 : π (8) \begin{aligned} max \quad &2x_1+x_2 \\ s.t. \quad &x_1+x_2 \le 5:\lambda \\ &x_1+2x_2+5=0 : \pi \end{aligned} \tag{8} maxs.t.2x1+x2x1+x25:λx1+2x2+5=0:π(8)
编写程序(Yalmip+Gurobi)进行计算(当然也能手算):

%% data
c = [2, 1]';
A = [1, 1]';
B = 5;
E = [1, 2]';
F = -5;

%% model
% varialble
x = sdpvar(2, 1, 'full');
% objective
obj = c'*x;
% constraint
constraints = [A'*x <= 5, E'*x == F];

%% solution
options = sdpsettings('solver', 'gurobi','verbose',2);
solution = optimize(constraints, -obj, options); 
value(x);

得到结果 x 1 = 15 , x 2 = − 10 x_1=15, x_2 = -10 x1=15,x2=10
同时,按照上述方法写出该模型的KKT条件,如下所示:
− 2 + λ + π = 0 − 1 + λ + 2 π = 0 λ ≥ 0 x 1 + x 2 ≤ 5 x 1 + 2 x 2 + 5 = 0 λ ( x 1 + x 2 − 5 ) = 0 (9) \begin{aligned} -2+\lambda+\pi=&0 \\ -1+\lambda+2\pi=&0\\ \lambda \ge &0 \\ x_1+x_2 \le &5\\ x_1+2x_2+5=&0 \\ \lambda (x_1+x_2-5)=&0 \end{aligned} \tag{9} 2+λ+π=1+λ+2π=λx1+x2x1+2x2+5=λ(x1+x25)=000500(9)
首先需要列出朗格朗日函数,这里比较简单就不列出了。可以算出 π = − 1 , λ = 3 , x 1 = 15 , x 2 = − 10 \pi=-1,\lambda=3,x_1=15, x_2 = -10 π=1,λ=3,x1=15,x2=10,与问题原来的最优解相同。

4.总结

本文撰写了“如何写出最大化优化问题的KKT最优条件”的思路,并设计案例进行了数据上的验证。若有问题,还请批评指正。

5.参考文献


  1. Stephen Boyd, Lieven Vandenberghe. Convex Optimization. ↩︎

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿J量化

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值