CLP Programowanie logiczne z ograniczeniami.

Podobne dokumenty
Adam Meissner SZTUCZNA INTELIGANCJA

Adam Meissner Instytut Automatyki, Robotyki i Inżynierii Informatycznej Politechniki Poznańskiej. Adam Meissner

Przeszukiwanie z nawrotami. Wykład 8. Przeszukiwanie z nawrotami. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 238 / 279

Adam Meissner SZTUCZNA INTELIGANCJA

Projekt 4: Programowanie w logice

OPTYMALIZACJA HARMONOGRAMOWANIA MONTAŻU SAMOCHODÓW Z ZASTOSOWANIEM PROGRAMOWANIA W LOGICE Z OGRANICZENIAMI

Technologie informacyjne - wykład 12 -

Metody numeryczne w przykładach

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Algorytm. Słowo algorytm pochodzi od perskiego matematyka Mohammed ibn Musa al-kowarizimi (Algorismus - łacina) z IX w. ne.

Algorytmy sztucznej inteligencji

Algorytm. Słowo algorytm pochodzi od perskiego matematyka Mohammed ibn Musa al-kowarizimi (Algorismus - łacina) z IX w. ne.

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

W. Guzicki Próbna matura, grudzień 2014 r. poziom rozszerzony 1

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Wprowadzenie do Prologa

Pojęcie bazy danych. Funkcje i możliwości.

Excel - użycie dodatku Solver

Problem spełnienia ograniczeń. w oparciu o: K. Marriott, P.J. Stuckey. Programming with Constraints. An Introduction

KONKURS MATEMATYCZNY

Algorytm. Krótka historia algorytmów

Informatyka klasa III Gimnazjum wymagania na poszczególne oceny

ZASTOSOWANIE PROGRAMOWANIA LINIOWEGO W ZAGADNIENIACH WSPOMAGANIA PROCESU PODEJMOWANIA DECYZJI

Programowanie w Logice

XV WOJEWÓDZKI KONKURS Z MATEMATYKI

ZAGADNIENIE TRANSPORTOWE

PRÓBNY EGZAMIN MATURALNY MATEMATYKA. MaturoBranie

Pendolinem z równaniami, nierównościami i układami

Jarosław Wróblewski Matematyka Elementarna, lato 2012/13. Czwartek 28 marca zaczynamy od omówienia zadań z kolokwium nr 1.

WPROWADZENIE DO SZTUCZNEJ INTELIGENCJI

Kierunek: Informatyka Poziom studiów: Studia I stopnia Forma studiów: Stacjonarne. audytoryjne. Wykład Ćwiczenia

Definicje. Algorytm to:

Na rysunku przedstawiony jest wykres funkcji f(x) określonej dla x [-7, 8].

Z nowym bitem. Informatyka dla gimnazjum. Część II

Algorytmika i pseudoprogramowanie

Algorytm. Krótka historia algorytmów

Geometria analityczna

PRZEWODNIK PO PRZEDMIOCIE

WYMAGANIA EDUKACYJNE Z INFORMATYKI dla klasy III gimnazjalnej, Szkoły Podstawowej w Rychtalu

PRZEWODNIK PO PRZEDMIOCIE

Jarosław Wróblewski Matematyka Elementarna, zima 2012/13

Plan wykładu. Przykład. Przykład 3/19/2011. Przykład zagadnienia transportowego. Optymalizacja w procesach biznesowych Wykład 2 DECYZJA?

UZUPEŁNIA ZDAJĄCY miejsce na naklejkę

KONKURS MATEMATYCZNY

WYMAGANIA EDUKACYJNE

STOWARZYSZENIE NA RZECZ EDUKACJI MATEMATYCZNEJ KOMITET GŁÓWNY OLIMPIADY MATEMATYCZNEJ JUNIORÓW SZCZYRK 2017

Prolog (Pro-Logic) Programowanie w Logice. Dr inż. Piotr Urbanek

Algorytmy, reprezentacja algorytmów.

Model odpowiedzi i schemat oceniania do arkusza I

Programowanie deklaratywne

INFORMATYKA W SZKOLE. Podyplomowe Studia Pedagogiczne. Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227

istocie dziedzina zajmująca się poszukiwaniem zależności na podstawie prowadzenia doświadczeń jest o wiele starsza: tak na przykład matematycy

Optymalizacja procesów technologicznych przy zastosowaniu programowania liniowego

O LICZBACH NIEOBLICZALNYCH I ICH ZWIĄZKACH Z INFORMATYKĄ

Zadania przygotowawcze do konkursu o tytuł NAJLEPSZEGO MATEMATYKA KLAS PIERWSZYCH I DRUGICH POWIATU BOCHEŃSKIEGO rok szk. 2017/2018.

a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10]

Część II. Zadanie 3.2. (0 3)

Liczby zmiennoprzecinkowe i błędy

Metoda Różnic Skończonych (MRS)

Matematyka licea ogólnokształcące, technika

Zakładane efekty kształcenia dla kierunku Wydział Telekomunikacji, Informatyki i Elektrotechniki

SCENARIUSZ LEKCJI Z MATEMATYKI. opracowała Hanna Szmyt

Wybrane metody przybliżonego. wyznaczania rozwiązań (pierwiastków) równań nieliniowych

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny

Przykładowe rozwiązania

Szukanie rozwiązań funkcji uwikłanych (równań nieliniowych)

LUBELSKA PRÓBA PRZED MATURĄ 2017 klasa 2 (pp)

Heurystyki. Strategie poszukiwań

Języki programowania deklaratywnego

PRÓBNY EGZAMIN MATURALNY Z NOWĄ ERĄ

Równania różniczkowe zwyczajne pierwszego rzędu, cd

Podstawy Programowania Algorytmy i programowanie

Zad. 1 Liczba jest równa A B C D. Zad. 2 Liczba log16 jest równa A 3log2 + log8 B log4 + 2log3 C 3log4 log4 D log20 log4

PRZEWODNIK PO PRZEDMIOCIE

Alan M. TURING. Matematyk u progu współczesnej informatyki

Próbny egzamin maturalny z matematyki Poziom rozszerzony

Metody Programowania

Jarosław Wróblewski Matematyka Elementarna, zima 2013/14. Czwartek 21 listopada zaczynamy od omówienia zadań z kolokwium nr 2.

Wymagania edukacyjne z matematyki w klasie III gimnazjum

EFEKTY KSZTAŁCENIA DLA KIERUNKU STUDIÓW INFORMATYKA

Paradygmaty programowania

Zagadnienia egzaminacyjne INFORMATYKA. Stacjonarne. I-go stopnia. (INT) Inżynieria internetowa STOPIEŃ STUDIÓW TYP STUDIÓW SPECJALNOŚĆ

SCENARIUSZ LEKCJI. TEMAT LEKCJI: Projektowanie rozwiązania prostych problemów w języku C++ obliczanie pola trójkąta

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy

EGZAMIN MATURALNY W ROKU SZKOLNYM 2014/2015

Systemy baz danych w zarządzaniu przedsiębiorstwem. W poszukiwaniu rozwiązania problemu, najbardziej pomocna jest znajomość odpowiedzi

Projekt Era inżyniera pewna lokata na przyszłość jest współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Teoria. a, jeśli a < 0.

PODSTAWY SZTUCZNEJ INTELIGENCJI

Czas pracy 170 minut

ROZWIĄZYWANIE UKŁADÓW RÓWNAŃ NIELINIOWYCH PRZY POMOCY DODATKU SOLVER PROGRAMU MICROSOFT EXCEL. sin x2 (1)

PROLOG. Prolog. Programowanie, W.F. Clocksin, C.S. Mellish, HELION Prolog, język sztucznej inteligencji, Eugeniusz Gatnar, Katarzyna Stąpor, Wyd.

1 Wprowadzenie do algorytmiki

I) Reszta z dzielenia

EGZAMIN MATURALNY W ROKU SZKOLNYM 2014/2015

Jarosław Wróblewski Matematyka Elementarna, zima 2011/12

PRZYKŁADOWY ARKUSZ EGZAMINACYJNY Z MATEMATYKI

Repetytorium z matematyki 3,0 1,0 3,0 3,0. Analiza matematyczna 1 4,0 2,0 4,0 2,0. Analiza matematyczna 2 6,0 2,0 6,0 2,0

Egzamin wstępny z Matematyki 1 lipca 2011 r.

Transkrypt:

CLP Programowanie logiczne z ograniczeniami. Wstęp Programowanie z ograniczeniami (Constraint Programming CP) stało się w ostatnich latach popularnym sposobem modelowania i rozwiązywania wielu problemów z dziedziny: -sztucznej inteligencji -problemów kombinatorycznych -przetwarzania mowy -harmonogramowania. -przetwarzania języków naturalnych (konstruowanie efektywnych parserów) -systemów baz danych (zapewnienie spójności danych) -biologii molekularnej (sekwencjonowanie DNA) -inżynierii elektronicznej (lokalizacja błędów) -projektowania obwodów drukowanych -etc. Jego główną zaletą jest deklaratywność, czyli sformułowanie zadania jest od razu programem rozwiązującym to zadanie. Programowanie to bazuje na modelowaniu zadania jako problemu spełnienia ograniczeń (Constraint Satisfacton Problem CSP). Ograniczenia są zależne od dziedzin zmiennych, których dotyczą. Najpopularniejszą i pierwszą dziedziną zmiennych była skończona dziedzina liczb naturalnych. Innymi dziedzinami są: skończone zbiory, drzewa, rekordy, przedziały rzeczywiste. Najistotniejszą cechą i największą zaleta programowania z ograniczeniami jest ich propagacja. Propagacja ograniczeń Sprawiła, że ta technika stała się najlepsza metodą dla wielu problemów kombinatorycznych. Zasadą działania propagacji jest usuwanie wartości nie spełniających ograniczeń z domen zmiennych. Języki do programowania z ograniczeniami mają możliwość wyrażania zmiennych z zakresu domen liczb naturalnych (najczęściej stosowane), przedziałów liczb rzeczywistych, zbiorów i innych. Aby zobrazować propagacje ograniczeń wprowadzimy prosty przykład: x {1..5}, y {1..6} Gdy na powyższe dwie zmienne wprowadzimy ograniczenie x>y+1, wtedy propagacja ograniczeń zredukuje powyższe domeny do następujących wartości: x {3, 4, 5}, y {1, 2, 3} ponieważ wartości {1, 2} z domeny x nie spełniają ograniczenia x>y+1 dla żadnej z wartości z domeny y. Podobnie można rozpatrywać wartości {4, 5, 6} z domeny y. Jednak możemy wprowadzić takie ograniczenie jak x+y=6, które nie usuwa żadnych wartości z domen. Ograniczenia nie są zazwyczaj tak proste ja to przedstawiono, często łączą ze sobą wiele zmiennych, a metody usuwania poszczególnych wartości, zwane algorytmami filtracyjnymi są bardzo złożone. Sama propagacja z ograniczeniami rzadko daje rozwiązanie. Dlatego jest ona zawsze łączona z dystrybucją i poszukiwaniem. Dystrybucja i poszukiwanie W większości przypadków propagacja ograniczeń nie prowadzi do rozwiązania (jak to

zostało przedstawione w powyższym przykładzie). Dlatego programowanie z ograniczeniami jest ściśle związane z dystrybucją połączoną z poszukiwaniem. Dystrybucja polega na wprowadzeniu dodatkowego ograniczenia (często jest to przyporządkowanie jednej wartości do zmiennej, a zadaniem dystrybucji jest odpowiednie wybranie zmiennej i wartości). Kiedy to nastąpi sprawdzana jest spójność poprzez propagację ograniczeń i istnieją trzy możliwości: - znalezione zostanie rozwiązanie (wszystkie zmienne mają po jednej wartości w swojej domenie), - domeny niektórych zmiennych zostaną zawężone, ale jednoznaczne rozwiązanie nie jest wciąż wyznaczone, więc dystrybucja jest dokonywana na kolejnej zmiennej, - dodatkowe ograniczenie jest niespójne z pozostałymi ograniczeniami, więc proces nawrotu jest dokonywany, a wybrana wartość z domeny wybranej zmiennej jest usuwana. Ten proces jest dokonywany iteracyjnie i jest nazywany poszukiwaniem. Poszukiwanie jest odpowiedzialne za zatrzymanie; po znalezieniu pierwszego rozwiązania lub pewnej liczby rozwiązań lub wszystkich rozwiązań. Poszukiwanie tworzy tzw. drzewo poszukiwań, gdzie każdy węzeł jest stanem zmiennej. Na Rys.1. przedstawiliśmy drzewo poszukiwań dla przykładu podanego powyżej. W językach do programowania w logice wywodzących się z Prologu poszukiwanie jest mechanizmem wbudowanym. Dlatego pierwsze języki, wciąż cieszące się powodzeniem bazują na Prologu (CHIP, Eclipse, GNU Prolog, SICStus) i noszą nazwę języków do programowania w logice z ograniczeniami (Constraint Logic Programming CLP). Jednak języki te poprzez swoją zamkniętą strukturę nie spełniają wymagań stawianych im przez programistów. Dlatego popularność zyskały biblioteki w C/C++, które umożliwiają korzystanie z zalet najpopularniejszego języka obiektowego, a dodatkowo pozwalają deklarować zmienne z określonych dziedzin, wprowadzać ograniczenia oraz wybierać strategię poszukiwania (ILOG Solver). Inne podejście prezentują języki do współbieżnego programowania z ograniczeniami. Najpopularniejszy z nich system Mozart, implementacja języka Oz,

posiada takie zalety jak: możliwość formułowania strategii poszukiwań, zagnieżdżonych ograniczeń, rozproszenia obliczeń oraz obiektowość. Porównanie dwóch języków GNU Prolog IF/Prolog Definiowanie dziedzin fd_domain(lista_zmiennych_lub_zmienna, min, max)ogranicza dziedzinę zmiennych z listy (lub zmiennej) do przedziału min..max. Predykat Zmienna in Zakres definiuje dziedzinę złożoną z liczb z zadanego zakresu.?- X in 1..8, Z in 12..27. Narzucanie ograniczeń (więzów) Relacje miedzy wyrażeniami arytmetycznymi zawierającymi zmienne są podobne jak w standardzie Prologu ale poprzedzone znakiem # X+Y#=3 jest ograniczeniem arytmetycznym na zmienne X,Y. Suma zmiennych musi być równa 3 (#=). Relacje miedzy wyrażeniami arytmetycznymi zawierającymi zmienne są podobne jak w standardzie Prologu ale poprzedzone znakiem??=,?=<,?>=, itp.?- X in 1..10, X?> 5, X?< 8. X = 6..7 Etykietowanie (tj. podstawianie pod zmienne wartości z ich zawężonych dziedzin) fd_labeling(lista_zmiennych)nadaje zmiennym wartości z ich dziedzin, tak aby spełnione były wszystkie ograniczenia (czyli rozwiązuje zagadnienie CSP).?- fd_domain(x,1,3), fd_domain(y,1,4), X+Y#=3, fd_labeling([x,y]) X=1 Y=2; X=2 Y=1 Służy do tego predykat indomain(zmienna), który podstawia pod zmienną kolejne wartości z jej dziedziny oraz predykat label(listazmiennych) etykietujący zmienne znajdujące się na liście.?- X in 1..10, X?< 3, indomain(x). X = 1 ; X = 2 ; Przykładowy program Znaleźć rozwiązanie następującego równania na słowach: S E N D +M O R E ------------------- M O N E Y

Send:- LD=[S,E,N,D,M,O,R,Y], fd_all_different(ld), fd_domain(ld,0,9), fd_domain([s,m],1,9), 1000*S+100*E+10*N+D + 1000*M+100*O+10*R+E #= 10000*M+1000*O+100*N+10*E+Y, fd_labeling(ld), write(ld). Send:- LD = [M,O,S,N,R,E,D,Y], Digits in 0..9, all_distinct(digits), 1000*S+100*E+10*N+D + 1000*M+100*O+10*R+E?= 10000*M+1000*O+100*N+10*E+Y, M?>= 1, S?>= 1, label(ld). %Rozw. % [S,E,N,D,M,O,R,Y] % [9,5,6,7,1,0,8,2] Inne przykłady: Przykład 1. (GNU Prolog) Rozwiąż układ równań z czterema niewiadomymi całkowitymi: a+4b+c=10 a+2c=5 b+c=3 uklad:- LD = [A, B, C], fd_domain(ld,-10,10), A+4*B+C#=10, A+2*C#=5, B+C#=3, fd_labeling(ld), write(ld). Rozwiązanie: % [A, B, C]=[3,2,1] Przykład 2. (IF/Prolog) Saper

Zmiennymi od A do N oznaczono pola leżące na brzegu odkrytego obszaru. Dziedzina każdej zmiennej jest zbiór dwuelementowy: 0 nie maminy 1 jest mina. Cyfry oznaczają liczbę min znajdujących się na ośmiu sąsiednich polach. Każdej cyfrze odpowiada jedno ograniczenie np. D + E + F + G + H + I? = 4. Poniższy predykat saper(listapol) ustala możliwe wartości dla zmiennych opisujących pola: saper(listapol) :- ListaPol = [A, B, C, D, E, F, G, H, I, J, K, L, M, N], ListaPol in 0..1, A+B?= 1, A+B+C+D?= 2, D?= 1, D+E+I?= 3, D+E+F+G+H+I?= 4, I?= 1, I+H+J?= 3, J?= 1, J+K?= 1, J+K+L+M+N?= 2, M+N?= 1, label(listapol). Jeśli w pewnym rozwiązaniu pole ma wartość 1 (ew. 0), to może zawiera minę (ew. może nie zawierać). Dopiero znajomość wszystkich rozwiązań pozwala zlokalizować miny.?- saper(x). % A B C D E F G H I J K L M N X = [0,1,0,1,1,0,0,1,1,1,0,0,0,1] ; X = [0,1,0,1,1,0,0,1,1,1,0,0,1,0] ; X = [1,0,0,1,1,0,0,1,1,1,0,0,0,1] ; X = [1,0,0,1,1,0,0,1,1,1,0,0,1,0] ; (10 ms) no Miny są na polach D, E, H, I oraz J, natomiast nie ma ich na polach C, F, G, K i L. Pozostałych pól nie można określić.

Przykład 3 (IF/Prolog) Znaleźć minimalna wartość wyrażenia 3 _ x y, dla x 2 {2, 3, 4}, y 2 {1, 2, 3, 4, 5}:?- X in 2..4, Y in 1..5, Z?= 3*X-Y, minimize_bb(label([x, Y]), Z). Predykat minimize_bb/2 służy do znajdowania minimum wartości funkcji celu: minimize_bb(label([x1,x2,...,xn]),optimum). Literatura Pisząc pracę korzystaliśmy z następujących dokumentów: 1. Metody sztucznej inteligencji autor Przemysław Kobylański www2.ioz.pwr.wroc.pl/ przemko/dyd/msi 2. PLANOWANIE ZAJĘĆ METODAMI PROGRAMOWANIA Z OGRANICZENIAMI autorzy Wojciech Legirski, Paweł Parys 3. referat Constraint Logic Programming = Programowanie logiczne z użyciem ograniczeń autorzy Tomasz Bielecki Janusz Marcinkowski. http://www-users.mat.uni.torun.pl/~fly/materialy/pl/referaty/clp/index.html