在OptaPlanner解决短语期间,我希望更新一个全局变量。全局变量的更改将修改我的下一个规则验证。
Result.java
package com.domain;
public static boolean status;
...
...
Sample.drl
import org.optaplanner.core.api.score.buildin.hardsoft.HardSoftScoreHolder;
import com.domain.Result;
global HardSoftScoreHolder scoreHolder;
rule "Sample Rule"
when
$PlanningEntity:PlanningEntity()
then
somelogic($PlanningEntity);
if(Result.status){
scoreHolder.addHardConstraintMatch(kcontext, -500);
}
end
function void somelogic(PlanningEntity planningEntity){
if(condition 1...){
Result.status = true;
}else if(condition 2...){
Result.status = false;
}else{
//Do Nothing
}
}
我的问题:
如何在每个求解会话中声明静态全局变量。 (避免多个用户在同一时间执行OptaPlanner求解器。)
答案 0 :(得分:0)
目前,您无法可靠地使用全局变量,因为OptaPlanner可能会产生多个drools会话(未来的功能需要,例如多线程解决,基于人口的启发式算法......)。
解决方法很简单:只需添加单例问题事实并使用它。请参阅示例中的*Parametrization
类。