假设我们现在面临这样一个线性规划问题:
m i n ( x 1 − x 2 ) . s . t . 10 x 1 − 7 x 2 ≥ 5 x 1 + 1 / 2 x 2 ≤ 3 x 1 ≥ 0 , x 2 ≥ 0 \begin{aligned} &min( x{_1}-x{_2} ).\\ s.t. \\ &10x{_1}-7x{_2}\ge5\\ &x{_1}+1/2x{_2}\le3\\ &x{_1}\ge0,x{_2}\ge0\\ \end{aligned} s.t.min(x1−x2).10x1−7x2≥5x1+1/2x2≤3x1≥0,x2≥0
算例原始数据来自
https://blog.csdn.net/ljl86400/article/details/83023635
如果借助matlab工具包sedumi进行计算,须按照文档中的变量约定转化为优化问题的标准形式,比较麻烦。
下面介绍一个可直接求解凸优化问题的工具,须下载matlab 工具包CVX:
http://cvxr.com/cvx/
CVX: Matlab Software for Disciplined Convex Programming
安装好以后,输入以下代码
cvx_begin
c = [1;-1];
A = [-10,7;1,1/2];
b = [-5;3];
d=length(c);
variable x_Recon(d);
minimize(c'*x_Recon)
subject to
A*x_Recon<=b;
x_Recon>=0;
cvx_end
display(x_Recon);
求解结果如下(过程可略过,请直接看最后几行):
```javascript
Calling SDPT3 4.0: 4 variables, 2 equality constraints
------------------------------------------------------------
num. of constraints = 2
dim. of linear var = 4
*******************************************************************
SDPT3: Infeasible path-following algorithms
*******************************************************************
version predcorr gam expon scale_data
NT 1 0.000 1 0
it pstep dstep pinfeas dinfeas gap prim-obj dual-obj cputime
-------------------------------------------------------------------
0|0.000|0.000|3.9e+00|1.1e+01|5.3e+02|-7.863878e-10 0.000000e+00| 0:0:00| chol 1 1
1|1.000|1.000|4.7e-06|8.3e-02|4.0e+01| 1.208121e+00 -3.722157e+01| 0:0:00| chol 1 1
2|1.000|0.920|4.8e-07|1.4e-02|3.3e+00| 1.028984e+00 -2.041728e+00| 0:0:00| chol 1 1
3|0.872|1.000|7.2e-08|8.3e-04|1.3e+00| 3.589943e-02 -1.297131e+00| 0:0:00| chol 1 1
4|1.000|0.938|1.3e-07|1.3e-04|8.0e-02|-7.151182e-02 -1.503997e-01| 0:0:00| chol 1 1
5|0.980|0.984|7.0e-09|1.0e-05|1.5e-03|-1.240079e-01 -1.254659e-01| 0:0:00| chol 1 1
6|0.989|0.989|9.9e-10|9.4e-07|1.7e-05|-1.249889e-01 -1.250012e-01| 0:0:00| chol 1 1
7|0.989|0.989|1.3e-11|1.0e-08|1.9e-07|-1.249999e-01 -1.250000e-01| 0:0:00| chol 1 1
8|0.993|1.000|9.7e-14|2.6e-12|2.9e-09|-1.250000e-01 -1.250000e-01| 0:0:00|
stop: max(relative gap, infeasibilities) < 1.49e-08
-------------------------------------------------------------------
number of iterations = 8
primal objective value = -1.24999998e-01
dual objective value = -1.25000001e-01
gap := trace(XZ) = 2.85e-09
relative gap = 2.28e-09
actual relative gap = 2.27e-09
rel. primal infeas (scaled problem) = 9.68e-14
rel. dual " " " = 2.61e-12
rel. primal infeas (unscaled problem) = 0.00e+00
rel. dual " " " = 0.00e+00
norm(X), norm(y), norm(Z) = 2.9e+00, 2.8e-01, 2.8e-01
norm(A), norm(b), norm(C) = 1.3e+01, 6.8e+00, 2.4e+00
Total CPU time (secs) = 0.21
CPU time per iteration = 0.03
termination code = 0
DIMACS: 1.1e-13 0.0e+00 3.2e-12 0.0e+00 2.3e-09 2.3e-09
-------------------------------------------------------------------
------------------------------------------------------------
Status: Solved
Optimal value (cvx_optval): -0.125
x_Recon =
1.9583
2.0833