线性规划问题

线性规划问题的一般形式是:

python 求解线性规划最优解 python解决线性规划_python

受平等约束:

不平等约束:

框约束:

python 求解线性规划最优解 python解决线性规划_python_02

值得注意的是形式的不等式约束:

python 求解线性规划最优解 python解决线性规划_matlab_03

等价于不平等约束:

python 求解线性规划最优解 python解决线性规划_线性规划_04

因此,总是以以下形式写任何不等式约束是很方便的

python 求解线性规划最优解 python解决线性规划_线性规划_05

等式(1)-(4)描述的线性规划问题可以用矩阵形式表示为:

python 求解线性规划最优解 python解决线性规划_python_06

受限约束:

python 求解线性规划最优解 python解决线性规划_python_07

其中,

python 求解线性规划最优解 python解决线性规划_matlab_08

最大化某个目标函数python 求解线性规划最优解 python解决线性规划_线性规划_09 的问题等同于最小化python 求解线性规划最优解 python解决线性规划_python 求解线性规划最优解_10 的问题,因为python 求解线性规划最优解 python解决线性规划_线性规划_09 的最大化问题和python 求解线性规划最优解 python解决线性规划_python 求解线性规划最优解_10 的最小化问题具有相同的最优解python 求解线性规划最优解 python解决线性规划_python 求解线性规划最优解_13 。 在下图1中,绘制了函数python 求解线性规划最优解 python解决线性规划_python_14python 求解线性规划最优解 python解决线性规划_python 求解线性规划最优解_10 的曲线图。 从这两个函数的图形可以明显看出,python 求解线性规划最优解 python解决线性规划_线性规划_09 的最大值是在使python 求解线性规划最优解 python解决线性规划_python 求解线性规划最优解_10

问题是,

python 求解线性规划最优解 python解决线性规划_matlab_18

受约束,

python 求解线性规划最优解 python解决线性规划_python_07

等同于问题:

python 求解线性规划最优解 python解决线性规划_matlab_20

受约束,

python 求解线性规划最优解 python解决线性规划_python_07

python 求解线性规划最优解 python解决线性规划_线性规划_22

用linprog解决线性规划问题

考虑下面问题,

python 求解线性规划最优解 python解决线性规划_线性规划_23

受约束,

python 求解线性规划最优解 python解决线性规划_python 求解线性规划最优解_24

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函数将用于解决线性编程问题:

python 求解线性规划最优解 python解决线性规划_matlab_25

受限于,

python 求解线性规划最优解 python解决线性规划_线性规划_26

以下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函数的默认求解器是内部点方法。 但是该方法还有其他两个选项,即单纯形法和修订的单纯形法。 它们的用法如下:

使用fmincon MATLAB函数解决线性规划问题

用pulp Python解决线性规划问题

用pyomo解决线性规划问题

用gekko解决线性规划问题

解决二次规划问题