Algorithm 优化学生座位安排的算法
假设我需要将n=30名学生分成2到6组,我从每个学生那里收集以下偏好数据: 学生姓名:汤姆 喜欢坐在一起:吉米,埃里克 不喜欢坐在一起:约翰、保罗、林戈、乔治 这意味着他们对全班其他学生保持中立,他们没有提到过 我如何才能最好地对许多不同/随机分组安排进行大量模拟,以确定每个安排的分数,然后通过该分数选择“最佳”分数/安排 或者,是否有其他方法可以用来计算满足所有提供的约束的解决方案 我想要一个通用方法,每年可以在不同的类大小上重用,但在每次模拟运行中,以下常量和变量适用: 常数:学生总数,学生偏好 变量:小组规模、学生分组、不同小组安排/测试迭代次数Algorithm 优化学生座位安排的算法,algorithm,optimization,grouping,simulation,mathematical-optimization,Algorithm,Optimization,Grouping,Simulation,Mathematical Optimization,假设我需要将n=30名学生分成2到6组,我从每个学生那里收集以下偏好数据: 学生姓名:汤姆 喜欢坐在一起:吉米,埃里克 不喜欢坐在一起:约翰、保罗、林戈、乔治 这意味着他们对全班其他学生保持中立,他们没有提到过 我如何才能最好地对许多不同/随机分组安排进行大量模拟,以确定每个安排的分数,然后通过该分数选择“最佳”分数/安排 或者,是否有其他方法可以用来计算满足所有提供的约束的解决方案 我想要一个通用方法,每年可以在不同的类大小上重用,但在每次模拟运行中,以下常量和变量适用: 常数:学生总数,学生
提前感谢您提供的任何帮助/建议/建议 第一种方法应该是,创建矩阵nxn,其中n是学生总数,行和列的索引是每个学生的序号,每列表示和其他学生坐在一起的偏好。使用值1=喜欢坐着,-1=相反,0=中性填充单元格。主对角线(i,i)上也要填充零 ------马克·玛丽亚·约翰·彼得 标记0 1-1 1 玛丽亚0-11 约翰-1101 彼得0 分数计算基于这些值的总和。所以ie:John喜欢和Maria坐在一起,=1,但Maria不喜欢和John坐在一起-1,结果是0。最好的结果是当两个分数(总和)为2时 因此,基于组大小,计算每个可能组合的分数。分数越高,安排越好。组合区分主对角线上的值。ie:与同一John分组的John不是有效的组合/组 在2人的小组中,最好的分数是2 在3人的小组中,最好的分数是6分 在4人的小组中,最好的分数是12分 在人数为n的小组中,最佳得分为(n-1)*n
现在,在组合/组的有序列表中,您应该首先选择得分最高的最佳元组,但要避免元组之间的学生重复。我相信您可以将其表述为一个明确的数学优化问题 定义二进制决策变量:
x(p,g) = 1 if person p is assigned to group g
0 otherwise
我用过:
我使用了28人的数据集和偏好矩阵(使用-1、+1,0个元素)。对于组,我使用了4组6和1组4。解决方案可以如下所示:
---- 80 PARAMETER solution using MIQP model
group1 group2 group3 group4 group5
aimee 1
amber-la 1
amber-le 1
andrina 1
catelyn-t 1
charlie 1
charlotte 1
cory 1
daniel 1
ellie 1
ellis 1
eve 1
grace-c 1
grace-g 1
holly 1
jack 1
jade 1
james 1
kadie 1
kieran 1
kristiana 1
lily 1
luke 1
naz 1
nibah 1
niko 1
wiki 1
zeina 1
COUNT 6 6 6 6 4
注:
- 该模型可以线性化,因此可以输入标准MIP解算器
- 我直接作为一个MIQP模型解决了这个问题(实际上,解算器将模型重新格式化为MIP)。模型在几秒钟内就解决了
- 也许我们需要添加额外的逻辑来确保一个人没有得到一个非常糟糕的任务。我们在这里只优化总和。这个总数可能会让个人得到一笔不好的交易。在模型中考虑这一点是一个有趣的练习。有一些有趣的权衡
关于最佳坐姿,您需要使用特定数据指定一个目标函数如果这更多地是关于可行性的(或多或少有一个有效的解决方案难以处理这些约束),那么坐姿解算器将很难击败(给出一个好的公式,包括对称性破坏)。如果机会渺茫,这是关于最小违反,事情可能会慢慢转向其他技术,如整数规划(潜在的二次)或(元)启发式。所描述的类似蒙特卡罗的模拟是一个很好的基本算法,但它也应该包括局部搜索和潜在的大邻域搜索。如前所述:我希望它也是NP难的。蒙特卡罗的实现非常简单,可以用于这个问题的许多变体。但它不会与更先进/更具开发性的方法竞争。如果对你来说够了,就用它。所以可能也从它开始:从简单到更复杂。例如,monte-carlo+局部搜索作为抛光~多起点搜索(+lns的几次迭代;但这通常很难实现,通常使用一些黑盒解算器,如SAT或CP),您也可以开始研究关键字婚礼座位问题。有不同的变体,许多结构是共享的。到目前为止,还没有人询问教室的拓扑结构。如果有多行,解决方案可能会有所不同(如果前面和后面以及前面和后面的对角线不计入限制)。我觉得这很重要。也许是问题的类别。我想,如果你考虑拓扑结构的话,这个问题可能会变得更简单。一个Kohonen网络作为一种奇特的方式出现在脑海中。喜欢的人互相吸引,不喜欢的人互相排斥。。。在二维平面上。。。然后点击网格。这里可以找到一些真实世界的原始数据作为示例(xlsx形式的矩阵):感谢您的建议,稍后当我在t