如何使用 optaplanenr 或 timefold 构建模型

问题描述 投票:0回答:1

我有学校安排问题。

问题描述: 将每门课程安排在一个时间段内。 (ps:不需要进房间)。

硬约束:

  • 一个班的同一门课需要连续。课程的连续长度为2。例如A班的数学课程,可能需要一门连续长度为1的课程和另一门连续长度为2的课程。所以A班有两门数学课程,即数学的总时隙需要的是 3。

  • 不同班级、同一老师的同一课程需要一起学习。例如,A班和B班的音乐课,音乐课的老师是同一个安老师。当A班音乐课程时隙为slotA时,B班音乐课程时隙必须为slotA。

我的解决方案是使用内置硬约束构建一个模型来处理硬约束。

还有其他有效的方法可以解决这个问题吗?

optaplanner timefold
1个回答
0
投票

学校时间表可能包含许多限制。 Timefold Quickstarts 存储库 已经有一些预先实现的内容,因此我建议查看这些内容以获得进一步的灵感。

根据您的问题:

  • “班级中的同一门课程需要连续”:您可以采用我上面喜欢的文件中的studentGroupSubjectVariety约束并将其反转(因为现在它的作用与您想要的相反)+将其更改为硬约束。您也可以将其保留为软约束并查看结果。

  • “不同班级的同一门课程需要一起学习。”:这是一个更棘手的请求,因为在更大的数据集上,您应该考虑其他问题:

    • 1位老师可以教多少名学生? (如果还有C班、D班、E班,而且都有音乐老师安……是同时吗?)。这引入了一种“能力”形式,它本身可能是一种约束。
    • 虽然房间不是您关心的问题,但在建立限制时您仍然应该考虑这一点。

当尝试对第二部分进行建模时,您遇到了在课程/时间段和学生组/班级之间引入多对多关系的问题。看看建模指南,这不是一个好的策略。我还没有一个明确的答案,但我会看看我能想出什么。

© www.soinside.com 2019 - 2024. All rights reserved.