Programowanie niedeterministyczne - Nondeterministic programming

Niedeterministyczny programowanie język to język , który może określić, w określonych punktach programu (zwane „punkty choice”), różne alternatywy dla przebiegu programu . W przeciwieństwie do instrukcji if-then , metoda wyboru między tymi alternatywami nie jest bezpośrednio określona przez programistę; program musi decydować w czasie wykonywania pomiędzy alternatywami, za pomocą jakiejś ogólnej metody stosowanej do wszystkich punktów wyboru. Programista określa ograniczoną liczbę alternatyw, ale program musi później wybierać między nimi. („Wybierz” jest w rzeczywistości typową nazwą operatora niedeterministycznego). Można utworzyć hierarchię punktów wyboru, z wyborami wyższego poziomu prowadzącymi do gałęzi, które zawierają w sobie wybory niższego poziomu.

Jedna z metod z wyboru jest realizowana w systemach cofania (takich jak Amb , lub unifikacja w Prologu ), w których niektóre alternatywy mogą „zawieść”, powodując cofanie się programu i wypróbowywanie innych alternatyw. Jeśli wszystkie alternatywy zawiodą w określonym punkcie wyboru, wtedy cała gałąź zawiedzie, a program cofnie się dalej, do starszego punktu wyboru. Jedną z komplikacji jest to, że ponieważ każdy wybór jest niepewny i można go zmienić, system musi być w stanie przywrócić stare stany programu poprzez cofnięcie efektów ubocznych spowodowanych częściowym wykonaniem gałęzi, która ostatecznie nie powiodła się.

Inną wybraną metodą jest uczenie ze wzmocnieniem, zawarte w systemach takich jak Alisp . W takich systemach, zamiast cofać się wstecz, system śledzi pewną miarę sukcesu i uczy się, które wybory często prowadzą do sukcesu i w jakich sytuacjach (zarówno stan programu wewnętrznego, jak i wkład środowiskowy mogą wpływać na wybór). Systemy te nadają się do zastosowań w robotyce i innych dziedzinach, w których śledzenie wstecz wiązałoby się z próbą cofnięcia czynności wykonywanych w dynamicznym środowisku, co może być trudne lub niepraktyczne.

Zobacz też

Bibliografia