2017-03-20 76 views
1

我想刪除或添加一些ProblemFacts解算器,而求解器解決我的患者入院解決方案。optaplanner找不到註釋計劃varible

在optaplanner的文檔中,我可以添加有關solver.addProblemFactChange的一些ProblemFacs,但它在我的PAS示例中不起作用。

這裏是我的PatientAdmissionScheduleGenerator的代碼片段

public void addBedDesignation(final BedDesignation bedDesignation){ 
    this.solver.addProblemFactChange(scoreDirector -> { 
     PatientAdmissionScheduleSolution patientAdmissionScheduleSolution = scoreDirector.getWorkingSolution(); 
     patientAdmissionScheduleSolution.getBedDesignationList().add(bedDesignation); 
    }); 
} 

public void deleteBedDesignation(final BedDesignation bedDesignation){ 
    // Neues Problem dem Solver zuführen 
    this.solver.addProblemFactChange(scoreDirector -> { 

     // Erstelle eine neue PAS-Solution auf Basis der gerade läuft 
     PatientAdmissionScheduleSolution patientAdmissionScheduleSolution = scoreDirector.getWorkingSolution(); 

     // Erstelle eine neue Bettzuweisung auf Basis der 
     BedDesignation workingBedDesignation = scoreDirector.lookUpWorkingObject(bedDesignation); 

     for(BedDesignation designation : patientAdmissionScheduleSolution.getBedDesignationList()){ 
      if(designation.equals(bedDesignation)){ 
       scoreDirector.beforeVariableChanged(designation, "Bed"); 
       designation = null; 
       scoreDirector.afterVariableChanged(designation,"Bed"); 
      } 
     } 

     ArrayList<BedDesignation> bedDesignationArrayList = new ArrayList<>(patientAdmissionScheduleSolution.getBedDesignationList()); 
     patientAdmissionScheduleSolution.setBedDesignationList(bedDesignationArrayList); 
     scoreDirector.beforeProblemFactRemoved(workingBedDesignation); 
     bedDesignationArrayList.remove(workingBedDesignation); 
     scoreDirector.afterProblemFactRemoved(workingBedDesignation); 
     scoreDirector.triggerVariableListeners(); 
    }); 
} 

這是我改變了對象BedDesignation的片段

@PlanningVariable(nullable = true, valueRangeProviderRefs = {"bedRange"}, strengthComparatorClass = BedStrengthComparator.class) 
    public Bed getBed() { 
     return bed; 
    } 

的,這裏是我的錯誤消息時,我想刪除BedDesignation對象

Exception in thread "main" java.lang.IllegalArgumentException: The variableName (Bed) for entityClass (class pas.entity.domain.BedDesignation) exists as a property (getter/setter) on that class, but not as an annotated as a planning variable. 

檢查您的計劃實體的getter是否有註釋PlanningVariable(或影子變量註釋)。

我把牀標註爲PlanningVariable。哪裏不對?

回答

0

錯誤信息是指責錯誤的原因。 I created a jira.

使用「牀」而不是「牀」。