Eine Art Optimierungsalgorithmus sollte den Trick machen.
Ich gehe davon aus, dass dies keine zeitkritische Aufgabe ist, sondern während der Entwicklung oder Initialisierung, nicht während des Spiels. Außerdem wissen Sie, ob eine bestimmte Verteilung von Eckpunkten die endgültige Form nahe an der Quelle hält.
Im Idealfall verfügen Sie über eine Funktion, die jeder Konfiguration von Scheitelpunkten eine Nummer zuweist und schätzt, wie nahe die endgültige Form an der Quelle liegt. Nennen wir diese Funktion Figure of Merit (FOM). Sie möchten das FOM unter der Nebenbedingung optimieren, dass die Anzahl der Scheitelpunkte konstant bleibt.
Ich kann mir zwei Methoden vorstellen, einen gerichteten, gradientenbasierten Ansatz und einen randomisierten Monte-Carlo-Ansatz.
- Gerichteter, gradientenbasierter Ansatz
Die Positionskoordinaten jedes Scheitelpunkts des Vektorfeldgeländes sind die Parameter. Versuchen Sie, die Ableitungen des FOM in Bezug auf diese Parameter zu berechnen. Man kann die Ableitung numerisch approximieren, indem man die Positionen nur geringfügig ändert und entsprechende Unterschiede im FOM berechnet (endliche Differenzen).
Bewegen Sie sich dann ein wenig entlang dieser Verlaufsrichtung (dh wenden Sie Verlaufszeiten in einer geeigneten Schrittgröße an, um die Positionen zu aktualisieren). Wählen Sie die Schrittgröße so, dass das FOM am besten ist. Einige Scheitelpunkte können sehr nahe kommen, was bedeutet, dass sie durch eine geringere Anzahl von Scheitelpunkten ersetzt werden können.
Wiederholen Sie die Berechnung des Gradienten an den neuen Positionen und wiederholen Sie die Bewegung entlang der neuen Gradientenrichtung. (Siehe auch Gefälle .)
Dies ist geeignet, wenn Sie bereits in der Nähe der gewünschten Lösung sind und diese verfeinern möchten. Die Bewegung von Eckpunkten von / zu nahe gelegenen Regionen zu benachbarten Regionen, die sie benötigen, sollte hier berücksichtigt werden.
- Randomisierter Monte-Carlo-Ansatz
Methode 1 führt nur eine lokale Optimierung durch. Für eine globale Optimierung sind jedoch zufällige Änderungen der Eckpunkte möglicherweise besser geeignet. Induzieren Sie für jede Iteration drastischere, zufällige Änderungen. Zum Beispiel könnte man 10% der Eckpunkte vollständig auf andere zufällige Positionen umverteilen.
Der Trick ist: Akzeptieren Sie diese Änderungen nur, wenn sie das FOM verbessern, akzeptieren Sie sie nur mit einer sehr geringen Wahrscheinlichkeit, wenn sie das FOM verschlechtern. (Normalerweise verwendet man Exponential (-Constant * FOM-change) als Akzeptanzwahrscheinlichkeit (hier sollte FOM minimiert werden)).
Wiederholen Sie dies dann für eine lange Zeit und verfolgen Sie das beste Zwischenergebnis (Konfiguration mit dem besten FOM). Am Ende wählen Sie es. (Siehe auch Monte-Carlo-Methoden .)
Wenn Sie möchten, können Sie beide kombinieren, z. B. Methode 1 auf das Ergebnis von Methode 2 anwenden.