赞
踩
线性规划问题的一般形式是:
min α 1 x 1 + α 2 x 2 + ⋯ + α n x n ( 1 ) \min \boldsymbol{\alpha }_1\boldsymbol{x}_1+\boldsymbol{\alpha }_2\boldsymbol{x}_2+\cdots +\boldsymbol{\alpha }_{\boldsymbol{n}}\boldsymbol{x}_{\boldsymbol{n}}\,\, \left( 1 \right) minα1x1+α2x2+⋯+αnxn(1)
受平等约束:
不平等约束:
框约束:
x 1 ∈ ( X 1 min , X 1 max ) , ⋯ , x n ∈ ( X n min , X n max ) ( 4 ) \boldsymbol{x}_1\in \left( \boldsymbol{X}_{1}^{\min},\boldsymbol{X}_{1}^{\max} \right) ,\cdots ,\boldsymbol{x}_{\boldsymbol{n}}\in \left( \boldsymbol{X}_{\boldsymbol{n}}^{\min},\boldsymbol{X}_{\boldsymbol{n}}^{\max} \right) \,\, \left( 4 \right) x1∈(X1min,X1max),⋯,xn∈(Xnmin,Xnmax)(4)
值得注意的是形式的不等式约束:
∑ j = 1 n β j x j ⩾ γ j \sum_{\boldsymbol{j}=1}^{\boldsymbol{n}}{\boldsymbol{\beta }_{\boldsymbol{j}}\boldsymbol{x}_{\boldsymbol{j}}\geqslant \boldsymbol{\gamma }_{\boldsymbol{j}}} j=1∑nβjxj⩾γj
等价于不平等约束:
− ∑ j = 1 n β j x j ⩽ − γ j -\sum_{\boldsymbol{j}=1}^{\boldsymbol{n}}{\boldsymbol{\beta }_{\boldsymbol{j}}\boldsymbol{x}_{\boldsymbol{j}}\leqslant -\boldsymbol{\gamma }_{\boldsymbol{j}}} −j=1∑nβjxj⩽−γj
因此,总是以以下形式写任何不等式约束是很方便的
L H S ⩽ R H S \boldsymbol{LHS}\leqslant \boldsymbol{RHS} LHS⩽RHS
等式(1)-(4)描述的线性规划问题可以用矩阵形式表示为:
min α T x \min \boldsymbol{\alpha }^{\boldsymbol{T}}\boldsymbol{x} minαTx
受限约束:
A x = b C x ⩽ d x ∈ X \boldsymbol{Ax}=\boldsymbol{b}\\\boldsymbol{Cx}\leqslant \boldsymbol{d}\\\boldsymbol{x}\in \boldsymbol{X} Ax=bCx⩽dx∈X
其中,
A
=
[
a
11
a
12
⋯
a
1
n
a
21
a
22
⋯
a
2
n
⋮
⋮
⋮
⋮
a
m
1
a
m
s
⋯
a
m
n
]
,
x
=
[
x
1
x
2
⋮
x
n
]
,
b
=
[
b
1
b
2
⋮
b
m
]
,
C
=
[
c
11
c
12
⋯
c
1
n
c
21
c
22
⋯
c
2
n
⋮
⋮
⋱
⋮
c
l
1
c
l
s
⋯
c
ln
]
,
d
=
[
d
1
d
2
⋮
d
l
]
,
X
=
[
(
X
1
min
,
X
1
max
)
(
X
2
min
,
X
2
max
)
⋮
(
X
n
min
,
X
n
max
)
]
\boldsymbol{A}=\left[
最大化某个目标函数 f ( x ) \boldsymbol{f}\left( \boldsymbol{x} \right) f(x) 的问题等同于最小化 − f ( x ) -\boldsymbol{f}\left( \boldsymbol{x} \right) −f(x) 的问题,因为 f ( x ) \boldsymbol{f}\left( \boldsymbol{x} \right) f(x) 的最大化问题和 − f ( x ) -\boldsymbol{f}\left( \boldsymbol{x} \right) −f(x) 的最小化问题具有相同的最优解 x o p t \boldsymbol{x}^{\boldsymbol{opt}} xopt 。 在下图1中,绘制了函数 f ( x ) = e − ( x − 0.5 ) sin ( π x 2 ) \boldsymbol{f}\left( \boldsymbol{x} \right) =\boldsymbol{e}^{-\left( \boldsymbol{x}-0.5 \right)}\sin \left( \frac{\boldsymbol{\pi x}}{2} \right) f(x)=e−(x−0.5)sin(2πx) 和 − f ( x ) -\boldsymbol{f}\left( \boldsymbol{x} \right) −f(x) 的曲线图。 从这两个函数的图形可以明显看出, f ( x ) \boldsymbol{f}\left( \boldsymbol{x} \right) f(x) 的最大值是在使 − f ( x ) -\boldsymbol{f}\left( \boldsymbol{x} \right) −f(x) 最小的同一点获得的。
问题是,
max α T x \max \boldsymbol{\alpha }^{\boldsymbol{T}}\boldsymbol{x} maxαTx
受约束,
A x = b C x ⩽ d x ∈ X \boldsymbol{Ax}=\boldsymbol{b}\\\boldsymbol{Cx}\leqslant \boldsymbol{d}\\\boldsymbol{x}\in \boldsymbol{X} Ax=bCx⩽dx∈X
等同于问题:
min β T x \min \boldsymbol{\beta }^{\boldsymbol{T}}\boldsymbol{x} minβTx
受约束,
A x = b C x ⩽ d x ∈ X \boldsymbol{Ax}=\boldsymbol{b}\\\boldsymbol{Cx}\leqslant \boldsymbol{d}\\\boldsymbol{x}\in \boldsymbol{X} Ax=bCx⩽dx∈X
( β = − α ) \left( \boldsymbol{\beta }=-\boldsymbol{\alpha } \right) (β=−α) 而没有进一步改变相等性或不平等性约束。
考虑下面问题,
min x ∈ R n α T x \underset{\boldsymbol{x}\in \mathbb{R}^{\boldsymbol{n}}}{\min}\boldsymbol{\alpha }^{\boldsymbol{T}}\boldsymbol{x} x∈RnminαTx
受约束,
A x = b , C x ⩽ d , l b ⩽ x ⩽ u b \boldsymbol{Ax}=\boldsymbol{b},\\\boldsymbol{Cx}\leqslant \boldsymbol{d},\\\boldsymbol{lb}\leqslant \boldsymbol{x}\leqslant \boldsymbol{ub} Ax=b,Cx⩽d,lb⩽x⩽ub
MATLAB函数linprog可用于解决线性编程问题。 它的形式为:
[xopt, fval] = linprog(objfun, C, d, A, b, lb, ub)
其中x0是初始起点。 如果问题不包含上下限,则形式为:
[xopt, fval] = linprog(objfun, C, d, A, b)
如果问题不包含相等约束,则将A和b替换为空方括号[]。 形式将是:
[xopt, fval] = linprog(objfun, C, d, [], [], lb, ub)
为了说明如何使用函数linprog,请考虑以下示例:
示例1在本例中,MATLAB的linprog函数将用于解决线性编程问题:
max 3 x 1 + x 2 + 2 x 3 \max 3\boldsymbol{x}_1+\boldsymbol{x}_2+2\boldsymbol{x}_3 max3x1+x2+2x3
受限于,
3 x 1 + x 2 ⩽ 40 x 1 + 2 x 3 ⩽ 60 x 2 + 2 x 3 ⩽ 60 x 1 ⩾ 0 , x 2 ⩾ 0 , x 3 ⩾ 0 3\boldsymbol{x}_1+\boldsymbol{x}_2\leqslant 40\\\boldsymbol{x}_1+2\boldsymbol{x}_3\leqslant 60\\\boldsymbol{x}_2+2\boldsymbol{x}_3\leqslant 60\\\boldsymbol{x}_1\geqslant 0,\boldsymbol{x}_2\geqslant 0,\boldsymbol{x}_3\geqslant 0 3x1+x2⩽40x1+2x3⩽60x2+2x3⩽60x1⩾0,x2⩾0,x3⩾0
以下MATLAB指令用于查找最佳解决方案:
>> objfun = [-3; -1; -2] ;
>> C = [3, 1, 0; 1, 0, 2; 0, 1, 2] ;
>> d = [40; 60; 60] ;
>> lb = [0; 0; 0] ;
>> [xopt, fval] = linprog(objfun, C, d, [], [], lb, [])
Optimal solution found.
xopt =
10
10
25
fval =
-90
默认情况下,MATLAB linprog函数使用双单工算法。 可以通过优化选项结构来更改算法的选择。 例如,切换到内点求解器并求解示例1,可以使用以下指令。
>> Options = optimoptions(’linprog’, ’Algorith’, ’interior-point’); >> [xopt, fval] = linprog(objfun, C, d, [], [], lb, [], Options) Minimum found that satisfies the constraints. Optimization completed because the objective function is nondecreasing in feasible directions, to within the selected value of the function tolerance, and constraints are satisfied to within the selected value of the constraint tolerance. xopt = 10.0000 10.0000 25.0000 fval = -90.0000 >> Options = optimoptions(’linprog’, ’Algorith’, ’interior-point-legacy’, ’Disp’, ’Iter’) ; >> [xopt, fval] = linprog(objfun, C, d, [], [], lb, [], Options) Optimization terminated. xopt = 10.0000 10.0000 25.0000 fval = -90.0000
Python在scipy.optimize库中还有一个函数linprog。 要使用linprog函数,必须从scipy的优化库中导入。 可以按照以下步骤进行:
In [1]: from scipy.optimize import linprog
Python函数linprog形式接近MATLAB的linporg形式。 其语法为:
OptSol = linprog(objfun, A_ub = C, b_ub = d, A_eq = A, b_eq = b,
bounds = bnds,\ method=’optmethod’, options = optoptions)
要使用Python解决示示例1,可以使用以下Python指令:
linprog函数的默认求解器是内部点方法。 但是该方法还有其他两个选项,即单纯形法和修订的单纯形法。 它们的用法如下:
详情参阅 - 亚图跨际
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。