线性规划模型的一般形式
要素:
(1)目标函数; (2)约束条件; (3)决策变量
一般形式:
决策变量为
转化为Python输入的标准形式为
其中的要素均为矩阵形式。
用Python解决线性规划问题
1、使用scipy的linprog()
linprog(c, A_ub, b_ub, A_eq, b_eq, bounds)
from scipy.optimize import linprog
'''
min z = C't X c就是z中x的系数矩阵
s.t. :
A·X<=b 关于不等号的约束
Aeq·X = beq 关于等号的约束
Lb <= X <= Ub 决策向量的下界向量和上界向量
linprog(c, A, b, Aeq, beq, bounds) 除bounds是元组,其他的都是数组 '''
'''
例子:
min z = -x1+4x2
s.t.:
-3x1+2x2<=6
x1+2x2<=4
x2>=-3'''
c = [-1, 4]
A = [[-3, 2], [1, 2]]
b = [6, 4]
bounds = ((None, None), (-3, None))
res = linprog(c, A, b, None, None, bounds) # 函数返回值是一个字典
print(" 等式约束的残差(名义上为零):", res.con,
"\n 目标函数的最小值:", res.fun,
"\n 算法退出状态的字符串描述符:", res.message,
"\n 当前的迭代数量:", res.nit,
"\n 不等式约束的松弛值(名义上为正值):", res.slack,
"\n 表示算法退出状态的整数:", res.status,
"\n 算法是否成功找到最佳解决方案:", res.success,
"\n在满足约束的情况下将目标函数最小化的决策变量的值:", res.x)
print(res)
函数返回值是一个字典:
等式约束的残差(名义上为零):
res.con
目标函数的最小值:
res.fun
算法退出状态的字符串描述符:,
res.message
当前的迭代数量:,
res.nit
不等式约束的松弛值(名义上为正值):,
res.slack
表示算法退出状态的整数:,
res.status
算法是否成功找到最佳解决方案:,
res.success
在满足约束的情况下将目标函数最小化的决策变量的值:
res.x
若求最大值,可通过-z得到求最小值的问题,如
max z =
min w =