我们正在尝试使用Optaplanner解决VRP。分数计算通过约束流运行。
现在我有两辆车(A和B),想安排两个作业(J1和J2)。构造启发式(FIRST\u FIT\u Desculating)将J1调度到A,J2调度到B,这到目前为止是正确的。
现在这两个作业也有一个属性“customer”,如果这两个作业的客户相同,但车辆不同,我想分配一个惩罚。
为此,我在ConstraintProvider中创建了一个约束,通过groupBy过滤具有相同客户但不同车辆的所有作业。
如果现在打开FULL\u ASSERT\u模式,则在调度J2后会发生IllegalStateException,因为增量计算的分数与完整计算的分数不同。我怀疑这是因为重新计算作业时间的VariableListener只告诉ScoreDirector我的shadowvariables对作业J2的更改,因此只更改与其相关的分数部分。
我如何告诉Optaplanner J1的分数也必须重新计算?我无法通过VariableListener到达作业J1,告诉ScoreDirector必须在此处更改分数。
或者这个问题需要不同的方法吗?
这是一个有点难以完全解释的问题。TLDR版本:约束流仅对来自from()
、connect()
或ifExist()
的对象的更改做出反应。不通过这些语句的对象的更改将不会被捕获,因此会导致分数损坏。下面有更长的解释。
考虑这样一个假设的约束流:
constraintFactory.from(Shift.class)
.join(Shift.class)
.filter((shift1, shift2) -> shift1.getEmployee() == shift2.getEmployee())
...
这个约束流将很好地工作,因为如果您通过设置不同的员工来更改班次,班次将被重新评估。它们通过from()
和join()
进入流,这就是CS知道如何在移位时重新计算移位。
现在考虑这个约束流:
constraintFactory.from(Shift.class)
.filter(shift -> shift.getEmployee().getName() == "Lukas")
...
如果Shift更改,将重新评估该约束流。但是当员工的姓名发生变化时,约束流不会被重新评估Employee既不在from()中,也不在join()中,对Employee的更改不会触发约束流的重新评估。
在您的特殊情况下,您需要确保以下几点:
变量侦听器将实际发生变化的一切标记为已更改
如果修改问题事实,则需要确保变量侦听器也能处理该问题
您希望约束流作出反应的对象是通过from()
或join()
传入的
我正在编写一个java jar库。我只想为Gradle的项目添加游戏服务依赖项。我的gradle构建脚本: Gradle sync完成得很好,android studio告诉我一切都好,但当我试图构建: 我的gradle版本2.13。另外,我使用了最新的gradle版本候选版本。没什么。
我一直在尝试将< code>webdriver注入到步骤中。我已经使用了这个说明,效果很好。 想法是将WebDriver作为服务注入到steps类中。在初始步骤,您需要添加以下依赖项。 依赖关系注入涉及三个主要类。在这里,我们逐一介绍它们。 BaseUtil BaseUtil是具有WebDriverof Selenium属性的类。这个类非常简单: 钩 钩子类包含之前和之后的
我对匕首2还不太熟悉。我正试图在我的Android项目中实现它。我有一个需要。我用匕首把它注射到这个服务中。 、和具有标记为的方法当我构建项目时,我收到以下错误: locationServiceComponent依赖于多个作用域组件:@Singleton NetComponent@Singleton RepositoryComponent 我知道我的不能依赖于两个作用域组件,但我的服务中需要这两个
问题内容: 我有两个工作: 上载 发射实例 我想使 Launch-instance 依赖于另一个,以便触发 Launch-instance 自动导致上 载 首先运行。 我可以使用内置的Jenkins功能还是使用插件来实现? 请注意,我 不 希望 上传 总是触发 启动实例 ,这是“建等项目后建”的选项 启动实例 会做。我想要的东西更 类似于 Ant中的 attribute 如何工作 。 问题答案:
本文向大家介绍DBMS中的多值依赖,包括了DBMS中的多值依赖的使用技巧和注意事项,需要的朋友参考一下 什么是多值依赖? 当表中存在一个或多个行时,意味着同一表中存在一个或多个其他行,则发生多值依赖关系。 如果表具有属性P,Q和R,则Q和R是P的多值事实。 用双箭头表示- ->-> 对于我们的示例: P->-> Q P->-> R 在上述情况下,仅当Q和R是独立属性时,才存在多值依赖关系。 具有多
这个问题类似于使一个源集依赖于另一个源集 这不起作用,因为您不能直接将源集添加为依赖项。建议的方法是: 但是这在eclipse中不能正常工作,因为当我清理gradle build文件夹时,eclipse不能再编译了,因为它依赖于gradle build。此外,如果我更改了主代码,我必须在gradle中重新构建项目,以便更改在Eclipse中生效。 如何正确声明依赖项? 这个 适用于主源代码,但由于