OptaPlanner Drools实现错误

时间:2014-06-09 07:47:32

标签: drools optaplanner

您好我刚刚开始将OptaPlanner与drools结合使用。但是我有两个问题。我相信这取决于我对语法的理解。

以下规则在尝试实例化解算器时抛出错误。

//Soft constraints
rule "waistedArea"
    when
        $sheet : Sheet($area: (area * 10000))
        $usedAreaTotal : Number (intValue > 0 && intValue < $area ) from accumulate(
            Part(
                    sheet == $sheet,
                    $usedArea : requiredArea * 10000
                ),
            sum($usedArea)
        ) 
        $waste : ($area - $usedAreaTotal)
        eval($waste > 0)
     then
        insertLogical(new IntConstraintOccurrence("waistedArea", constraintType.NEGATIVE_SOFT, $waste,$sheet)
    end

乘以10000是从double值到int的临时转换,但是我知道它的语法。

该规则旨在计算分配了多个组件的工作表的腰围值。

该规则会引发以下错误。

Message [id=1, level=ERROR, path=optaplanner-kie-namespace//Resources/DRLRools
/NestingRules.drl, line=71, column=0
   text=[ERR 102] Line 71:24 mismatched input '-' in rule "waistedArea"]
Message [id=2, level=ERROR, path=optaplanner-kie-namespace//Resources/DRLRools
/NestingRules.drl, line=0, column=0
   text=Parser returned a null Package]

任何探索都会有所帮助。

1 个答案:

答案 0 :(得分:1)

你不能写这个,因为它不是“条件元素”:

$waste : ($area - $usedAreaTotal)

这就足够了:

eval($area > $usedAreaTotal)

我认为没有任何合理的理由乘以10000 - 最后,你比较两个值,乘以10000不会改变关系。 Number也有doubleValue()

并且:它被称为废物 - 腰部是你腰带的地方: - )