有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在OptaPlanner中处理未初始化的解决方案

我正在为一所学校创建一个时间表生成器,我面临两个挑战:

1:施工阶段的用户反馈

在构造启发式阶段,我没有收到任何对传递给^{}bestSolutionConsumer的回调,这意味着在这个阶段我无法向用户提供任何反馈。(到今天为止只有10秒左右,但仍然很烦人。)

我怀疑这是故意的(从this question判断),但如果我错了,请纠正我

(我怀疑这个想法是构造启发式阶段无论如何都应该很快,并且99%的长期运行的解将花费在局部搜索阶段,因此这是唯一真正重要的阶段。对吗?)

2:手工安排讲座

此调度程序将仅为半自动的。我希望用户能够锁定讲课,手动移动讲课,甚至将讲课从日程中删除,方法是将讲课放在侧面的一堆中,以便稍后放置(稍后的放置可能由OptaPlanner完成)

重新思考初始化的定义

这使我重新思考我认为是一个初始的解决方案。如果我

  1. 希望在讲座的初始安排期间获得进度反馈,以及
  2. 希望允许用户与只安排了一半讲座的时间表交互

。。。然后,也许我应该使时隙为空,或者为计划外的讲座设置一个sentinel时隙值,并简单地惩罚这些解决方案

在这个场景中,我想象一个解决方案立即被初始化(所有讲座最初都处于非计划状态,但从形式上讲,解决方案仍然被初始化),构建阶段基本上被跳过

问题

  1. 这是因为什么原因吗?!感觉就像我扔掉了OptaPlanner的大部分功能

  2. 我是否忽视了这种方法的任何缺点

  3. 这样做甚至可以跳过施工阶段吗

  4. 此外,重复规划对我来说很重要,而且docs say

    Repeated planning (especially real-time planning) does not mix well with a nullable planning variable.

    这同样适用于使用unscheduled哨兵值的方法吗


共 (1) 个答案

  1. # 1 楼答案

    1/不,这并不愚蠢。事实上,这是over-constrained planning的一个例子

    2/好吧,既然变量可以为null,那么您需要编写约束,以使null是可接受的。你可能会遇到这样的情况,解算器会发现只保留一些变量为空更容易,除非有相当大的惩罚。你可能需要设计特殊的约束来解决这个问题,或者在最坏的情况下,甚至需要定制动作

    3/构造启发法不是强制性的,但它们仍然有用。即使他们让一些变量为空,他们仍然可以给你一个不错的初始解决方案。你也可以试试custom phase

    4/如果你担心上面的一些事情,实际上引入一个虚拟值而不是使变量为空可以解决一些问题。(并引入其他约束,因为现在每个约束都必须处理这个虚拟值。)

    我的建议是快速验证概念。查看每种方法的行为。选择一个你喜欢处理的问题。没有银弹