Es gibt ein paar Threads, die die Skalierbarkeit von Optaplanner diskutieren, und ich frage mich, was ist der empfohlene Ansatz, um mit sehr großen Datensätzen umzugehen, wenn es um Millionen von Zeilen geht?Optaplanner - große Datensätze mit Millionen von Zeilen
Wie dieser Blog diskutiert, verwende ich bereits Heuristik (Simulated Annealing + Tabu Search). Der Suchraum des Cloud-Balancing-Problems ist c^p, aber der mögliche Raum ist unbekannt/NP-vollständig.
http://www.optaplanner.org/blog/2014/03/27/IsTheSearchSpaceOfAnOptimizationProblemReallyThatBig.html
Das Problem, das ich zu lösen versuche, ist ähnlich Ausgleich trüben. Aber der Hauptunterschied liegt in den Eingabedaten, neben einer Liste von Computern und einer Liste von Prozessen gibt es auch eine große zweidimensionale "Trefferliste/Tabelle", die die Bewertungen für jede mögliche Kombination hat, die in den Speicher geladen werden muss.
Mit anderen Worten, mit Ausnahme der Einschränkungen zwischen Computern und Prozessen, die die Planung erfüllen muss, ergeben unterschiedliche gültige Kombinationen verschiedene Werte und je höher der Wert, desto besser.
Es ist ein einfaches Problem, aber wenn es um Hunderte von Computern geht, 100k + Prozesse und die Scoretabelle hat eine Million + Kombinationen, es braucht viel Speicher. Obwohl ich mehr Speicher zuweisen könnte, um die Größe des Heapspeichers zu erhöhen, könnte die Planung sehr langsam und mühsam werden, da die Schritte mit benutzerdefinierten Planvariablen/Entity-Vergleichsklassen sortiert werden.
Eine einfache Lösung besteht darin, den Datensatz in kleinere Teilmengen zu unterteilen, jede einzeln auszuführen und dann die Ergebnisse zu kombinieren, sodass mehrere Maschinen gleichzeitig ausgeführt werden können und jede Maschine auf mehreren Threads ausgeführt wird . Der größte Nachteil dieses Ansatzes ist, dass das Ergebnis weit entfernt von optimal ist.
Ich frage mich, gibt es noch andere bessere Lösungen?
Vielen Dank für Ihre Antwort, Geoffrey.Ich habe bereits den ValueSelector und EntitySelector im unionMoveSelector implementiert, und beide Selektoren verwenden sortierte Auswahlreihenfolge mit Vergleichsklassen. So lange ich das verstanden habe, würde die Implementierung der Nearby Selection-Methode meine aktuelle Sortiermethode ersetzen. Außerdem muss ich definieren, was das "Distanz" -Konzept in einem MachineReassignment-Kontext ist? – oy321
Ich habe eine Fehlermeldung erhalten, die besagt, dass die valueSelectorConfig (ValueSelectorConfig (XXX)) mit resolvedCacheType (PHASE) und resolvedSelectionOrder (ORIGINAL) auf einem EntityIndependentValueSelector (FromEntityPropertyValueSelector (XXX)) basieren muss. Überprüfen Sie Ihre @ValueRangeProvider-Annotationen. ', Wenn Sie versuchen, den CH mit den erweiterten Konfigurationsdetails von Weakest Fit Decreasing als Dokument 9.8.2 (R6.4) zu konfigurieren. Ist es ein Bug, der in 7.0.0.Beta1 behoben wird? Was ist die Problemumgehung? – oy321