获取违反约束的实体的标识符
Get identifiers of entities violating constraints
我的问题是在 N 天的时间表中安排约会。我知道这样一个事实,即对于一些非常不利的情况,我永远找不到不违反约束的解决方案。
我想做的是 运行 问题的求解器,获取违反硬约束的约会,将它们从解决方案中删除,然后在接下来的 N 天的时间表上使用这些约会重新执行求解器(即是,重新安排他们)。
有没有办法获取违反约束的约会标识符并将它们从 Java 中的解决方案中删除?我阅读了文档,但没有找到任何内容。
您不一定会收到实体,但您会收到导致惩罚的对象。考虑以下约束:
Constraint computerCost(ConstraintFactory constraintFactory) {
return constraintFactory.forEach(CloudComputer.class)
.ifExists(CloudProcess.class, equal(Function.identity(), CloudProcess::getComputer))
.penalize("computerCost",
HardSoftScore.ONE_SOFT,
CloudComputer::getCost);
}
约束理由将包括受到惩罚的 CloudComputer
。 (约束流是 UniConstraintStream<CloudComputer>
。)约束理由将不包括 CloudProcess
,因为它不进入惩罚。
我的问题是在 N 天的时间表中安排约会。我知道这样一个事实,即对于一些非常不利的情况,我永远找不到不违反约束的解决方案。 我想做的是 运行 问题的求解器,获取违反硬约束的约会,将它们从解决方案中删除,然后在接下来的 N 天的时间表上使用这些约会重新执行求解器(即是,重新安排他们)。 有没有办法获取违反约束的约会标识符并将它们从 Java 中的解决方案中删除?我阅读了文档,但没有找到任何内容。
您不一定会收到实体,但您会收到导致惩罚的对象。考虑以下约束:
Constraint computerCost(ConstraintFactory constraintFactory) {
return constraintFactory.forEach(CloudComputer.class)
.ifExists(CloudProcess.class, equal(Function.identity(), CloudProcess::getComputer))
.penalize("computerCost",
HardSoftScore.ONE_SOFT,
CloudComputer::getCost);
}
约束理由将包括受到惩罚的 CloudComputer
。 (约束流是 UniConstraintStream<CloudComputer>
。)约束理由将不包括 CloudProcess
,因为它不进入惩罚。