2017-05-29 1 views
0

Ich habe einen Fall basierend auf MeetingScheduling-Beispiel. Die Ergebnisse sind in Ordnung. Die Planung beginnt mit der Konstruktionsheuristikphase. Dann gibt es eine lokale Suche Phase. Die CH-Phase reduziert die Strafen für harte und mittlere Constraints, während der LS die Strafen für weiche Constraints zu reduzieren scheint.Alternate Construction Heuristik und lokale Suche Phasen

Ich habe festgestellt, dass die CH-Phase, wenn ich die Planung erneut durchführe, die Strafen für harte und mittlere Einschränkungen wieder reduziert. Können wir also den Löser mehrere Male abwechselnd CH et LS-Phasen konfigurieren?

Der aktuelle Solver config:

<?xml version="1.0" encoding="UTF-8"?> 
<solver> 
    <solutionClass>org.optaplanner.examples.meetings.domain.MeetingSchedule</solutionClass> 
    <entityClass>org.optaplanner.examples.meetings.domain.Meeting</entityClass> 

    <scoreDirectorFactory> 
    <scoreDrl>org/optaplanner/examples/meetings/solver/meetingsScoreRules.drl</scoreDrl> 
    </scoreDirectorFactory> 

    <termination> 
    <minutesSpentLimit>20</minutesSpentLimit> 
    </termination> 
</solver> 
+0

Gibt es einen Anwendungsfall der "wiederholten Planung" (siehe Dokument, das Problem ändert sich zwischen den 2 Läufen) oder einen Anwendungsfall von "Nacherwärmung" (ein fehlendes Feature für späte Abnahme und simuliertes Glühen)? Es ist komisch, dass der zweite CH-Lauf ohne Änderungen der Problemfakten zu anderen Ergebnissen führen würde, es sei denn, Sie verwenden nullable = true. In diesem Fall ist es möglich. –

Antwort

0

Dies sollte funktionieren:

<solver> 
    ... 
    <constructionHeuristic/> 
    <localSearch> 
    <termination>...stepCountLimit or calculateCountLimit?...</termination> 
    </localSearch> 
    <constructionHeuristic/> 
    <localSearch> 
    <termination>...stepCountLimit or calculateCountLimit?...</termination> 
    </localSearch> 
    <constructionHeuristic/> 
    <localSearch> 
    <termination>...stepCountLimit or calculateCountLimit?...</termination> 
    </localSearch> 
</solver> 

Und mit dem programmatischen API können Sie es auf n dynamische machen.

Dies ist wahrscheinlich die suboptimale Lösung. Die richtige Lösung wäre Nachheizen (noch nicht unterstützt).

+0

danke, es funktioniert! – supertanuki