2017-03-20 21 views
1

ソルバーが患者の承認ソリューションを解決している間に、ProblemFactsを削除または追加したいと考えています。optaplannerは注釈付きプランニングを見つけることができません

optaplannerからのドキュメントでは、いくつかのProblemFacsをsolal.addProblemFactChangeに追加できますが、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オブジェクトを削除したいときここに私の変更オブジェクトBedDesignation

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

アンのスニペットは、私のエラーメッセージが表示されています

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. 

計画エンティティのゲッターに注釈PlanningVariable(またはシャドー変数注釈)。

私はPlanningVariableとして注釈ベッドを持っています。なにが問題ですか?

答えて

0

エラーメッセージは、間違った理由を非難しています。 I created a jira.

「ベッド」の代わりに「ベッド」を使用します。

関連する問題