Ich habe versucht, eine Schattenvariable zu implementieren, so dass eines meiner Problemfakten verfolgen kann, welche Planungseinheit für sie relevant ist. Das Endziel ist, meine Regeln zu vereinfachen/zu beschleunigen.Muss eine InverseRelationShadowVariable notwendigerweise zu einer planningEntity gehören?
Ich schaue auf die optaplanner doc about shadow variables, insbesondere das CloudBalancing-Beispiel. Im "normalen" CloudBalancing ist die Klasse CloudComputer
nicht eine planningEntity. Im folgenden Beispiel ist es jedoch als planningEntity gekennzeichnet.
Sollen wir verstehen, dass die Klasse, die die Schattenvariable hostet, eine Planungseinheit sein sollte? Ich dachte, eine PlanungEntity müsste eine Planungsvariable haben, aber CloudComputer
nicht. Wenn die Antwort ja lautet, schlage ich vor, in der Dokumentation ausführlicher darüber zu sein. Wenn die Antwort nein ist, liegt ein Fehler in diesem Beispiel vor (die Annotation @PlanningEntity
sollte aus CloudComputer entfernt werden).
Das folgende Beispiel aus dem doc ist:
Für eine nicht-verkettete Planung Variable, die bidirektionale Beziehung eine viele zu einer Beziehung sein muss. Um eine bidirektionale Beziehung zwischen zwei Planungsvariablen abzubilden, mit Anmerkungen versehen, die Master-Seite (die Original-Seite ist) als eine normale Planungsvariable:
@PlanningEntity
public class CloudProcess {
@PlanningVariable(...)
public CloudComputer getComputer() {
return computer;
}
public void setComputer(CloudComputer computer) {...}
}
Und:
@PlanningEntity
public class CloudComputer {
@InverseRelationShadowVariable(sourceVariableName = "computer")
public List<CloudProcess> getProcessList() {
return processList;
}
}
Auch dieses ist wirklich alles, was benötigt wird, damit die processList auch dann aktuell bleibt, wenn CloudProcess
beim Lösen geklont wird?
Können Sie auf die Bits in den Dokumenten hinweisen, in denen es Verwirrung gibt, dass eine Planungsumgebung auch Schattenvars anstelle von '@ PlanningVariable' enthalten kann? Ich würde das gerne reparieren. –
@GeoffreyDeSmet In 4.3.3 (Abschnitt über Planungseinheiten) heißt es: "Jede Planungseinheitenklasse hat eine oder mehrere Planungsvariablen." Ich glaube auch nicht, dass ich in den Abschnitten über Schattenvariablen Planungselemente erwähnt habe, obwohl es ein ganz entscheidender Punkt ist, dass sie sich in einer Planungseinheitenklasse befinden sollten. Ich erkannte, dass dies der Grund war, warum mein Code nicht funktionierte, nur wenn ich versuchte, das Beispiel zu replizieren und die zusätzliche Anmerkung bemerkte. –
Behoben für 7.0 Dokumente –