[备忘录]
- 题目是这个:
写出线性规划式子
scipy
import numpy as np
from scipy import optimize as op
# 给出变量取值范围
x1=(0,None)
x2=(0,None)
x3=(0,None)
c=np.array([-10,-8,-16]) # 目标函数系数,3x1列向量
A_ub=np.array([[3,3,2],[4,3,7]]) # 不等式约束系数A,2x3维矩阵
B_ub=np.array([200,300]) # 不等式约束系数b, 2x1维列向量
res=op.linprog(c,A_ub,B_ub,bounds=(x1,x2,x3)) #调用函数进行求解
print(res)
- 结果是:
- 这里注意下就是spicy默认是取min,故此求max的任务需要先转换成min,然后不等式约束默认为 ≤ \leq ≤,这个也要转换
- 由于这里只有不等式约束,以防万一以后用到等式约束,看了下贴一下源码,两对参数分别是不等式和等式的左右两边
plup
#-*- coding:utf-8 -*-
from pulp import *
Ingredients = ['A', 'B', 'C']
profits = {'A': 10, 'B': 8, 'C': 16}
Nickel = {'A': 3, 'B': 3, 'C': 2}
Aluminum = {'A': 4, 'B': 3, 'C': 7}
#创建问题实例,求最大极值
prob = LpProblem("The Whiskas Problem", LpMaximize)
#构建Lp变量字典,变量名以Ingr开头,如Ingr_CHICKEN,下界是0
ingredient_vars = LpVariable.dicts("Ingr",
Ingredients,
lowBound=0,
upBound=None)
#添加目标方程
prob += lpSum([profits[i] * ingredient_vars[i] for i in Ingredients])
#添加约束条件
prob += lpSum([Nickel[i] * ingredient_vars[i] for i in Ingredients]) <= 200
prob += lpSum([Aluminum[i] * ingredient_vars[i] for i in Ingredients]) <= 300
#求解
prob.solve()
#查看解的状态
print("Status:", LpStatus[prob.status])
# #查看解
for v in prob.variables():
print(v.name.split('_')[-1], "=", v.varValue)
- 结果是:
- 这个写起来舒服一点