Sztuczna inteligencja/SI Ćwiczenia 5: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Jarabas (dyskusja | edycje)
Jarabas (dyskusja | edycje)
Rozwiązanie zadania 1
Linia 6: Linia 6:
'''Rozwiązanie'''  
'''Rozwiązanie'''  
<div class="mw-collapsible-content" style="display:none">
<div class="mw-collapsible-content" style="display:none">
% Przykładowy zestaw; lista przedmiotów, przedmiot to [Waga Cena]
zestaw([[1,10],[10,1],[11,10]]).
% Najlepszy plecak będzie zapamiętywany dynamicznie.
:- dynamic najlepszy/2.
% Główny predykat, wywołując podaje się zestaw danych, pojemność plecaka, w
% ostatniej zmiennej zwracana jest odpowiedź.
rozwiaz_plecak(Zestaw,Pojemnosc,Odpowiedz) :-
  assert(najlepszy([],0)),
  plecak(Zestaw,[],Pojemnosc),
  najlepszy(Odpowiedz,_),
  retract(najlepszy(_,_)).
% Rozgałęzienie drzewa przeszukiwań - 2^N; rozgałęzienie przy decyzji: przyjmij
% lub odrzuć przedmiot.
plecak([P|PReszta],Plecak,Pojemnosc) :-
  plecak(PReszta,Plecak,Pojemnosc),            % Jedno poddrzewo bez danego przedmiotu.
  plecak(PReszta,[P|Plecak],Pojemnosc).        % Drugie podrzewo z przedmiotem w plecaku.
% Ocena liścia.
plecak([],Plecak,Pojemnosc) :-
  ocen(Plecak,Wagi,Cena),
  Wagi =< Pojemnosc,
  najlepszy(_,NCena),
  NCena < Cena,
  retract(najlepszy(_,_)),              % Usuń zapamiętany najlepszy plecak.
  assert(najlepszy(Plecak,Cena)).      % Zapamiętaj nowy najlepszy plecak.
% Jeśli liść nie jest lepszy od najlepszego znalezionego plecaka.
plecak([],_,_).
% Predykat obliczający wartość i ciężar plecaka.
ocen([],0,0).
ocen([[Waga,Cena]|Reszta],SumaW,SumaC) :-
  ocen(Reszta,SumaWP,SumaCP),
  SumaW is Waga + SumaWP,
  SumaC is Cena + SumaCP.
</div>
</div>
</div>
</div>

Wersja z 14:08, 13 sie 2006

Zadanie 1

Zaimplementować w języku PROLOG predykat rozwiązujący problem plecakowy.

Rozwiązanie

Zadanie 2

Zaimplementować w języku PROLOG predykat rozwiązujący problem poszukiwania najkrótszej drogi w grafie.

Rozwiązanie

Zadanie 3

Napisać program poszukujący drogi w labiryncie metodą w głąb i wszerz.

Rozwiązanie

Zadanie 4

Rozważmy drzewo genealogiczne. Załóżmy, że krawędzie są skierowane od rodziców w kierunku dzieci. W którym kierunku - zgodnie czy przeciwnie do skierowania krawędzi - lepiej jest prowadzić przeszukiwanie drzewa, chcąc stwierdzić, że X jest prapradziadkiem Y?

Rozwiązanie