Python线性规划实践

本文介绍了如何使用scipy和pulp两个Python库解决线性规划问题。示例中展示了如何定义目标函数和不等式约束,并转换成最小化问题来求解最大值。此外,还提供了Pulp的代码示例,利用LpVariable和LpProblem进行建模,以直观和简洁的方式处理约束和目标函数。
摘要由CSDN通过智能技术生成

[备忘录]

  • 题目是这个:
    在这里插入图片描述

写出线性规划式子

在这里插入图片描述

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)

  • 结果是:
  • 在这里插入图片描述
  • 这个写起来舒服一点
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

椰子奶糖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值