0
嗨,我剛開始使用OptaPlanner與drools結合使用。不過,我有兩個問題。我相信這取決於我對語法的理解。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]
任何探測都會有幫助。
謝謝您的意見,我已經發現了EVAL選項。我目前有其他規則(以及我的拼寫:))的困難。請你能提供一個簡單的演員例子,因爲從我讀過的軟規則不能有效地使用實數。它是否正確? – Jon
是的,漂浮/雙打[天生破碎](http://docs.jboss.org/drools/release/latest/optaplanner-docs/html_single/index.html#avoidFloatingPointNumbersInScoreCalculation)(但OptaPlanner仍支持它們)。如果你需要3個十進制數的精度,只需要使用一個長的多個浮點數/ 1000;如果你需要4個,則使用10000個,或者使用BigDecimal。 –
@GeoffreyDeSmet但是,一個10的冪的乘法不會從浮點轉換爲整數。使用面積小的*積分*單位避免了這個問題,但是這必須在數據模型Sheet和Part中實現。 – laune