ITPub博客

首页 > 数据库 > 数据库开发技术 > pulp解决混合整数规划问题

pulp解决混合整数规划问题

原创 数据库开发技术 作者:derekwh 时间:2022-03-28 23:30:12 0 删除 编辑
pulp是用来求解线性规划、整数规划等的开源包。从官网介绍来看,其也能调用常用的求解工具来解决实际问题。

投资组合问题

这是一个非常典型的混合整数规划问题,求解方式有很多。其建模思路如下:
这里用pulp求解。
#投资组合问题
import pulp   
InvestLP = pulp.LpProblem("投资组合问题", sense=pulp.LpMaximize)  # 定义问题,求最大值 最小值Minmize
x1 = pulp.LpVariable('A', cat='Binary')  # 定义 x1,A 项目
x2 = pulp.LpVariable('B', cat='Binary')  # 定义 x2,B 项目
x3 = pulp.LpVariable('C', cat='Binary')  # 定义 x3,C 项目
x4 = pulp.LpVariable('D', cat='Binary')  # 定义 x4,D 项目
x5 = pulp.LpVariable('E', cat='Binary')  # 定义 x5,E 项目
x6 = pulp.LpVariable('F', cat='Binary')  # 定义 x6,F 项目
x7 = pulp.LpVariable('G', cat='Binary')  # 定义 x7,G 项目
InvestLP += (1*x1 + 3*x2 + 2*x3 + 3*x4 + 1*x5+1.5*x6+2.8*x7)  # 设置目标函数 f(x)
InvestLP += (6*x1 + 7*x2 + 5*x3 + 8*x4 + 4*x5+7*x6+4*x7 <= 30)  # 不等式约束
InvestLP += (5*x1 + 1*x2 + 3*x3 + 3*x4 + 3*x5+4*x6+2*x7 <= 15)  # 不等式约束
InvestLP += (3*x1 + 2*x2 + 3*x3 + 1*x4 + 3*x5+3*x6+2*x7 <= 10)  # 不等式约束
InvestLP.solve()
print(InvestLP.name)  # 输出求解状态
print("求解状态:", pulp.LpStatus[InvestLP.status])  # 输出求解状态
for v in InvestLP.variables():
    print(v.name, "=", v.varValue)  # 输出每个变量的最优值
print("最大收益 =", pulp.value(InvestLP.objective))  # 输出最优解的目标函数值
思考:
1.如果项目1和项目2是打包项目,A集团认为该两个项目一起进行会有协同效应,要么全选,要么全不选。如何增加约束?
2.如果项目3和项目4是互斥项目,A集团认为这两个项目很相似,最多只能选一个。如何增加约束?
本例是一个简单的混合整数规划问题,其实解决这类问题还有很多工具可以使用。下面的工具汇总感兴趣的都可以研究研究。


原文作者:Python学习杂记;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论
央企算法工程师,微信公众号: python数智工坊

注册时间:2021-03-14

  • 博文量
    305
  • 访问量
    162379