2016-03-30 6 views
0

Ich habe so etwas wie das:Optaplanner, Wie fängt man die aktuelle Zeit am Anfang der Regel, um sie in der Partitur zu verwenden?

scoreHolder.addSoftConstraintMatch(kcontext, (System.currentTimeMillis()-$time.getTime())); 

Ich möchte nur die Regel des Brennens die aktuelle Uhrzeit am Anfang verwenden, und nicht während des Laufens die Regel aktualisiert werden. nur um die aktuelle Zeit im ersten Moment zu erfassen, wird die Regel ausgelöst und ändert sich erst am Ende des Lösens.

Ich verwende Optaplanner 6.1.

danke im voraus.

+0

Warum möchten Sie das tun? http://mywiki.wooled.org/XyProblem – oskopek

Antwort

0

Das würde OptaPlanner brechen, da sich der Score der gleichen Lösung im Laufe der Zeit ändern würde (was auch bedeutet, dass der Vergleich von 2 verschiedenen Lösungen nicht fair durchgeführt werden kann - also wenn ein neuer Arbeitsergebnis mit dem besten Ergebnis verglichen wird vor x Sekunden berechnet) es bricht).

Stattdessen vor dem Solver beginnt, stellen Sie die aktuelle Zeit Millis in Singleton:

myParametrization.setStartingMillis(System.currentMillis()); 
... = solver.solve(...); 

und fügt hinzu, dass als Problem Tatsache, und verwenden Sie es in den Bewertungsregeln (siehe Prüfung Beispiel des InstitutionParameterization).