集合分区问题

本文根据PuLP文档翻译而来,原文请参考
https://pythonhosted.org/PuLP/CaseStudies/a_set_partitioning_problem.html

集合分区问题


集合分区问题确定如何将一个集合(S)中的项目划分为更小的子集。S中的所有项目必须包含在一个且仅包含一个分区中。相关问题是:

  • 集合分包- 所有项目必须包含在零个或一个分区中;
  • 集合覆盖 - 所有项目必须至少包含在一个分区中。

在这个案例研究中,婚礼策划师必须确定婚礼的客人座位分配。为了模拟这个问题,桌子被建模为分区,邀请参加婚礼的嘉宾被建模为S的元素。婚礼策划者希望最大化所有桌子的总幸福感。
这里写图片描述

可以通过显式枚举每个可能的子集来建模集合划分问题。虽然这种方法确实变得难以处理大量项目(不使用列生成),但它确实具有以下优点:分区的目标函数系数可以是非线性表达式(如幸福),并且仍然可以解决此问题使用线性编程。

首先,我们使用allcombinations()生成所有可能的桌座位列表。

#create list of all possible tables
possible_tables = [tuple(c) for c in pulp.allcombinations(guests, max_table_size)]

然后我们创建

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值