python 线性规划问题(pulp库的一个实例) 1.3
2018-08-26 17:59
736 查看
版权声明:转载请告知征得同意。 https://blog.csdn.net/qq_42731466/article/details/82082767
https://pythonhosted.org/PuLP/CaseStudies/a_set_partitioning_problem.html
这次是一个整数规划的问题,引入01决策变量,在线性规划中设置01变量即,把决策变量的上下限变为01,并设定为整数
x = pulp.LpVariable.dicts('table', possible_tables, lowBound = 0,upBound = 1, cat = pulp.LpInteger)
以下欣赏代码,最关键的地方已经说明。
补充说明放在最后。
import pulp max_tables = 5 max_table_size = 4 guests = 'A B C D E F H I J K M N O P Z W'.split() def happiness(table): """ Find the happiness of the table - by calculating the maximum distance between the letters """ return abs(ord(table[0]) - ord(table[-1])) # 列表化所有的方案 possible_tables = [tuple(c) for c in pulp.allcombinations(guests, max_table_size)] # 设置变量 x = pulp.LpVariable.dicts('table', possible_tables, lowBound = 0, upBound = 1, cat = pulp.LpInteger) seating_model = pulp.LpProblem("Wedding Seating Model", pulp.LpMinimize) # x对应一种方案,a对应效益,各个方案的效益总和即为目标函数 # 效益总和 a1x1 + a2x2 + a3x3 + a4x4 seating_model += sum([happiness(table) * x[table] for table in possible_tables]) #限定决策变量的总数目 # x1+x2+x3...<= 某个值 seating_model += sum([x[table] for table in possible_tables]) <= max_tables, \ "Maximum_number_of_tables" # 每个客人只能出席一桌 # 这个语句需要留意一下 for guest in guests: seating_model += sum([x[table] for table in possible_tables if guest in table]) == 1, "Must_seat_%s"%guest seating_model.solve() print("The choosen tables are out of a total of %s:"%len(possible_tables)) for table in possible_tables: if x[table].value() == 1.0: print(table)
最后补充一下
.split()方法留意一下,字符串列表化
.allcombinations()方法
possible_tables = [tuple(c) for c in pulp.allcombinations(guests, max_table_size)]
组元化所有分配方案,两个参数,一个是基本组成,另外一个是最大长度
尝试过5035个变量的决策,用时436s,还是比较可靠的
阅读更多相关文章推荐
- java求解一个线性规划约束问题
- python 之pulp 线性规划介绍及举例
- 使用python-pymprog模块解决线性规划的问题
- 线性规划的python的pulp包
- python中关于class类中一个实例变量的引用问题
- 深入浅出数据分析:最优化-用Excel求解一个线性规划问题
- 一切从游戏开始-完整的一个python to hack 实例
- 保证程序只运行一个实例问题总结
- Python中的一个文件句柄问题
- 菜鸟学Python(6):在Linux下用C扩展Python要注意的一个问题
- Python笔记:一个二维数组引发的问题
- 一个关于Python的类覆盖的问题
- WCF热门问题编程示例(2)多个实例调用一个WCF服务操作,需要等待服务响应吗
- Python Django还是RoR,这是一个问题
- Python Cookbook 第二版 汉化版 [Recipe 1.3] 测试一个对象是否为 String-like 对象
- 同一个Socket实例第二次无法接收服务端数据!! (暂时占用一下首页,请多包涵,该问题困扰我两天了)
- WCF热门问题编程示例(2)多个实例调用一个WCF服务操作,需要等待服务响应吗
- 一个自动居中的导航条实例与相关问题 DIV+CSS
- 关于java多线程中同步的问题(两个线程访问同一个实例类的两个同步方法,会不会互相影响)
- 今天遇到一个问题才知道如果安装了命名实例 SSIS Service 需要手动更改配置文件