Proč konečné skóre Partition Vyhledávání pokles špatně

0

Otázka

Jsem nový Optaplanner. Snažím se dosáhnout dobré skóre přes rozdělení strategie. To je můj velmi základní řešitel konfigurace:

<solutionClass>com.my.package.SolutionClass</solutionClass>
  <entityClass>com.my.package.EntityClass</entityClass>
  <scoreDirectorFactory>
    <constraintProviderClass>com.my.package.ConstraintsClass</constraintProviderClass>
  </scoreDirectorFactory>

  <partitionedSearch>
    <solutionPartitionerClass>com.my.package.PartitionerClass</solutionPartitionerClass>
    <localSearch>
      <termination>
        <secondsSpentLimit>60</secondsSpentLimit>
      </termination>
    </localSearch>
  </partitionedSearch>
</solver>

Vyzkoušet si to mám rozdělený můj problém ve dvou dílčích problémů. Když se podívám na nejlepší skóre dosaženo jednotného oddíly nejsou špatné (-3hard/10soft, -2hard/15soft). Nicméně, obecně "snížení" skóre se zdá být následující:

[org.opt.cor.imp.par.DefaultPartitionedSearchPhase] (executor-thread-0) Partitioned Search phase (0) ended: time spent (60104), best score (-29hard/15soft), score calculation speed (7735/sec), step total (29), partCount (2), runnablePartThreadLimit (6).

Proč je, že? Jsem něco chybí?

2

Nejlepší odpověď

1

To je podstata rozdělen vyhledávání. Každý oddíl bude optimalizován individuálně, a tyto jednotlivé oddíly se proto mají slušné skóre. Nicméně, tyto dva oddíly pak je třeba kombinovat, sloučeny do konečného řešení. Tento krok není optimalizována, a proto to je místo, kde některé další nedostatky.

Možná budete chtít zkusit spustit non-rozdělen řešitel na konečné řešení a zjistit, kde, který vás dostane. Ale pokud byste mohli udělat to, že budete pravděpodobně nebyl rozdělen pomocí vyhledávání na prvním místě.

Viz OptaPlanner dokumentace na Oddíly Vyhledávání pro diskusi, kde neefektivnost pochází.

2021-11-23 16:04:38

Ok děkuji, já to chápu. Jak mohu získat rozdělen řešení v Java? řešitel.vyřešit(problém) pouze vrátí sloučeny špatné řešení.
Giulia Fois

Pokud vím, neexistuje veřejné API.
Lukáš Petrovický

Můžeš oddílu je ještě předtím, než je řešitel a stačí použít n řešitelů je řešit individuálně (nebo nechat jeden SolverManager dělat souběžně, pro vás, každý oddíl je práce).
Geoffrey De Smet
1

[Kromě Lukas je v pořádku odpovědět]

Rozdělen Vyhledávání funguje pouze pokud vaše rozdělení je kompatibilní s vybraným omezením. Ve vašem případě věřím, že vaše Dělení není.

Například v rozpisu zaměstnance, předpokládám, že tam je tvrdá omezení přiřadit maximálně 10 směn za zaměstnance. Nyní, když jste rozdělen 8000 posuny v rozdělených 1000 směny, ale ne oddíl 300 zaměstnanců - každý oddíl dostane všech 300 zaměstnanců (což je chyba). Pak oddíl 1 mohlo by přiřazovat 9 směn Ann, bez porušení tvrdé omezení (0hard). Podobně, oddíl 2 by se mohl přiřadit 8 směny Ann, bez porušení tvrdé omezení (0hard). Sloučeny nicméně, tam bude 17 směny přiřazen k Ann pro těžké skóre -7hard.

Myslím, že to, co jste vidět vaše -3hard/10soft + -2hard/15soft = -29hard/15soft

2021-11-24 12:27:40

Děkuji, tato odpověď mě donutil uvědomit si, kde jsem byl špatně!
Giulia Fois

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................