Programowanie w Logice

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

Programowanie w Logice Przykłady programów. Przemysław Kobylański

Programowanie w Logice Struktury danych (Lista 2)

PROLOG INNE PRZYKŁADY MACIEJ KELM

Dana jest baza: kobieta(katarzyna). kobieta(anna). kobieta(maria). kobieta(marianna). kobieta(marta). Zdefiniujemy predykat kobiety/0 następująco:

Wprowadzenie do Sztucznej Inteligencji Laboratorium lista 0.2 Elementy języka Prolog: reguły i rekurencja. Przemysław Kobylański

Programowanie w logice Prolog 2

Programowanie w Logice

Programowanie w Logice

Systemy ekspertowe. Wnioskowanie w systemach regułowych. Część piąta. Autor Roman Simiński.

0 + 0 = 0, = 1, = 1, = 0.

Wprowadzenie do Sztucznej Inteligencji Laboratorium lista 0.4 Elementy języka Prolog: metaprogramowanie i struktury danych. Przemysław Kobylański

lekcja 8a Gry komputerowe MasterMind

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

Metoda Tablic Semantycznych

Pętla for. Wynik działania programu:

PRÓBNY EGZAMIN MATURALNY Z INFORMATYKI STYCZEŃ POZIOM ROZSZERZONY Część I

Programowanie deklaratywne

B jest globalnym pokryciem zbioru {d} wtedy i tylko wtedy, gdy {d} zależy od B i nie istnieje B T takie, że {d} zależy od B ;

Wykład 5 Listy leniwe

Wstęp do programowania

Grupy. Permutacje 1. (G2) istnieje element jednostkowy (lub neutralny), tzn. taki element e G, że dla dowolnego a G zachodzi.

Algorytmy i struktury danych

SUM Edukacja Techniczno Informatyczna Języki i Systemy Programowania. Wykład 3. dr Artur Bartoszewski - WYKŁAD: Języki i Systemy Programowania,

Wykład z równań różnicowych

Logika binarna. Prawo łączności mówimy, że operator binarny * na zbiorze S jest łączny gdy (x * y) * z = x * (y * z) dla każdego x, y, z S.

Logika intuicjonistyczna

Sztuczna Inteligencja Projekt

Programowanie w logice Prolog 1

Zależności funkcyjne

7. Pętle for. Przykłady

Teoretyczne podstawy informatyki

Metoda tabel semantycznych. Dedukcja drogi Watsonie, dedukcja... Definicja logicznej konsekwencji. Logika obliczeniowa.

Definicje wyższego poziomu

Programowanie w logice

Programowanie w Logice Środowisko programowania i dialog z systemem (Lista 0)

Algorytmy z powrotami. Algorytm minimax

CLP Programowanie logiczne z ograniczeniami.

Lekcja 3: Pierwsze kroki z Pythonem. Pętle

Macierze symetryczne i nasycone grupy permutacji

PODSTAWY SZTUCZNEJ INTELIGENCJI

Elementy logiki. Wojciech Buszkowski Wydział Matematyki i Informatyki UAM Zakład Teorii Obliczeń

Programowanie logiczne a negacja

Programowanie w Logice Gramatyki metamorficzne. Przemysław Kobylański na podstawie [CM2003] i [SS1994]

Deklarowania faktów dotyczących obiektów i związków między nimi. Definiowania reguł dotyczących obiektów i związków między nimi.

PRZEWODNIK PO PRZEDMIOCIE

Podstawy i języki programowania

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy

... (środowisko) minut

ELEMENTY KOMBINATORYKI

W przeciwnym wypadku wykonaj instrukcję z bloku drugiego. Ćwiczenie 1 utworzyć program dzielący przez siebie dwie liczby

Sortowanie topologiczne skierowanych grafów acyklicznych

Podstawy systemów kryptograficznych z kluczem jawnym RSA

Czas pracy: 60 minut

Programowanie deklaratywne

Algorytm genetyczny (genetic algorithm)-

Wymagania, specyfikacja i projektowanie

Uwagi wprowadzajace do reguł wnioskowania w systemie tabel analitycznych logiki pierwszego rzędu

Zestaw 12- Macierz odwrotna, układy równań liniowych

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

LOGIKA I TEORIA ZBIORÓW

Efektywność Procedur Obliczeniowych. wykład 5

Programowanie genetyczne, gra SNAKE

Matematyka Dyskretna. Andrzej Szepietowski. 25 czerwca 2002 roku

Wstęp do programowania

GRUPA ĆWICZENIOWA (ZAKREŚL ODPOWIEDNIĄ): MG8 MG13 MB13 MD13 BT13

0.1. Logika podstawowe pojęcia: zdania i funktory, reguły wnioskowania, zmienne zdaniowe, rachunek zdań.

Spacery losowe generowanie realizacji procesu losowego

Obóz Naukowy Olimpiady Matematycznej Gimnazjalistów

Metoda bisekcji (inaczej połowienia przedziału lub równych podziałów)

PRÓBNY EGZAMIN MATURALNY Z INFORMATYKI STYCZEŃ Arkusz I. Czas pracy: 60 minut Liczba punktów do uzyskania: 15

Matematyka dyskretna

Kongruencje pierwsze kroki

Algorytmy i struktury danych

Co to jest algorytm? przepis prowadzący do rozwiązania zadania, problemu,

Blockly Kodowanie pomoc.

Algorytmy asymetryczne

3. Instrukcje warunkowe

EGZAMIN MATURALNY Z INFORMATYKI 13 MAJA 2019 POZIOM PODSTAWOWY. Godzina rozpoczęcia: 14:00 CZĘŚĆ I WYBRANE: Czas pracy: 75 minut

5. Algebra działania, grupy, grupy permutacji, pierścienie, ciała, pierścień wielomianów.

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania

Elementy języka Prolog

Podstawy Sztucznej Inteligencji (PSZT)

Projekt 4: Programowanie w logice

Specyfikacja: Dane: Niepusty, skończony ciąg liczb dodatnich. Wynik:...

Paradygmaty dowodzenia

W powyższym kodzie utworzono wyliczenie dni tygodnia.

Testowanie i walidacja oprogramowania

Projekty zaliczeniowe Podstawy Programowania 2012/2013

Chcąc wyróżnić jedno z działań, piszemy np. (, ) i mówimy, że działanie wprowadza w STRUKTURĘ ALGEBRAICZNĄ lub, że (, ) jest SYSTEMEM ALGEBRAICZNYM.

Analiza algorytmów zadania podstawowe

LOGIKA MATEMATYCZNA. Poziom podstawowy. Zadanie 2 (4 pkt.) Jeśli liczbę 3 wstawisz w miejsce x, to które zdanie będzie prawdziwe:

Propozycje rozwiązań zadań otwartych z próbnej matury rozszerzonej przygotowanej przez OPERON.

Sztuczna Inteligencja Projekt

PRÓBNY EGZAMIN MATURALNY Z INFORMATYKI 2016 ROK

Metody Rozmyte i Algorytmy Ewolucyjne

Wstęp do programowania

Wprowadzenie do Sztucznej Inteligencji Laboratorium lista 0.1 Elementy języka Prolog: fakty i zapytania. Przemysław Kobylański

Treść wykładu. Układy równań i ich macierze. Rząd macierzy. Twierdzenie Kroneckera-Capellego.

EGZAMIN, ANALIZA 1A, zadań po 5 punktów, progi: 30=3.0, 36=3.5, 42=4.0, 48=4.5, 54=5.0

Transkrypt:

Programowanie w Logice Przeszukiwanie rozwiązań Przemysław Kobylański

Generowanie wszystkich rozwiązań Prolog nie tylko potrafi sprawdzić czy dana spełnia warunek ale również potrafi wygenerować wszystkie dane spełniające warunek. Jest to możliwe dzięki temu, że Prolog wyraża relacje a nie tylko funkcje (dopuszcza dowolne przepływy danych).

Generowanie wszystkich rozwiązań % perm ( L1, L2 ) zachodzi, gdy % l i s t a L2 j e s t permutacja l i s t y L1. perm ( [ ], [ ] ). perm ( L1, [X L3 ] ) : s e l e c t (X, L1, L2 ), perm ( L2, L3 ).

Generowanie wszystkich rozwiązań Generowanie listy [X L3] będącej permutacją danej listy L1: X = L1 = L2 select(x, L1, L2) perm(l2, L3) X = L3 Wybór elementu X na tyle sposobów jaka jest długość listy L1.

Generowanie wszystkich rozwiązań?- perm([1, 2, 3], [3, 1, 2]). true.?- perm([1, 2, 3], [3, 2, 2]). false.?- perm([1, 2, 3], X). X = [1, 2, 3] ; X = [1, 3, 2] ; X = [2, 1, 3] ; X = [2, 3, 1] ; X = [3, 1, 2] ; X = [3, 2, 1] ; false.

Generowanie i testowanie Niech rozwiązanie(x) będzie warunkiem generującym wszystkie rozwiązania. Niech dobre(x) będzie warunkiem sprawdzającym czy rozwiązanie jest dobre. Wówczas warunek rozwiązanie(x), dobre(x) generuje wszystkie dobre rozwiązania. Generowanie odbywa się zgodnie ze schematem następującej pętli: wygeneruj kolejne X NIE czy X jest dobre? TAK

Generowanie i testowanie Zaprezentujemy program znajdujący ustawienie N hetmanów na szachownicy o N wierszach i N kolumnach. Ustawienie będziemy kodować w postaci permutacji listy liczb od 1 do N. Na i-tej pozycji takiej permutacji zapisany będzie numer wiersza, w którym stoi hetman z i-tej kolumny. Gdy ustawimy hetmany zgodnie z permutacją, to żadne dwa nie będą się biły w kolumnie i w wierszu. Pozostaje do sprawdzenia, czy żadne dwa nie biją się po ukosie.

Generowanie i testowanie dobra (X) : \+ z l a (X ). % z l a (X) zachodzi, gdy wsrod hetmanow u s t a w i o n y % z g o d n i e z permutacja X sa dwa k t o r e s i e b i j a z l a (X) : append (_, [ Wi L1 ], X), append ( L2, [ Wj _], L1 ), length ( L2, K), abs (Wi Wj) =:= K + 1. % abs (Wi Wj) = o d l e g l o s c w p i o n i e % K + 1 = o d l e g l o s c w p o z i o m i e

Generowanie i testowanie % hetmany (N, P) zachodzi, gdy permutacja P % koduje poprawne u s t a w i e n i e N hetmanow hetmany (N, P) : n u m l i s t ( 1, N, L ), perm (L, P), dobra (P ).

Generowanie i testowanie?- hetmany(4, X). X = [2, 4, 1, 3] ; X = [3, 1, 4, 2] ; false.?- findall(x, hetmany(8, X), L), length(l, N). L = [[1, 5, 8, 6, 3, 7, 2, 4], [......]...], N = 92. Predykat findall(x, p(x), L) tworzy listę L wszystkich wartości X spełniających warunek p(x).

Odcięcie Jeśli warunek dostarcza wiele wartości, to stawiając po nim wykrzyknik (odcięcie), zostanie znaleziona tylko pierwsza z nich (odcinamy poszukiwanie kolejnych). Predykat! jest zawsze spełniony ale wpływa na poszukiwanie rozwiązać i nie dopuszcza do wykonania nawrotu celem szukania kolejnego rozwiązania.?- member(x, [1, 2, 3]), X > 1.5. X = 2 ; X = 3.?- member(x, [1, 2, 3]),!, X > 1.5. false.

Odcięcie?- member(x, [1, 2, 3]),!, X > 1.5. X = 1 udane przejście z lewa na prawo zakaz przejścia z prawa na lewo nawrót niepowodzenie 1 > 1.5 odpowiedź false Odcięcie działa w celu jak błona półprzepuszczalna : pozwala przejść z lewa na prawo ale nie odwrotnie.

Odcięcie Zupełnie inaczej działa odcięcie jeśli użyto go w ciele reguły. Example (Algorytm Świętego Mikołaja <wersja 1>) Święty Mikołaj stosuje poniższe reguły do rozstrzygnięcia czy dziecko X dostanie nagrodę Y albo karę Y. d o s t a n i e (X, Y) : g r z e c z n e (X), nagroda (Y ). d o s t a n i e (X, Y) : \+ g r z e c z n e (X), kara (Y ). W powyższym przykładzie, jeśli dziecko X nie było grzeczne, to warunek grzeczne(x) jest sprawdzany dwukrotnie. W takim przypadku zawodzi warunek grzeczne(x) z pierwszej reguły predykatu dostanie(x, Y) i Prolog sięga do drugiej reguły. W drugiej regule sprawdzane jest ponownie czy dziecko było grzeczne i jeśli warunek ten zawodzi, to wybierana jest dla niego kara Y.

Odcięcie Example (Algorytm Świętego Mikołaja <wersja 2>) d o s t a n i e (X, Y) : g r z e c z n e (X), nagroda (Y ). d o s t a n i e (X, Y) : kara (Y ). Ta wersja nie jest poprawna. Jeśli będziemy próbowali wywnioskować wszystko co może dostać grzeczne dziecko, to po wyczerpaniu wszystkich nagród, predykat stwierdzi na podstawie drugiej reguły, że należy dawać mu kolejne kary.

Odcięcie Example (Algorytm Świętego Mikołaja <wersja 3>) d o s t a n i e (X, Y) : g r z e c z n e (X),!, nagroda (Y ). d o s t a n i e (X, Y) : kara (Y ). Ta wersja jest poprawna. Jeśli dziecko X jest grzeczne, to pierwsza reguła odpowie jakie nagrody może ono dostać. Jeśli wyczerpią się już wszystkie nagrody, to przy próbie wycofania się do sprawdzania czy dziecko jest grzeczne, odcięcie! spowoduje niepowodzenie i porzucenie dalszego sprawdzania warunku dostanie(x, Y), nawet jeśli są jeszcze jakieś inne reguły w jego definicji.

Przykłady zastosowań odcięcia Example (once/1) Predykat once(goal) znajduje pierwszą odpowiedź na cel Goal i nie będzie szukał kolejnych. once ( Goal ) : Goal,!.

Przykłady zastosowań odcięcia Example (Negacja) Predykat \+ Goal zawodzi gdy cel Goal jest spełniony. W przeciwnym przypadku jest spełniony. \+ Goal : Goal,!, f a i l. \+ _.

Przykłady zastosowań odcięcia Example (forall/2) Predykat forall(generator, Test) sprawdza czy wszystkie dane generowane warunkiem Generator spełniają również warunek Test. f o r a l l ( Generator, Test ) : \+ ( Generator, \+ Test ).

Przykłady zastosowań odcięcia Example (Własna wersja var/1) myvar (X) : \+ \+ X = a, \+ \+ X = b. Pierwszy warunek \+ \+ X = a jest spełniony tylko gdy X jest zmienną (unifikuje się z czymkolwiek) lub jest stałą a, przy czym jeśli X jest zmienną to nic nie zostanie pod nią podstawione. Drugi warunek \+ \+ X = a jest spełniony tylko gdy X jest zmienną (unifikuje się z czymkolwiek) lub jest stałą b, przy czym jeśli X jest zmienną to nic nie zostanie pod nią podstawione. Zatem oba warunki spełnione są tylko gdy X jest zmienną i nic nie zostanie pod nią podstawione.