rule "My Rule"
when
$e = MyEntity(selected)
$s = Map.Entry($k:key, $v:value) from $e.scores
then
scoreHolder.addSoftConstraintMatch(kcontext, (int)$k, (int)$v);
end
我发现约束流无论如何都不适合我的目的,因为我无法在使用奖励或惩罚函数时控制基于匹配实体的分数级别。我将继续使用drools语法。
这些示例有点抽象,无法识别什么最适合,我希望scores
没有OptaPlanner的score
类的实例,但可能ifexists()
可以满足您的需要。
f.from(MyEntity.class)
.filter(MyEntity::isSelected) // Obsolete if that is a null check on your planning var
ifExists(MyFact.class, equal(MyEntity::this, MyFact::getMyEntity))
虽然它似乎很适合groupby()
:
f.from(MyFact.class)
.groupBy(MyFact::getMyEntity, count())
.filter((myFact, count) -> count > 5)
.penalize(...)
ConstraintMatches wise对于正当性,请详细说明您的挑战。
我试图解决一个调度问题,它围绕着以下安排: 是否可以使用和实现约束?我尝试过以下路线: 我认为应该没有问题,但不确定如何获得这个来实现我想要的。这里是否需要?还是有一个不同的、更好的整体方法? 作为参考,ShiftAssignment类可以很容易地拥有如下所示的方法:
我试图将规划实体和一个问题事实加入到约束流中,但我的IDE抛出了一个错误: 我的问题结构和运输问题很相似。我有节点和边,想要计算边的数量。 我的主要问题是: 和规划实体: 约束的代码为: 如果我尝试连接边与边,例如: 这不会出错。原因是,我尝试将节点连接到节点的Edge属性中的Edge中吗?有没有别的办法可以做我想做的事?
是否可以在OptaPlanner约束流中使用除inner join以外的其他join类型?在我的情况下,我需要做一个左联接。
假设我有一个的实现。
有没有人知道如何使用时隙模式定义约束?
我正在评估OptaPlanner的一个规划问题。我已经看到了几个关于这个话题的回应,但没有一个完全像我正在寻找的。 似乎OptaPlanner在求解时需要静态数量的实体/变量。 如有任何指示,将不胜感激。