线性规划问题
线性规划问题的一般形式是:
受平等约束:
不平等约束:
框约束:
值得注意的是形式的不等式约束:
等价于不平等约束:
因此,总是以以下形式写任何不等式约束是很方便的
等式(1)-(4)描述的线性规划问题可以用矩阵形式表示为:
受限约束:
其中,
最大化某个目标函数 的问题等同于最小化 的问题,因为 的最大化问题和 的最小化问题具有相同的最优解 。 在下图1中,绘制了函数 和 的曲线图。 从这两个函数的图形可以明显看出, 的最大值是在使
问题是,
受约束,
等同于问题:
受约束,
用linprog解决线性规划问题
考虑下面问题,
受约束,
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函数将用于解决线性编程问题:
受限于,
以下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解决线性规划问题
解决二次规划问题