Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Project in XSB Prolog Επεξεργασία και Αναπαράσταση Γνώσης Άνοιξη 2007 Τμήμα Επιστήμης Υπολογιστών Πανεπιστημίου Κρήτης.

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "Project in XSB Prolog Επεξεργασία και Αναπαράσταση Γνώσης Άνοιξη 2007 Τμήμα Επιστήμης Υπολογιστών Πανεπιστημίου Κρήτης."— Μεταγράφημα παρουσίασης:

1 Project in XSB Prolog Επεξεργασία και Αναπαράσταση Γνώσης Άνοιξη 2007 Τμήμα Επιστήμης Υπολογιστών Πανεπιστημίου Κρήτης

2 Λύσεις ασκήσεων Factorial factorial(0,1). factorial(N,F) :- N>0, N1 is N-1, factorial(N1,F1), F is N * F1.

3 Λύσεις ασκήσεων Median :- import select/3,member/2 from basics. median([X],X). median(L,X):- member(X,L),list_max(L,Y),list_min(L,W),select(Y,L,L1), select(W,L1,L2), median(L2,X). list_max([X],X). list_max([X|Tail],M):-list_max(Tail,M1),max(X,M1,M). max(X,Y,X):-X>Y. max(X,Y,Y):-X=<Y. list_min([X],X). list_min([X|Tail],M):-list_min(Tail,M1),min(X,M1,M). min(X,Y,X):-X<Y. min(X,Y,Y):-X>=Y.

4 Λύσεις ασκήσεων Median (second version) :- import select/3,length/2,ith/3 from basics. median2([X],X). median2(L,X):- sort1(L,L1),length(L1,Q), Y is (Q+1)//2, ith(Y,L1,X). sort1([X],[X]). sort1(X,[Xmax|Ys]):- list_max(X,Xmax), select(Xmax,X,[Ymax|Zs]), sort1([Ymax|Zs],Ys). list_max([X],X). list_max([X|Tail],M):-list_max(Tail,M1),max(X,M1,M). max(X,Y,X):-X>Y. max(X,Y,Y):-X=<Y. list_min([X],X). list_min([X|Tail],M):-list_min(Tail,M1),min(X,M1,M). min(X,Y,X):-X<Y. min(X,Y,Y):-X>=Y.

5 Λύσεις ασκήσεων Set Equality :- import member/2 from basics. seq([],[]). seq([X],[X]). seq(X,Y):- \+ notseq(X,Y). notseq(X,Y):- member(X1,X), \+ member(X1,Y). notseq(X,Y):- member(Y1,Y), \+ member(Y1,X).

6 “Ξερή” Το ζητούμενο είναι να δημιουργήσουμε ένα παίκτη που θα παίζει «ξερή». Το παιχνίδι θα αποτελείται από δύο παίκτες. Σε κάθε γύρο του παιχνιδιού μοιράζονται 6 κάρτες σε κάθε παίκτη. Πριν αρχίσει ο πρώτος γύρος ρίχνονται 4 κάρτες στο τραπέζι (η μία πάνω από την άλλη). Οι δύο παίκτες παίζουν εναλλάξ, ρίχνοντας ένα χαρτί από αυτά που τους έχουν μοιραστεί στο τραπέζι. Αν ένας παίκτης ρίξει χαρτί με ίδιο αριθμό με αυτό που είχε ριχτεί τελευταίο, μαζεύει τα χαρτιά που βρίσκονται στο τραπέζι. Αν στο τραπέζι βρισκόταν ένα μόνο χαρτί, κάνει «ξερή». Αν ένας παίκτης ρίξει βαλέ, παίρνει όλα τα χαρτιά που βρίσκονται στο τραπέζι. Νικητής είναι αυτός που στο τέλος του παιχνιδιού θα έχει τους περισσότερους πόντους. Τα χαρτιά που αντιστοιχούν σε πόντους είναι: –Ξερή: 10 πόντοι (ξερή σε βαλέ: 20 πόντοι) –Άσσοι, K, Q, J, 10 (εκτός από το 10 καρό), 2 σπαθί: 1 πόντος –10 καρό: 2 πόντοι –Αυτός που στο τέλος έχει μαζέψει τις περισσότερες κάρτες: 3 πόντοι

7 Αναπαράσταση Γνώσης Κάρτες, π.χ. card(5,spades). Παίκτες, π.χ. user / player1 /…. Οι κάρτες που δεν έχουν μοιραστεί, π.χ. deck([card(2,spades),card(3,clubs)…]) Οι κάρτες που κρατάει ένας παίκτης, π.χ. player1_cards([card(2,spades),card(3,clubs)…]) Κάρτες που έχει κερδίσει ένας παίκτης, π.χ. player1_deck([card(2,spades),card(3,clubs)…]) Κάρτες που βρίσκονται στο τραπέζι, π.χ. pile([card(2,spades),card(3,clubs)…]) Ξερές, π.χ. xeri([card(2,spades),card(2,clubs)]) Πόντοι που σχετίζονται με κάθε κάρτα, π.χ. points(card(1,spades),1)

8 Αναπαράσταση Γνώσης Οι παραπάνω δομές μπορεί επίσης να αναπαρασταθούν με τη χρήση ενός βοηθητικού κατηγορήματος, π.χ. pred(deck,has,[card(2,spades),card(3,clubs),…]) pred(player1_cards,has,[card(2,spades),card(3,clubs),…]) pred(player1_deck,has,[card(2,spades),card(3,clubs),…]) pred(pile,has,[card(2,spades),card(3,clubs),…]) pred(card(1,spades),points,1)

9 Αναπαράσταση Γνώσης Χρειάζεται επίσης να αναπαραστήσουμε δύο τύπους κανόνων: –Κανόνες που ορίζουν τις επιτρεπτές κινήσεις σε ένα παιχνίδι. Αυτοί θα είναι κανόνες περιορισμού. –Κανόνες που ορίζουν στρατηγικές – οι κανόνες αυτοί θα ορίζουν τις «καλές» / «έξυπνες» κινήσεις στο παιχνίδι.

10 Ορισμός δυναμικών κατηγορημάτων Κάποιες ιδιότητες / δομές που αναμένουμε ότι θα αλλάζουν κατά την διάρκεια του παιχνιδιού θα πρέπει να ορίζονται δυναμικά. Παράδειγμα: pred(deck,has,[card(2,spades),card(3,clubs),…]) Για να μπορούμε να χειριστούμε μία δομή δυναμικά, στην αρχή του προγράμματος κάνουμε τη δήλωση: :- dynamic pred/3. Στη συνέχεια μπορούμε να προσθέσουμε / αφαιρέσουμε δεδομένα από τη βάση γνώσης με χρήστη των: assert(…),retract(…) π.χ. deal :− pred(deck, has, [C1,C2,…,C12|Cards]), give(player1, C1), give(player2, C2),… give(player1, C11), give(player4, C12), retract(pred(deck,has,[C1,C2,…,C12|Cards]), assert(pred(deck,has,Cards)).

11 Ανακάτεμα Στην αρχή θα πρέπει να γίνει ανακάτεμα των χαρτιών. Αυτό μπορεί να γίνει με χρήση μίας διαδικασίας random_permutation. shuffle :− pred(deck, has, Cards), permute(Cards, ShuffledCards), retract(pred(deck, has, Cards)), assert(pred(deck, has, ShuffledCards)).

12 Στρατηγικές Μερικές απλές στρατηγικές που μπορούν να υλοποιήσουμε είναι: –Αν μπορείς να κάνεις «ξερή», επίλεξε να κάνεις ξερή. –Αν μπορείς να πάρεις τα χαρτιά ρίχνοντας φύλλο με ίδιο αριθμό με αυτό που βρίσκεται πάνω στο σωρό, ρίξε ένα τέτοιο φύλλο (μπορεί να υπάρχει και μία πιο έξυπνη στρατηγική που να το αποτρέπει αυτό). –Αν δεν μπορείς να πάρεις τα χαρτιά, ρίξε το φύλλο εκείνο που θα ελαχιστοποιεί τις πιθανότητες ότι θα χάσεις (με βάση τα χαρτιά που έχουν ήδη περάσει). –Αν υπάρχουν αρκετοί πόντοι στο σωρό, και έχεις βαλέ, ρίξε τον βαλέ. –…


Κατέβασμα ppt "Project in XSB Prolog Επεξεργασία και Αναπαράσταση Γνώσης Άνοιξη 2007 Τμήμα Επιστήμης Υπολογιστών Πανεπιστημίου Κρήτης."

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google