Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:prolog:prolog_lab:reprezentacja_wiedzy [2009/03/17 20:03] holownia |
pl:prolog:prolog_lab:reprezentacja_wiedzy [2019/06/27 15:50] (aktualna) |
====== LAB: Reprezentacja wiedzy w Prologu, szukanie rozwiązań ====== | ====== LAB: Reprezentacja wiedzy w Prologu, szukanie rozwiązań ====== |
| |
FIXME Przemyśleć całość i poprawić cut. | |
| |
===== -. Reprezentacja wiedzy ===== | ===== -. Reprezentacja wiedzy ===== |
</code> | </code> |
| |
Dla celu a(X) X zostaje zunifikowany z 1 - c(1). Reguła jest prawdziwa dla X=2, ale Prolog nie znajdzie takiego rozwiązania, bo uniemożliwiony został nawrót. d(1) przy takiej bazie wiedzy nie jest prawdziwe. | Dla celu a(X) X nie zostanie zunifikowany! (odp. interpretera: No.) Reguła jest prawdziwa dla X=2, ale Prolog nie znajdzie takiego rozwiązania, bo uniemożliwiony został nawrót. d(1) przy takiej bazie wiedzy nie jest prawdziwe. |
| |
__Przykład 3__:\\ | __Przykład 3__:\\ |
Po napotkaniu cut odcinane są także pozostałe reguły predykatu. Dlaczego wobec tego a(3) jednak zwraca prawdę? | Po napotkaniu cut odcinane są także pozostałe reguły predykatu. Dlaczego wobec tego a(3) jednak zwraca prawdę? |
| |
Przykłady inspirowane [[http://en.wikibooks.org/wiki/Programming:Prolog_Cuts_and_Negation|Prolog Cuts and Negation]] | Przykłady inspirowane [[http://en.wikibooks.org/wiki/Prolog/Cuts_and_Negation|Prolog Cuts and Negation]] |
| |
**Ćwiczenie** | **Ćwiczenie** |
Przy ich użyciu można skonstruować odpowiednik operatora \+ (negacja) - predykat not/0, który z logicznego punktu widzenia mógłby wyglądać tak: | Przy ich użyciu można skonstruować odpowiednik operatora \+ (negacja) - predykat not/0, który z logicznego punktu widzenia mógłby wyglądać tak: |
| |
not(P) :- P,!,fail;true. | <code prolog> |
| not(P) :- P,!,fail;true. |
| </code> |
| |
| albo w nieco mniej zwartej, ale bardziej czytelnej postaci: |
| |
| <code prolog> |
| not(P) :- P,!,fail. |
| not(_). |
| </code> |
| |
| |
Proszę przeanalizować poniższe problemy, w miarę czasu i możliwości. | Proszę przeanalizować poniższe problemy, w miarę czasu i możliwości. |
| |
| ==== Minecraft ==== |
| Zastanówmy się nad próbą implementacji prostej gry typu [[http://pl.wikipedia.org/wiki/Minecraft|Minecraft]]. Kluczowym elementem gry jest silnik wokselowy, który odpowiada za renderowania ogromnego świata przy użyciu prostych klocków zwanych [[http://pl.wikipedia.org/wiki/Woksel|wokselami]]. Zaczniemy od rysowania przykładowego woksela. Proszę uruchomić program {{:pl:prolog:prolog_lab:cuboid.pl|}} (wymagane XPCE) i przeanalizować jego działanie. |
| |
| <code prolog> |
| ?- cuboid(2,2,2). |
| </code> |
| |
| Następnie proszę zapoznać się z kodem odpowiadającym za animację {{:pl:prolog:prolog_lab:animation.pl|}}: |
| |
| <code prolog> |
| ?- sm. |
| </code> |
| |
| Zadania: |
| - Przerobić predykat ''cuboid'' tak, żeby można było sprecyzować jego pozycję w przestrzeni |
| - Napisać predykat ''cuboids'', który przyjmuje listę współrzędnych i rysuje w nich sześciany o zadanej długości boku |
| - Przy pomocy predykatu ''cuboids'' należy zamodelować [[http://i.ytimg.com/vi/u1bX8kEy0pg/maxresdefault.jpg?|złożony obiekt ze świata Minecraft]] |
| - Bazując na kodzie z ''animation.pl'' należy wprawić krowę w ruch sinusoidalny, imitujący [[https://www.youtube.com/watch?v=QH2-TGUlwu4|kota z filmu]] |
| - [Dla odważnych] dodać do animacji [[https://archive.org/details/nyannyannyan|dźwięk]] podobny do tego z [[https://www.youtube.com/watch?v=QH2-TGUlwu4|filmu]] |
| |
| Pytania: |
| - Czy rozsądne jest rysowanie wszystkich klocków? Jak wykryć, które klocki są widoczne z perspektywy gracza? Pomocny może okazać się [[http://et1337.com/2015/02/18/the-poor-mans-voxel-engine/#|link]] |
| - Czy możliwe jest zrobienie w podobny sposób imitacji poniższego [[http://goo.gl/YroZm|filmu]]? |
| |
==== Zaawansowana Mapa ==== | ==== Zaawansowana Mapa ==== |
| |
Rozważmy problem [[programy#tematkolorowanie_mapy|kolorowania mapy]]. | Rozważmy problem [[programy#kolorowanie_mapy|kolorowania mapy]]. |
| |
W jaki sposób policzyć ile jest rozwiązań problemu? | W jaki sposób policzyć ile jest rozwiązań problemu? |
| |
==== Zagadka Einsteina ==== | ==== Zagadka Einsteina ==== |
Jedna z możliwych postaci zagadki Einstein'a: | Jedna z możliwych postaci zagadki Einstein'a (patrz [[http://en.wikipedia.org/wiki/Einstein_puzzle]], [[http://pl.wikipedia.org/wiki/Zagadka_Einsteina]]). |
| |
5 ludzi różnych narodowości zamieszkuje 5 domów w 5 różnych kolorach. Wszyscy palą papierosy 5 różnych marek i piją 5 różnych napojów. Hodują zwierzęta 5 różnych gatunków. Który z nich hoduje rybki? | 5 ludzi różnych narodowości zamieszkuje 5 domów w 5 różnych kolorach. Wszyscy palą papierosy 5 różnych marek i piją 5 różnych napojów. Hodują zwierzęta 5 różnych gatunków. Który z nich hoduje rybki? |
**Ćwiczenie** | **Ćwiczenie** |
| |
Proszę pobrać kod {{einstein.pl}} i zastanowić się na jego działaniem. | Proszę pobrać kod {{einstein2.pl}} i zastanowić się na jego działaniem. |
| |
Uzyskanie poprawnego rozwiązania: | Uzyskanie poprawnego rozwiązania: |
===== Komentarze ==== | ===== Komentarze ==== |
| |
* ciężko zdażyć zrealizować całe laboratorium: rodzina + flight planner zajmuje 70 min --- //[[wojnicki@agh.edu.pl|Igor Wojnicki]] 2008/11/05 15:41// | |