我有一个非常简单(可能太简单)的规则,我想在 Drools 中强制执行,以允许将一个值添加到我在 Optaplanner 中的硬分数中。基本上,在我的解决方案类TaskAssignment
中,我正在生成 a ,每次发生冲突时都会taskConflictList
添加到 a :taskConflictLog
public List<TaskConflict> calculateTaskConflictList(){
List<TaskConflict> taskConflictList=new ArrayList<TaskConflict>();
taskConflictLog=0;
for(Task leftTask:taskList){
for(Task rightTask:taskList){
if(leftTask.solutionEquals(rightTask)==!true){
if(leftTask.getAssignedDevAsString().equals(rightTask.getAssignedDevAsString())){
if((rightTask.getAllottedStartTime()<=leftTask.getAllottedStartTime()) //long bit of code here....//){
taskConflictList.add(new TaskConflict(leftTask,rightTask));
taskConflictLog++;
}
}
}
}
}
return taskConflictList;
}
然后我想做的就是把这个taskConflictLog
行为的负面作为 Drools 中的硬分数。我目前输入了这个:
rule "OnlyDoOneTaskAtTime"
when
$TA:TaskAssignment($tCL:taskConflictLog)
then
scoreHolder.addHardConstraintMatch(kcontext,-$tCL);
end
但我收到一条错误消息$tCL cannot be resolved to a variable
这感觉是一件很容易的事情,但由于某种原因,我无法理解它。有没有一个简单的解决方案