W przypadku problemów związanych z satysfakcją z ograniczeń heurystykę można wykorzystać w celu poprawy wydajności solvera z funkcją Bactracking. Trzy najczęściej podawane heurystyki dla prostych solverów do cofania to:
- Minimalna pozostała wartość (ile wartości jest nadal poprawnych dla tej zmiennej)
- Stopień heurystyczny (ile innych zmiennych wpływa na tę zmienną)
- Najmniejsza wartość ograniczająca (jaka wartość pozostawi najwięcej innych wartości dla innych zmiennych)
Pierwsze dwa są dość oczywiste i łatwe do wdrożenia. Najpierw wybierz zmienną, która ma najmniej wartości w swojej domenie, a jeśli istnieją powiązania, wybierz tę, która wpływa na większość innych zmiennych. W ten sposób, jeśli krok nadrzędny w rozwiązaniu wybrał złe zadanie, prawdopodobnie dowiesz się wcześniej, a tym samym zaoszczędzisz czas, jeśli wybierzesz zmienną o najmniejszej wartości, która wpływa na większość innych rzeczy.
Są one proste, jasno zdefiniowane i łatwe do wdrożenia.
Najmniejsza wartość ograniczająca nie jest jasno określona, gdziekolwiek spojrzałem. Sztuczna inteligencja: nowoczesne podejście (Russel i Norvig) mówi tylko:
Preferuje wartość, która wyklucza najmniejszą liczbę opcji dla sąsiednich zmiennych na wykresie ograniczeń.
Wyszukiwanie „najmniej ograniczającej wartości” ujawniło tylko wiele pokazów slajdów uniwersyteckich opartych na tym podręczniku, bez dalszych informacji na temat tego, jak można to zrobić algorytmicznie.
Jedynym przykładem podanym dla tej heurystyki jest przypadek, w którym jeden wybór wartości eliminuje wszystkie wybory dla sąsiedniej zmiennej, a drugi nie. Problem z tym przykładem polega na tym, że jest to trywialny przypadek, który zostałby natychmiast wyeliminowany, gdy potencjalne przypisanie zostanie sprawdzone pod kątem zgodności z ograniczeniami problemu. Tak więc we wszystkich przykładach, które mogłem znaleźć, heurystyka o najmniejszej wartości w rzeczywistości w żaden sposób nie poprawiła wydajności solvera, z wyjątkiem niewielkiego negatywnego efektu dodania nadmiarowej kontroli.
Jedyne, co mogę wymyślić, to przetestować możliwe przypisania sąsiednich zmiennych dla każdego przypisania i policzyć liczbę możliwych przypisań sąsiadów, które istnieją dla każdego możliwego przypisania tej zmiennej, a następnie uporządkować wartości dla tej zmiennej na podstawie liczby dostępnych przypisań sąsiadów, jeśli ta wartość zostanie wybrana. Nie rozumiem jednak, w jaki sposób poprawiłoby to losowość, ponieważ wymaga to zarówno przetestowania wielu kombinacji zmiennych, jak i sortowania na podstawie wyników zliczania.
Czy ktoś może podać bardziej użyteczny opis wartości najmniej ograniczającej i wyjaśnić, w jaki sposób ta wersja wartości najmniej ograniczającej rzeczywiście przyniosłaby poprawę?