我对Optaplanner着迷,并试图通过构建示例来学习它。我会很感激任何可以帮助我解决这个问题的技巧。
问题域
- 在表演班级中表演的表演者:一名表演者可以在多个班级演出
- 表演者表演的场地
- 表演者执行的时段
- 表演者在一系列场地中表演的比赛
- 哪些表演者将提前知道哪个班级
- 每次演出需要一段固定的时间
- 对类的大小没有限制:类对所有人开放,但表演者及其请求的类列表在模型运行开始时修复
目标和限制是:
- 在比赛中安排表演以花费最少的时间(即尽量充分利用多个场地);
- 课程必须在同一场地开始和结束,但任何课程都可以使用任何场地;
- 一旦一个班级在一个场地开始,它就会专门使用场地直到它完成;
- 在指定时间段内,只有一位表演者可以在指定地点演出;
- 表演者不能同时在两个不同的场地;
- 每个表演者必须被允许在他们要求的每个班级中表演;
- 课堂表演顺序并不重要;
- 表演者必须至少拥有" n"表演之间的时间段;
- 希望避免场地中的死时间段;
- 个人表演恰好是" m"分钟,无论是班级,表演者还是场地;
- 如果一个班级有n个表演者且每个表演需要几分钟,一个班级将从指定的开始时间到指定的场地继续,直到n * m分钟后(如果有x个死区时间,则加上x * m); < / LI>
- 在一个典型的问题中,可能有4个场地,15个班级和200个表演者,班级规模差异很大(每班1到30或更多表演者)。
醇>
我的第一个想法是将课程安排到场地并首先开始时间段,然后重新排列表演的顺序,如果这样做是必要的,以解决冲突。只有通过改变课堂表演的顺序才能解决冲突,才能将课程分配到场地或开始时间。
我不清楚的是如何处理表演者/时间段/场地映射的混乱,然后如果仍然存在冲突则恢复到改组课程/场地/开始时间映射。
问题的第一部分(决定初始课程到场地/开始时间)看起来像是简单的装箱。但是,我不确定这是否是考虑重新排序表演的最佳时机。
非常感谢任何协助。
谢谢!