In einem Schritt von sagen wir lokale Suche OptaPlanner wertet N verschiedene Bewegungen aus, indem er die Bewegung ausführt und dann den UndoMove aufruft und dann am Ende die beste Bewegung von N auswertet. Gibt es eine Möglichkeit herauszufinden, wann der Zug ist und Wann ist das Rückgängigmachen?Wie unterscheidet man von undoMove?
1
A
Antwort
1
Die Variablenlistener werden am Ende von undoMove ausgelöst (weil jede Bewegung ScoreDirector.triggerVariableListeners()
ab 6.3 ausführen muss).
Standardmäßig wird der Punktestand nach dem Rückgängigmachen nicht neu berechnet (da dies vorhergesagt werden kann, ist es eine Verschwendung von Perfomance). Mit enviroment.Mode FAST/FULL_ASSERT ist es jedoch, aber nicht mit NON_INTRUSIVE_FULL_ASSERT. Natürlich sollten Sie diese nicht verwenden, um die Neuberechnung der Punkte nach dem Rückgängigmachen von Bewegungen zu erzwingen: Sie sollten sich niemals darauf verlassen, dass die Punktzahl nach dem Rückgängigmachen neu berechnet wird.
Verwandte Themen
- 1. ggplot2: Wie unterscheidet man Klick von Pinsel?
- 2. Wie unterscheidet man Annotation Pins?
- 3. didReceiveMemoryWarning - Wie unterscheidet man Warnstufen?
- 4. Wie unterscheidet man mehrere Tastaturen in Delphi?
- 5. Wie unterscheidet man zwischen geposteten Formularen?
- 6. wie man zwischen Kommentaren und Antworten unterscheidet
- 7. Wie unterscheidet man verschiedene WLAN-Netzwerke?
- 8. Wie unterscheidet man Rs und% -Werte?
- 9. Wie unterscheidet man HTTP- und CLI-Anfragen?
- 10. Wie unterscheidet man zwei Menüelementklicks in ActionBarSherlock?
- 11. Eclipse: Wie unterscheidet man verschiedene offene Arbeitsbereiche?
- 12. GCC: Wie unterscheidet sich März von Mtune?
- 13. Wie unterscheidet man zwei verschiedene Intents von derselben Aktivität?
- 14. Wie unterscheidet man Parameter von deklarierter Route beim Routing?
- 15. Wie unterscheidet man XML von HTML-Links in Java
- 16. Wie unterscheidet man Java-Karte von Clojure Karte?
- 17. Wie unterscheidet man Namespaces von injizierten Modulen in AngularJS?
- 18. Wie unterscheidet man "# id.class" von "#id .class" in SCSS?
- 19. Wie unterscheidet man Ansichten von Tabellen im EF MetadataWorkspace?
- 20. Wie unterscheidet sich ArrayListMultimap von LinkedListMultimap?
- 21. Farbe von NavBar unterscheidet sich von Hintergrundfarbe
- 22. Warum unterscheidet sich {} + [] von ({} + [])?
- 23. Wie unterscheidet sich Gitlab von Github?
- 24. Wie unterscheidet sich << von +?
- 25. Wie unterscheidet sich MegaStore von BigTable?
- 26. Wie unterscheidet sich Gurke von JUnit?
- 27. Wie unterscheidet sich das Armspeichermodell von ia64?
- 28. Wie unterscheidet sich mpi_file_write von mpi_file_write_all?
- 29. Wie unterscheidet man Daten/Sprachverwendung für Dual-SIM in Android
- 30. Wie unterscheidet man den Kommandozeilen- und Webserver-Aufruf?
Wohin möchten Sie das herausfinden? Im Protokoll? In einer benutzerdefinierten Move-Implementierung? Im Debugger im Code? Und warum? –
Ich wollte nur herausfinden, ist die Punktzahl neu berechnet jedes Mal, wenn die Rückgängigmachen in einem bestimmten Schritt gemacht wird. Natürlich wird es keinen Sinn machen, weil wir es am Anfang des Schritts berechnet haben und es wird überflüssig sein. Und ich habe auch benutzerdefinierte Variablenlistener für benutzerdefinierte Shadow-Variablen implementiert und ich wollte herausfinden, ob sie ausgelöst werden, wenn die UndoMove gemacht wird, um alles auf normal zurück zu bringen. Also, wie ich herausgefunden habe, wird der Punktestand nicht berechnet, wenn der UndoMove aufgerufen wird und die Variablenlistener wie normal ausgelöst werden und die Lösung auf den vorherigen Zustand setzen. –
Gibt es also eine Möglichkeit herauszufinden, wann es sich um ein Move handelt und wann es ein undoMove ist? Ich muss das in den Variablenlistenern wissen, weil ich in ihnen Code habe, der herausfindet, welcher Wert für die Schattenvariable am besten ist. Ich weiß, das ist vielleicht nicht der beste Weg, aber es funktioniert für mich.So was ich brauche ist, wenn es eine Bewegung ist, um den Wert der Schatten-Variable (OLD VALUE) zu erinnern, berechnen Sie den neuen Wert, stellen Sie es und dann, wenn die UndoMove ist Der OLD VALUE wird aufgerufen. –