ΕΠΛ 434: Λογικός Προγραμματισμός και Τεχνητή Νοημοσύνη Επισκ. Λέκτορας Λοΐζος Μιχαήλ Τμήμα Πληροφορικής ρ Πανεπιστήμιο Κύπρου (Χειμερινό Εξάμηνο 2008 2009)
Λογικός Προγραμματισμός Προγραμματισμός: μ Η υλοποίηση ηενός αλγορίθμου σε μία γλώσσα προγραμματισμού. Αλγόριθμος: Μία σειρά από οδηγίες (το «πώς») προς επίτευξη ενός επιθυμητού υπολογισμού. (π.χ., ο αλγόριθμος λό Bubble Sort για ταξινόμηση.) ) Λογικός Προγραμματισμός: Η περιγραφή (το «τί») ενός προβλήματος με χρήση λογικών κανόνων. (π.χ., αν η λίστα είναι [..., Χ, Υ,...], τότε Χ < Υ.) 08/09/2008 Λοΐζος Μιχαήλ ΕΠΛ 434 (Χειμερινό Εξάμηνο 2008 2009) 2
Λογική και Έλεγχος Αλγόριθμος = Λογική + Έλεγχος (Kowalski) Οι γλώσσες προγραμματισμού διαφέρουν ως προς την έμφαση που δίνουν στα δύο μέρη. Διαδικασιακός Προγραμματισμός (C, Java, ): Έμφαση στον Έλεγχο (περιέχει τη Λογική). Δηλωτικός Προγραμματισμός (Prolog, ): Έμφαση στη Λογική (χρήση γενικού Ελέγχου). 08/09/2008 Λοΐζος Μιχαήλ ΕΠΛ 434 (Χειμερινό Εξάμηνο 2008 2009) 3
Προγράμματα στην Prolog Η Prolog χρησιμοποιείται ευρέως σε εφαρμογές Τεχνητής Νοημοσύνης, οι οποίες απαιτούν εξαγωγή συμπερασμάτων από κάποια δεδομένα. Ένα πρόγραμμα Prolog αποτελείται από ένα σύνολο λογικών προτάσεων (clauses): Γεγονότα (facts). (π.χ., ο Σωκράτης είναι άνθρωπος.) Κανόνες (rules). (π.χ., κάθε άνθρωπος είναι θνητός.) 08/09/2008 Λοΐζος Μιχαήλ ΕΠΛ 434 (Χειμερινό Εξάμηνο 2008 2009) 4
Παράδειγμα Προγράμματος human(socrates). Γεγονός: Η οντότητα socrates είναι human. mortal(x) : human(x). Κανόνας: Για κάθε οντότητα X, το X είναι mortal tl εάν το X είναι human. Περιγράφει γνώση για ένα περιβάλλον / πρόβλημα. Η «εκτέλεση» γίνεται μέσω ερωτήσεων (queries). 08/09/2008 Λοΐζος Μιχαήλ ΕΠΛ 434 (Χειμερινό Εξάμηνο 2008 2009) 5
Παράδειγμα «Εκτέλεσης» human(socrates). mortal(x) : human(x).? mortal(aristotle). Ερώτηση: Είναι η οντότητα aristotle mortal;? human(y). Ερώτηση: Υπάρχει οντότητα Υ που να είναι human; Αν ναι, τότε ποιά είναι αυτή η οντότητα Y; 08/09/2008 Λοΐζος Μιχαήλ ΕΠΛ 434 (Χειμερινό Εξάμηνο 2008 2009) 6
Εφαρμογή σε Χρονικό Συλλογισμό load_bullet(3). shoot(fred, 5). dead(x, T) : dead(x, T 1). dead(x, T) : gun _ loaded(t 1), shoot(x, T 1). gun_loaded(t) : load_bullet(t 1). gun_loaded(t) : gun_loaded(t 1), \+ shoot(x, T 1).? dead(fred, d(f d 8). 08/09/2008 Λοΐζος Μιχαήλ ΕΠΛ 434 (Χειμερινό Εξάμηνο 2008 2009) 7
Εφαρμογή σε Παιχνίδια evaluate_and_choose([move Rest], Board, Player, D, MaxMin, Record, Best): make_move(move, Board, NextBoard), minimax(d, NextBoard, Player, MaxMin, _MoveX, Value), update(move, Value, Record, NewRecord), evaluate_and_choose(rest, Board, Player, D, MaxMin, NewRecord, Best). minimax(0, Board, Player, MaxMin, _Move, Value): value(board, Player, V), Value is V*MaxMin. minimax(d, Board, Player, MaxMin, Move, Value): D>0, D1 is D 1, MinMax is MaxMin, opponent(player, Opponent), find_all_moves(board, Player, Moves), write(d), write(move), nl, evaluate_and_choose(moves, Board, Opponent, D1, MinMax, (nil, 1000), (Move,Value)). 08/09/2008 Λοΐζος Μιχαήλ ΕΠΛ 434 (Χειμερινό Εξάμηνο 2008 2009) 8
Εφαρμογή σε Βάσεις Δεδομένων course( course_code(cs(100)), course_info( title( Computing Machinery and Intelligence ), credits(4), semester_offered(winter) ), professor_info( name( A. ), surname( Turing ), title( Professor ) ), teaching_info( teaching_days_time_rooms([ lesson(day( Monday ), from(1030), to(1159), room(123)), lesson(day( Thursday ) ), from(1030), to(1159), room(123)), ]), lab_days_time_rooms([]) ), other_info( obligatory(yes), prerequisites([math(001)]) ) ). available_course(completedcourses, Semester, Course) : % define so that % all the prerequisites of Course are in CompletedCourses % and Course is offered in Semester 08/09/2008 Λοΐζος Μιχαήλ ΕΠΛ 434 (Χειμερινό Εξάμηνο 2008 2009) 9
Μετα Προγραμματισμός action(agent, raise_bid(auction, Bid)) : preconditions([ object(auction), value(auction, highest_bid, CurrentBid), atleast(bid, CurrentBid+1) ]), effects([ set(auction, highest_bid, Bid), set(auction, highest_bidder, Agent), set(auction, last_bid_time, Time) where value(clock, happened_at, Time) ]). execute(action, Agent) : % define so that the effects of the action % are instantiated exactly when the preconditions of the action hold. 08/09/2008 Λοΐζος Μιχαήλ ΕΠΛ 434 (Χειμερινό Εξάμηνο 2008 2009) 10
Γενικές Δυνατότητες Console I/O, loops, client server communication, can invoke and be invoked from programs in C, transmit(host, Port) : socket(internet, stream, Channel), connect(channel, Host/Port), repeat, fil fail. write( Enter a message: ), read(message), send(channel, Message), 08/09/2008 Λοΐζος Μιχαήλ ΕΠΛ 434 (Χειμερινό Εξάμηνο 2008 2009) 11