1、python中的scipy中提供了线性规划模块
1)模块导入
from scipy import optimize
optimize.linprog
2)模块特点说明
需要注意的是这个模块只能找到线性规划的最小值,因此,如果约束条件的不等式(变量除外)中含有“大于等于”的需要修改为“小于等于”,例如:x+y>=5,转换为-x-y<=-5;
最大化max_z=x+y,转换为最小化min_z=-x-y
最后linprog得到的是最小值,添加负号则变为最大值
3)optimize中函数curve_fit,主要基于最小二乘法实现曲线拟合,在使用过程中注意配置参数范围,便于找到最优解。
2、代码如下:
import numpy as np
from scipy import optimize
def line_progress():
# max Z=x+y
# subject to :
# (1)2y+x<=6
# (2)y+2x<=6
# (3)x>=0,y>=0
# 最大值是(1)和(2)的交点,max:Z=2+2=4
# Z=x+y : 最大化系数max_coe_z=[1,1]转化成最小化系数min_coe_z=-[1,1],添加负值
min_coe_z = - np.array([1, 1])
# 不等式中的系数(The coefficient of subject to in the inequality)
coe_st_ub = np.array([[2, 1], [1, 2]])
# 不等式中约束值(The value of subject to in the inequality)
value_st_ub = np.array([6, 6])
# 不等式中的变量(Constrained variables of inequality)
var1_st, var2_st = (0, None), (0, None)
# 优化的结果(The result of optimize)
line_result = optimize.linprog(min_coe_z, A_ub=coe_st_ub, b_ub=value_st_ub, bounds=(var1_st, var2_st))
# 如果找到最小值输出最小值,返回True
if line_result.success:
# 最小值的变量
print("线性规划最小值的变量:")
print(line_result.x)
# 最小值
print("线性规划最小值:")
print(line_result.fun)
# 最大值
print("线性规划最大值:")
print(-line_result.fun)
else:
print("找不到线性规划最小值。")
if __name__ == '__main__':
line_progress()
python中线性规划问题
于 2018-08-23 11:17:53 首次发布