使用optapllaner,是否可以在得分计算drl文件中调用“Graph.getInstance()。mdm()”方法?
我在某处读到了我只能调用静态方法,但我不确定。
答案 0 :(得分:1)
是的,这是可能的。当然,为了在分数计算期间调用方法有任何意义,它需要有一个接受实体或变量依赖属性的参数。
接受实体:
when
$p : Process()
eval(Graph.getInstance().mdmForProcess($p) == true)
then
接受依赖于变量的属性:
when
Process($c : computer)
eval(Graph.getInstance().mdmForComputer($c) == true)
then
总的来说,我不喜欢这种设计,我更喜欢这样的设计:
when
Process(mdmIsGood() == true)
then
@PlanningEntity class Process {
public boolean mdmIsGood() {
return Graph.getInstance().mdmForProcess($p);
}
...
}
注意:如果方法不是基于实体或依赖于变量的属性,为什么没有意义呢?因为你可以预先计算它!因此,在每次得分计算中计算它都是非常低效的。请参阅文档部分"缓存的问题事实"。