Historia pewnego trenera
Czy pokazując poprawność algorytmu, warto sięgnąć po matematyczne twierdzenia? Jak najbardziej! Przekonamy się o tym, rozważając problem zbalansowanego rozwoju w 2-wymiarowych systemach dodawania wektorów ( Vector Addition Systems - VAS), ubrany w historyjkę o zawodniku i trenerze.
Rozważmy trenera, który trenuje jednego zawodnika. Co pewien czas, na przykład co 3 miesiące, trener musi wybrać metodę treningową na kolejny okres z pewnej skończonej puli metod W tym celu korzysta z pomocy symulatora, w którym może sprawdzić, jakie umiejętności będzie miał dany zawodnik po zastosowaniu metody Zależy mu na znalezieniu takiego ciągu metod, aby po ich kolejnym zastosowaniu zawodnik rozwinął się w sposób zbalansowany - o tym, co przez to rozumiemy, za chwilę.
Zakładamy, że zawodnik jest w całości opisany przez parę liczb naturalnych, na przykład: szybkość, technika. Założymy również, że metody trenera to wektory liczb całkowitych, a aplikacja metody do zawodnika powoduje przesunięcie jego umiejętności o taki właśnie wektor, o ile nie powoduje to "zejścia" któregoś z parametrów poniżej zera.
Mówimy, że zawodnik jest z całą pewnością lepszy lub równy zawodnikowi co zapisujemy jeżeli jest co najmniej tak samo szybki i wyszkolony technicznie, czyli gdy jednocześnie i Jeżeli dodatkowo nie jest mu równy, czyli lub to piszemy na przykład Uważny Czytelnik od razu spostrzeże, że niektórzy zawodnicy są nieporównywalni, na przykład i Powiemy, że zawodnik rozwinął się (w sposób zbalansowany), jeżeli stał się z całą pewnością lepszy. Ścieżką treningową nazywamy dowolny ciąg metod treningowych a efekt zastosowania kolejno metod dla zawodnika będziemy oznaczać przez Ścieżkę nazwiemy rozwojową dla zawodnika jeżeli po jej zastosowaniu rozwinął się, czyli gdy
Przykład 1. Niech gdzie a Ścieżka jest rozwojowa dla gdyż a Nie jest ona rozwojowa dla ponieważ w tym punkcie nie można zastosować metody gdyż jest liczbą ujemną. Co więcej, dla nie ma żadnej ścieżki rozwojowej.
Sformułujemy teraz problem w sposób ścisły i zaproponujemy algorytm, który ma go rozwiązywać.
Problem (zbalansowanego rozwoju).
Dane wejściowe:
punkt (startowy)
skończony zbiór par liczb całkowitych (wektorów).
Pytanie: czy istnieje taki ciąg punktów kratowych w ćwiartce dodatniej , że dla każdego istnieje wektor taki, że oraz
Najpierw podamy bez dowodu pewien lemat pomocniczy.
Lemat 1. Istnieje ścieżka rozwojowa z wtedy i tylko wtedy, gdy istnieje ścieżka rozwojowa z pewnego punktu osiągalnego z (czyli takiego, że dla pewnej ścieżki ).
Mając na uwadze powyższy lemat, będziemy zajmować się pytaniem, czy jest punkt osiągalny z z którego istnieje ścieżka rozwojowa. Równoważnie: szukamy ścieżki takiej, że dla jakiegoś
Algorytm. Konstruujemy kandydata na przez back-tracking, czyli "jak nie wyjdzie, to zrób krok wstecz i pójdź w innym kierunku": będąc w punkcie aplikujemy niezaaplikowaną do tej pory w tym punkcie metodę (o ile jest taka), otrzymując kolejny punkt na ścieżce Gdy "nie wyjdzie", czyli gdy jest mniejszy lub równy pewnemu obecnemu już na ścieżce, robimy "krok wstecz", czyli usuwamy ze ścieżki i cofamy się do Jeżeli z kolei jest większy od któregoś obecnego już na ścieżce, kończymy algorytm i zwracamy TAK, ponieważ ścieżka jest rozwojowa dla (por. lemat 1). Jeżeli algorytm nie może wykonać już żadnego kroku, zwraca NIE.
Przykład 2. Rozważmy następującą instancję problemu: gdzie Wówczas stosując powyższy algorytm, otrzymujemy drzewo ścieżek
Ścieżki nie da się kontynuować; w nie ma wektora, który po dodaniu do (3,5) miałby obie współrzędne nieujemne. Z kolei prowadzi do mniejszego punktu. Wreszcie prowadzi do większego.
Na pierwszy rzut oka algorytm po prostu działa. Okazuje się, że trochę tutaj przemilczeliśmy...
Ustalmy jakieś i Jest jasne, że jeżeli powyższy algorytm zatrzyma się i zwróci odpowiedź, to jest ona poprawna. Ale czy algorytm na pewno się zatrzymuje?
Skąd wiadomo, że każda ścieżka zostanie zakończona? Czy może się zdarzyć, że na pewnej ścieżce będziemy otrzymywać coraz inne nieporównywalne wartości, na przykład Czy trener może nigdy nie odejść od komputera? Okazuje się, że nie może tak się zdarzyć, a wynika to bezpośrednio z lematu Dicksona.
Lemat 2 (Dicksona). Niech to nieskończony ciąg punktów z Wówczas istnieją pewne dwa indeksy takie, że
A zatem, gdyby pewna ścieżka nigdy nie została zakończona, to wszystkie pary liczb na niej byłyby nieporównywalne, co przeczyłoby lematowi Dicksona.
Trener już się cieszy, że symulacje na pewno kiedyś się zakończą i wróci na treningi. Ale zaraz, zaraz… udowodniliśmy jedynie, że żadna ścieżka nie jest nieskończona. Czy jednak nie może być tak, że każda ścieżka jest skończona, ale jest nieskończenie wiele coraz dłuższych ścieżek? Wówczas nasz algorytm nigdy by się nie zatrzymał. Okazuje się, że tak nie może być, a odpowiada za to lemat Königa, zastosowany do drzewa konfiguracji symulatora.
Lemat 3 (Königa). Jeżeli w drzewie skierowanym każdy wierzchołek ma skończenie wiele następników i w nie ma nieskończonej ścieżki, to ma skończenie wiele wierzchołków.
Podsumowując dowód, na mocy Lematu Dicksona wszystkie ścieżki w drzewie konfiguracji symulatora są skończone, a więc na mocy Lematu Königa ma ono skończenie wiele wierzchołków. Wynika stąd, że algorytm zatrzyma się i, jak już zauważyliśmy, zwróci poprawną odpowiedź.
A jak rozwiązać ten problem w wymiarze większym niż 2? Pomocny okaże się artykuł autorstwa Wojciecha Czerwińskiego "Na granicy możliwości" (Delta 1/2014). Zachęcamy do jego lektury!