获取违反约束的实体的标识符

Get identifiers of entities violating constraints

我的问题是在 N 天的时间表中安排约会。我知道这样一个事实,即对于一些非常不利的情况,我永远找不到不违反约束的解决方案。 我想做的是 运行 问题的求解器,获取违反硬约束的约会,将它们从解决方案中删除,然后在接下来的 N 天的时间表上使用这些约会重新执行求解器(即是,重新安排他们)。 有没有办法获取违反约束的约会标识符并将它们从 Java 中的解决方案中删除?我阅读了文档,但没有找到任何内容。

寻找 Constraint Justification.

您不一定会收到实体,但您会收到导致惩罚的对象。考虑以下约束:

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,因为它不进入惩罚。