C++内点法求解大规模线性规划问题——对标MATLAB中linprog函数
Posted Z.Q.Feng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++内点法求解大规模线性规划问题——对标MATLAB中linprog函数相关的知识,希望对你有一定的参考价值。
C++内点法求解大规模线性规划问题——对标MATLAB中linprog函数
文章目录
项目资源链接如下:https://download.csdn.net/download/weixin_46584887/86406561
1. 项目场景
对于如下大规模线性规划问题:
min c 1 x 1 + c 2 x 2 + ⋯ + c n x n s.t. a 11 x 1 + a 12 x 2 + ⋯ + a 1 n x n = b 1 a 21 x 1 + a 22 x 2 + ⋯ + a 2 n x n = b 2 … a m 1 x 1 + a m 2 x 2 + ⋯ + a m n x n = b m x 1 , x 2 , … , x n ≥ 0 \\beginarrayrl \\min\\ \\ &c_1x_1+c_2x_2+\\dots+c_nx_n\\\\ \\textrms.t.\\ \\ &a_11x_1+a_12x_2+\\dots+a_1nx_n=b_1\\\\ &a_21x_1+a_22x_2+\\dots+a_2nx_n=b_2\\\\ &\\dots\\\\ &a_m1x_1+a_m2x_2+\\dots+a_mnx_n=b_m\\\\ &x_1,x_2,\\dots,x_n\\ge0 \\endarray min s.t. c1x1+c2x2+⋯+cnxna11x1+a12x2+⋯+a1nxn=b1a21x1+a22x2+⋯+a2nxn=b2…am1x1+am2x2+⋯+amnxn=bmx1,x2,…,xn≥0
或者写成如下形式:
min c x s.t. A x = b x ≽ 0 \\min\\ \\bfcx\\ \\ \\textrms.t.\\ \\left\\\\beginarrayl\\bf Ax=b\\\\ \\bf x\\succcurlyeq 0\\\\ \\endarray\\right. min cx s.t. Ax=bx≽0
并且 A ∈ R m × n , x ∈ R n × 1 , b ∈ R m × 1 \\bfA\\in R_m\\times n,x\\in R_n\\times 1,b\\in R_m\\times 1 A∈Rm×n,x∈Rn×1,b∈Rm×1.
2. 约束的规范化
-
对于缺乏非负约束的变量 x i x_i xi,我们做出如下转化 :
-
x i = x i 1 − x i 2 x_i=x_i1-x_i2 xi=xi1−xi2
-
x i 1 ≥ 0 , x i 2 ≥ 0 x_i1\\ge0,x_i2\\ge0 xi1≥0,xi2≥0
-
-
对于不等式约束,我们也需要将其
松弛
为等式约束:-
∑ j = 0 n a i j x j ≤ b i \\sum_j=0^na_ijx_j\\le b_i ∑j=0naijxj≤bi 或者 ∑ j = 0 n a i j x j ≥ b i \\sum_j=0^na_ijx_j\\ge b_i ∑j=0naijxj≥bi
-
x n + i ± ∑ j = 0 n a i j x j = b i , x n + i ≥ 0 x_n+i\\pm\\sum_j=0^na_ijx_j=b_i, x_n+i\\ge 0 xn+i±∑j=0naijxj=bi,xn+i≥0
-
3. 输入格式
代码从文本文件中读取数据(data.txt
):
- 该文本文件的第一行包含两个整数,
m
andn
, 分别代表约束个数与变量个数 - 第二行的 n 个元素代表目标函数中变量前的系数 c i c_i ci
- 接下来 m 行每行包括 n + 1 个元素, 每行的前 n 个元素代表变量前的系数 a i j a_ij aij,,最后一个元素代表 b i b_i bi
举个例子,对于如下线性规划问题:
max
5
x
1
+
10
x
2
s.t.
8
x
1
+
8
x
2
≤
160
以上是关于C++内点法求解大规模线性规划问题——对标MATLAB中linprog函数的主要内容,如果未能解决你的问题,请参考以下文章 C++内点法求解大规模线性规划问题——对标MATLAB中linprog函数 C++内点法求解大规模线性规划问题——对标MATLAB中linprog函数 线性规划中的单纯形法与内点法(原理步骤以及matlab实现) 有效集法(Active Set),内点法(Interior-Point)及序列二次规划(SQP)法