当前位置: 首页 > 知识库问答 >
问题:

用电晕限制优化活动座位分配

西门洛城
2023-03-14

问题:给定一组注册组,每个注册组的人数不同(1-7),以及一组座位组(不可变,至少相距2m),座位数不同于1-4个,我想找到人组对座位组的最佳分配:

  • 人组可以分为几个座位组(但最好不是)
  • 不同的人组不能共享座位组
  • (可选)分配应使“浪费”的座位数最小化,即使空座位组中的座位数最大化
  • (理想情况下,它应该在Google Apps脚本中运行,因此内存和计算复杂性应该尽可能小)

第一次尝试:我对决策问题感兴趣(可行吗?)以及优化问题(参见可选优化函数)。我把它模拟成一个SAT问题,但这没有找到最优解。

    null

正如您所看到的,与标准问题相比,约束和优化是颠倒的。所以我的问题是:我是在正确的轨道上,还是你会换一种方式?如果是正确的,这个优化问题有名字吗?

共有1个答案

盛辰沛
2023-03-14

您可以将其视为整数线性规划问题,定义如下:

let P = the set of people groups, people group i consists of p_i people;
let T = the set of tables, table j has t_j places;
let x_ij be 1 if people from people group i are placed at table j, 0 otherwise
let M be a large penalty factor for empty seats
let N be a large penalty factor for splitting groups

     // # of free spaces = # unavailable - # occupied
     // every time a group uses more than one table,
     // a penalty of N * (#tables - 1) is incurred
min  M * [SUM_j(SUM_i[x_ij] * t_j) - SUM_i(p_i)] + N * SUM_i[(SUM_j(x_ij) - 1)]

     // at most one group per table
s.t. SUM_i(x_ij) <= 1 for all j

     // every group has enough seats
     SUM_j(x_ij * t_j) = p_i for all i

     0 <= x_ij <= 1

虽然这将空座位的数量减至最低,但并没有将使用的桌子数量减至最低,也没有将接纳的团体数量减至最大。如果你想这样做,你可以扩展目标函数,为每一个被拒绝的群体增加一个惩罚。

ILPs是NP难的,所以如果没有正确的求解器,它可能不可能运行谷歌应用程序。我对那件事没有经验,所以恐怕我帮不了你。但是有一些方法可以减少你的搜索空间。

 类似资料:
  • 是否可以限制siteminder SP上受保护资源上的活动用户数?我想确保受保护的资源被有限数量的活动用户使用,比如说n。 谢谢Andrea

  • 我正在使用谷歌抽屉布局。 当一个项目被点击时,抽屉被顺利关闭,并且会启动一个。将这些活动变成不是一个选项。正因为如此,启动一个活动然后关闭抽屉也不是一个选项。关闭抽屉和同时启动活动会使关闭动画结巴。 鉴于我想先顺利关闭它,然后启动活动,我对用户单击抽屉项目和他们看到他们想要去的活动之间的延迟存在问题。 这就是每个项目的单击侦听器的外观。 我的活动也是DrawerListener,它的方法如下所示:

  • 创建光晕 光晕工具创建具有明亮的中心、光晕和射线及光环的光晕对象。使用此工具可创建类似照片中镜头光晕的效果。 “光晕 ”包括中央手柄和末端手柄。使用手柄定位光晕及其光环。中央手柄是光晕的明亮中心 -光晕路径从该点开始。 光晕组件 A. 中央手柄 B. 末端手柄 C. 射线(为清晰起见显示为黑色) D. “光晕 ” E. “光环 ” 另请参阅 第 18 页的 “绘图工具库 ” 创建默认光晕 1选择光

  • 本文向大家介绍Android App应用启动分析与优化,包括了Android App应用启动分析与优化的使用技巧和注意事项,需要的朋友参考一下 app的启动方式:  1.)冷启动  当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动。冷启动因为系统会重新创建一个新的进程分配给它,所以会先创建和初始化Application类,再创建和初始化Main

  • 我有一个要求,即我使用Spring批处理从SQL DB中读取大量行(数千行),并在编写Kafka主题之前调用REST服务来丰富内容。 使用Spring Reactive webClient时,如何限制活动非阻塞服务调用的数量?在我使用Spring Batch读取数据后,我应该在循环中引入通量吗? (我理解delayElements的用法,它有不同的目的,比如当一个获取服务调用带来大量数据,你希望服

  • 本文向大家介绍Mysql优化之Zabbix分区优化,包括了Mysql优化之Zabbix分区优化的使用技巧和注意事项,需要的朋友参考一下 使用zabbix最大的瓶颈在于数据库,维护好zabbix的数据存储,告警,就能很好地应用zabbix去构建监控系统。目前zabbix的数据主要存储在history和trends的2个表中,随着时间的推移,这两个表变得非常大,性能会非常差,影响监控的使用。对MySQ