什么样的算法最适合优化歌剧院的座位分配?

What kind of algorithm is well suited for optimizing seat allocation in opera house?

所以我有一个有 10 行和 10 列座位的歌剧院(总计:100)。每个座位都分配了一个偏好值 Aij。如果该组未在同一行获得座位,则偏好值减半。例如:如果歌剧院预订5人,顶排只能容纳2人,下排只能容纳3人,那么每个座位的偏好值实际上减半。共有 n 个预订 'n' > 100 个座位。最大化客户偏好(n * Aij)的最佳方法是什么。如果可以通过线性规划来完成,方程式应该如何。

我认为将其建模为 MIP 并非易事。

我尝试使用主二进制变量 x(i,j,g,r),其中 (i,j) 是分配给组 g 的座位的行和列。集合r{singlerow,multiplerows}表示该组是否坐在同一排。

不确定这是否是一个特别好的公式,但它似乎有效。以下是我使用的方程式:

我假设有许多组 g,每个组都有一个大小。一个团体获得它需要的所有席位,或者它没有获得任何席位。 我怀疑约束编程方法可能更容易。

结论:可以用MIP公式来完成,但是有点麻烦。