当前位置: 首页 > 知识库问答 >
问题:

Optaplanner约束流连接列表属性

仉成益
2023-03-14
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语法。

共有1个答案

齐文栋
2023-03-14

这些示例有点抽象,无法识别什么最适合,我希望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在求解时需要静态数量的实体/变量。 如有任何指示,将不胜感激。