archetype | title | author | readings | tldr | outcomes | quizzes | assignments | youtube | fhmedia | challenges | |||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
lecture-cg |
Heuristiken |
Carsten Gips (HSBI) |
|
CSP's mit endlichen Domänen lassen sich mit einer Backtracking-Suche lösen. Dabei
gibt es einige Freiheitsgrade: Auswahl der nächsten Variable und Wahl des nächsten
Werts. Hier können Heuristiken die Suche beschleunigen.
Zur Wahl der als nächstes zu betrachtenden Variable kann die **Minimum Remaining
Values (MRV)**-Heuristik eingesetzt werden: Wähle die Variable mit wenigsten freien
Werten. Bei Gleichstand bei der MRV kann man mit der **Gradheuristik** die Variable
mit den meisten Constraints zu offenen (noch nicht belegten) Variablen wählen.
Bei der Wahl des Wertes kann die **Least Constraining Value (LCV)**-Heuristik genutzt
werden: Wähle den Wert, der für die verbleibenden Variablen die wenigsten Werte ungültig
macht.
Während die MRV relativ leicht umzusetzen ist, muss man für die LCV alle Constraints zu
den Nachbarn auswerten.
|
|
|
|
|
Sei |
\bigskip
::: notes [VARIABLES]{.alert}: Welche Variable zuerst ausprobieren? :::
Minimum Remaining Values (MRV): (vgl. [@Russell2020, S. 177])
-
Wähle Variable mit wenigsten freien Werten [(die am meisten eingeschränkte Variable)]{.notes}
::: notes => reduziert den Verzweigungsgrad :::
[[Tafelbeispiel]{.bsp}]{.slides}
::: notes Beispiel:
- Freie Auswahl, alle haben gleich viele freie Werte (jeweils 3) => wähle A
- B und C haben nur noch zwei freie Werte => wähle B (oder C)
- C hat nur noch einen Wert, D noch zwei, der Rest drei => wähle C :::
\bigskip
::: notes [VARIABLES]{.alert}: Welche Variable zuerst ausprobieren? :::
Gradheuristik: Erweiterung von MRV bei Gleichstand (vgl. [@Russell2020, S. 177])
-
Wähle Variable mit meisten Constraints auf offene [(noch nicht zugewiesene)]{.notes} Variablen
::: notes => reduziert den Verzweigungsgrad in späteren Schritten :::
[[Tafelbeispiel]{.bsp}]{.slides}
::: notes Beispiel:
- MRV: Alle haben gleich viele freie Werte (jeweils 3) => Gradheuristik: B, C und D haben die meisten Verbindungen (Constraints) auf offene Variablen => wähle B (oder C oder D)
- MRV: A, C und D haben nur noch zwei freie Werte => Gradheuristik: C und D haben je zwei Constraints auf noch offene Variablen => wähle C (oder D)
- MRV: A und D haben beide nur noch einen Wert => Gradheuristik: D hat die meisten Verbindungen (Constraints) auf offene Variablen => wähle D :::
\bigskip
::: notes [VALUES]{.alert}: Welchen Wert zuerst ausprobieren? :::
Least Constraining Value (LCV): (vgl. [@Russell2020, S. 177])
-
Wähle Wert, der für verbleibende Variablen die wenigsten Werte ungültig macht
::: notes => verringert die Wahrscheinlichkeit für Backtracking :::
[[Tafelbeispiel]{.bsp}]{.slides}
::: notes Beispiel:
- Sei A gewählt: Alle Werte machen in den anderen Variablen einen Wert ungültig => freie Wahl des Wertes => wähle beispielsweise rot
- Sei B gewählt: Alle Werte machen in den anderen Variablen einen Wert ungültig => freie Wahl des Wertes => wähle beispielsweise grün
- Sei D gewählt: Verbleibende Werte rot und blau
- Wahl von rot würde für C einen Wert übrig lassen (blau)
- Wahl von blau würde für C keinen Wert übrig lassen => LCV: Wahl von rot!
Hinweis: Diese Heuristik ist in der Praxis sehr aufwändig zu berechnen! Man müsste für jeden Wert die noch offenen Constraints anschauen und berechnen, wie viele Werte damit jeweils ungültig gemacht werden. Die Idee ist aber dennoch interessant, und möglicherweise kann man sie für ein reales Problem so adaptieren, dass bei der Umsetzung nur wenig zusätzlicher Aufwand entsteht. :::
- Verbesserung der BT-Suche mit Heuristiken: MRV, Gradheuristik, LCV
::: slides
Unless otherwise noted, this work is licensed under CC BY-SA 4.0. :::