2017-03-20 6 views
1

Je souhaite supprimer ou ajouter des ProblemFacts au solveur pendant que le solveur résout ma solution d'admission de patient.optaplanner ne peut pas trouver de planification annotée variable

Dans la documentation d'optaplanner, je peux ajouter à propos de solvver.addProblemFactChange certains ProblemFacs, mais cela ne fonctionne pas dans mon exemple PAS.

Voici un extrait de mon code de 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(); 
    }); 
} 

Voici un extrait de mon changé objet BedDesignation

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

An est ici mon message d'erreur lorsque je veux supprimer un objet 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. 

Vérifiez si le getter de votre entité de planification a l'annotation PlanningVariable (ou une annotation de variable d'ombre).

J'ai annoté lit comme PlanningVariable. Qu'est-ce qui ne va pas?

Répondre

0

Le message d'erreur blâme la mauvaise raison.

Utilisez "lit" au lieu de "lit".