如何在OptaPlanner中声明非静态全局变量

时间:2015-04-06 09:07:26

标签: drools optaplanner

在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求解器。)

1 个答案:

答案 0 :(得分:0)

目前,您无法可靠地使用全局变量,因为OptaPlanner可能会产生多个drools会话(未来的功能需要,例如多线程解决,基于人口的启发式算法......)。

解决方法很简单:只需添加单例问题事实并使用它。请参阅示例中的*Parametrization类。