Τυπικός ορισμός και επίλυση προβλημάτων με την χρήση του search.py (Ιεραπόστολοι & Κανίβαλοι) Γαρμπής Γιώργος

Σχετικά έγγραφα
Προγραμματιστικά Εργαλεία και Τεχνολογίες για Επιστήμη Δεδομένων

ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ

Αναζήτηση σε Γράφους. Μανόλης Κουμπαράκης. ΥΣ02 Τεχνητή Νοημοσύνη 1

Κλάσεις στην Python. Δημιουργία κλάσεων

AVL-trees C++ implementation

Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ EPL035: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ

Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΔΕΝΤΡΑ (TREES) B C D E F G H I J K L M

Κλάσεις στην Python. Δημιουργία κλάσεων

Διασυνδεδεμένες Δομές. Δυαδικά Δέντρα. Προγραμματισμός II 1

Περιγραφή Προβλημάτων

Διδάσκων: Κωνσταντίνος Κώστα

Επίλυση Προβλημάτων 1

Επίλυση προβλημάτων με αναζήτηση

Επίλυση Προβλημάτων 1

Εργαστήριο 5 Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ με αλφαβητική σειρά

Επίλυση Προβλημάτων. Αποτελεί ένα από τα βασικά χαρακτηριστικά γνωρίσματα της νοημοσύνης.

Επίλυση προβληµάτων. Αλγόριθµοι Αναζήτησης

Διάλεξη 22: Δυαδικά Δέντρα. Διδάσκων: Παναγιώτης Ανδρέου

ΤΕΧΝΗΤΗ ΝΟΗΜΟΣΥΝΗ. Ενότητα 2: Δένδρο αναζήτησης. Ρεφανίδης Ιωάννης Τμήμα Εφαρμοσμένης Πληροφορικής

Δομές Δεδομένων & Αλγόριθμοι

Δυαδικά Δένδρα Αναζήτησης, Δένδρα AVL

Κεφάλαιο 2. Περιγραφή Προβληµάτων και Αναζήτηση Λύσης. Τεχνητή Νοηµοσύνη - Β' Έκδοση

Εισαγωγή στα Αντικείμενα

Δέντρα Απόφασης (Decision(

Διάλεξη 17: Δυαδικά Δέντρα. Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

ΠΛΗ111. Ανοιξη Μάθηµα 7 ο. έντρο. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

ιαφάνειες παρουσίασης #10 (β)

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 19/5/2007

Εργαστήριο 8: Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ

Δομές Δεδομένων (Data Structures)

ΤΕΧΝΗΤΉ ΝΟΗΜΟΣΎΝΗ ΚΑΙ ΕΜΠΕΙΡΑ ΣΥΣΤΉΜΑΤΑ

Συγκρίσιμα Αντικείμενα (comparable)

Ε ανάληψη. Ορισµοί της Τεχνητής Νοηµοσύνης (ΤΝ) Καταβολές. Ιστορική αναδροµή. Πράκτορες. Περιβάλλοντα. κριτήρια νοηµοσύνης

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

Εισαγωγή στον Προγραμματισμό Python Μάθημα 4: Συναρτήσεις (functions) και δομοστοιχεία (modules) στην Python

Αντικειμενοστρεφής προγραμματισμός Object Oriented Programming (OOP) Σπάχος Κυριάκος Καθηγητής Πληροφορικής ΠΕ19

Πληρουορική Γ Γσμμασίοσ

Τεχνητή Νοημοσύνη. 2η διάλεξη ( ) Ίων Ανδρουτσόπουλος.

υαδικά δέντρα αναζήτησης

Προγραμματισμός Ι (ΗΥ120)

Τεχνητή Νοημοσύνη ΙΙ Εαρινό Εξάμηνο Εργασία ΙΙ: Σχεδιασμός Ημερομηνία Παράδοσης: 26 Μαρτίου 2012

5 ΔΕΝΤΡΑ (Trees) Σχήµα 5.1 : ενδροειδής αναπαράσταση αρχείων στα Windows. έντρα. \ {root directory} Accessories. Program Files.

Πανεπιστήμιο Δυτικής Μακεδονίας. Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών. Τεχνητή Νοημοσύνη. Ενότητα 2: Αναζήτηση (Search)

Ασκήσεις μελέτης της 4 ης διάλεξης. ), για οποιοδήποτε μονοπάτι n 1

Δομές Δεδομένων Ενότητα 5

Επίλυση προβληµάτων µε αναζήτηση

Δομές Δεδομένων - Εργαστήριο 5. Ουρές Προτεραιότητας

Στοίβες - Ουρές. Στοίβα (stack) Γιάννης Θεοδωρίδης, Νίκος Πελέκης, Άγγελος Πικράκης Τµήµα Πληροφορικής

Γλωσσική Τεχνολογία. Object-Orientation in Python

Δημιουργία Λογαριασμού Διαχείρισης Business Telephony Create a Management Account for Business Telephony

Ενότητες 3 & 4: Δένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις

Διάλεξη 13: Δέντρα ΙΙΙ - Ισοζυγισμένα Δέντρα, AVL Δέντρα

υαδικό έντρο Αναζήτησης (BSTree)

Μάθημα 22: Δυαδικά δέντρα (Binary Trees)

Διδάσκων: Παναγιώτης Ανδρέου

Δομές Δεδομένων & Αλγόριθμοι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

ένδρα u o Κόµβοι (nodes) o Ακµές (edges) o Ουρά και κεφαλή ακµής (tail, head) o Γονέας Παιδί Αδελφικός κόµβος (parent, child, sibling) o Μονοπάτι (pat

ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ (ΟΜΑΔΑ Α ) ΚΑΙ ΜΑΘΗΜΑΤΩΝ ΕΙΔΙΚΟΤΗΤΑΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ (ΟΜΑΔΑ Α ΚΑΙ Β ) ΤΕΤΑΡΤΗ 20 ΙΟΥΝΙΟΥ 2018

Alternative to Balanced Trees, Comms of the ACM, 33(6), June 1990,

PYTHON ΑΣΚΗΣΕΙΣ ΣΤΟΝ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΣΕ ΚΩΝΣΤΑΝΤΙΝΟΣ ΤΣΙΝΤΖΙΛΙΔΑΣ ΕΚΠΑΙΔΕΥΤΙΚΟΣ ΚΛ. ΠΕ86 ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΑΛ ΤΗΝΟΥ ΤΟΜΕΑΣ: ΠΛΗΡΟΦΟΡΙΚΗΣ

Επίλυση Προβληµάτων. ! Αποτελεί ένα από τα βασικά χαρακτηριστικά γνωρίσµατα της νοηµοσύνης. ! Χαρακτηριστικά αλγορίθµων:

ένδρα (tail, head) Γονέας Παιδί (ancestor, descendant) Φύλλο Εσωτερικός Κόµβος (leaf, non-leaf) που αποτελεί το γονέα του v.

ΔυαδικάΔΕΝΔΡΑΑναζήτησης

Προγραμματισμός Υπολογιστών Τάξη Γ Αθανασιάδης Χρήστος ΠΕ19 ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ

Τεχνητή Νοημοσύνη Ι. Εργαστηριακή Άσκηση 4-6. Σγάρμπας Κυριάκος. Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστων

Κατ οίκον Εργασία 3 Σκελετοί Λύσεων

ΑΛΓΟΡΙΘΜΙΚΕΣ ΜΕΘΟΔΟΙ ΒΕΛΤΙΣΤΟΠΟΙΗΣΗΣ

Ενότητα 9 Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find)

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

Γραφικά υπολογιστών Εργαστήριο 9 Κλάσεις στην Python. Σκοπός της 9ης άσκησης είναι να μάθουμε αντικειμενοστρεφή προγραμματισμό στην Python.

Γ7.5 Αλγόριθμοι Αναζήτησης. Γ Λυκείου Κατεύθυνσης

Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΙΑΤΜΗΜΑΤΙΚΟ ΠΜΣ «ΜΑΘΗΜΑΤΙΚΑ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ & ΤΩΝ ΑΠΟΦΑΣΕΩΝ ΤΕΧΝΗΤΗ ΝΟΗΜΟΣΥΝΗ η Σειρά Ασκήσεων ΑΠΑΝΤΗΣΕΙΣ

Εισαγωγή στην Επεξεργασία Ερωτήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Αρχές Τεχνολογίας Λογισμικού Εργαστήριο

1 η ΑΣΚΗΣΗ ΣΤΗΝ ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΥΠΟΛΟΓΙΣΤΩΝ. Ακ. έτος , 5ο Εξάμηνο, Σχολή ΗΜ&ΜΥ

Ενότητα 9 Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find)

Βασικές Ασκήσεις από τα Εργαστήρια της PYTHON (εβδομάδα 5)

ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ: ΕΞΙ (6)

Κύρια σηµεία για µελέτη. έντρα. Ορολογία δέντρων. Τι είναι δέντρο

ΗΥ360 Αρχεία και Βάσεις εδοµένων

οµές εδοµένων 3 ο Εξάµηνο ΕΝΟΤΗΤΑ 4 ΕΝ ΡΑ

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Δέντρα Αναζήτησης. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Δομές Αναζήτησης. κλειδί από ολικά διατεταγμένο σύνολο. Θέλουμε να υποστηρίξουμε δύο βασικές λειτουργίες: Εισαγωγή ενός νέου στοιχείου

Copy of dessin. print 'Genus',1+2^(n-k-1)*(n/4-1) print ''

Εργαστήριο Επεξεργασίας Πληροφορίας και Υπολογισμών Τομέας Ηλεκτρονικής και Υπολογιστών. ΤΗΜΜΥ Α.Π.Θ Πέμπτη 19 / 12 / 2016 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

Διάλεξη 14: Δέντρα IV - B-Δένδρα

Δένδρα. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα:

Διαχείριση Έργων Πληροφορικής

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Physical DB Design. B-Trees Index files can become quite large for large main files Indices on index files are possible.

Μεταγλωττιστές. Δημήτρης Μιχαήλ. Ακ. Έτος Ανοδικές Μέθοδοι Συντακτικής Ανάλυσης. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Σημειωματάριο Τετάρτης 29 Νοε. 2017

(Διαφάνειες Νίκου Βιδάκη)

Ευφυής Προγραμματισμός

Προγραμματισμός Αναδρομή

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ

Transcript:

Τυπικός ορισμός και επίλυση προβλημάτων με την χρήση του search.py (Ιεραπόστολοι & Κανίβαλοι) Γαρμπής Γιώργος ggarbis@di.uoa.gr 21 Νοεμβρίου 2011

Πως ορίζουμε τυπικά ένα πρόβλημα; Αρχική Κατάσταση: Από την οποία ξεκινά ο πράκτορας(αναπαράσταση καταστάσεων?). Συνάρτηση διαδόχων:[(a 1, s 1 ),..,(a n,s n )]=succ(state) (αναπαράσταση καταστάσεων?) Χώρος καταστάσεων: Προκύπτει από την αρχική κατάσταση και την συνάρτηση διαδόχων. Έλεγχος στόχου Κόστος: cost = cost_path(state1, action, state2)

Κλάση ορισμού προβλήματος class Problem(object): """The abstract class for a formal problem. You should subclass this and implement the methods actions and result, and possibly init, goal_test, and path_cost. Then you will create instances of your subclass and solve them with the various search functions.""" Η κλάση αυτή ορίζεται στο αρχείο search.py. Το αρχείο αυτό κάνει import το αρχείο utils.py

Πρόβλημα Ιεραποστόλων & Κανιβάλων Τρεις Ιεραπόστολοι και τρεις κανίβαλοι βρίσκονται στη μια όχθη ενός ποταμού με μια βάρκα που χωρά δύο άτομα. Βρείτε έναν τρόπο να περάσουν όλοι στην απέναντι όχθη χωρίς να μείνει σε ένα μέρος μια ομάδα ιεραποστόλων αριθμητικά μικρότερη από τους κανιβάλους

Αναπαράσταση Καταστάσεων Δεν υπάρχει ένας σωστός τρόπος. Πρέπει να επιλέγουμε λύσεις που περιέχουν μόνο την επαρκή πληροφορία (<αριθμός κανιβάλων αριστερά>, <αριθμός ιεραποστόλων αριστερά>, <θέση βάρκας>, <αριθμός κανιβάλων δεξιά>, <αριθμός ιεραποστόλων δεξιά>) (<αριθμός κανιβάλων αριστερά>, <αριθμός ιεραποστόλων αριστερά>, <βάρκα αριστερά>) (<αριθμός κανιβάλων αριστερά>, <αριθμός ιεραποστόλων αριστερά>, <θέση βάρκας>)

Αρχική Κατάσταση και Κατάσταση Στόχου Αρχική κατάσταση: (3, 3, 'left') Κατάσταση στόχου: (0, 0, 'right') Constructor: class MissionariesAndCannibals(Problem) : def init (self) : super(missionariesandcannibals, self). init ((3, 3, 'left'), (0, 0, 'right'))

Συνάρτηση Διαδόχων Αναπαράσταση Καταστάσεων (<αριθμός ιεραποστόλων που μεταφέρονται>, <αριθμός κανιβάλων που μεταφέρονται>) Η κατεύθυνση υπονοείται από την κατάσταση Έγκυρες καταστάσεις: Για κάθε κατάσταση (m, c, b) που προκύπτει πρέπει να ισχύει ένα από τα παρακάτω: m = c m = 3 και c < 3: m = 0 και c > 0

Χώρος Καταστάσεων

Συναρτήσεις actions και result def actions(self, state) : possibleactions = [(1, 1), (1, 0), (2, 0), (0,1), (0,2)] validactions = [] if state[2] == 'left' : for possibleaction in possibleactions : m = state[0] - possibleaction[0] c = state[1] - possibleaction[1] if self. isvalidstate(m, c) : validactions.append(possibleaction) else : # right # Αντίστοιχα (προσθέτω αντί να αφαιρώ) return validactions def result(self, state, action) : m = state[0] c = state[1] b = state[2] if b == 'left' : m = state[0] - action[0] c = state[1] - action[1] b = 'right' else : # right # Αντίστοιχα return (m, c, b) * Η συνάρτηση isvalidstate(m,c) ελέγχει αν ισχύουν οι προηγούμενοι περιορισμοί ανάμεσα στα m και c

Κόστος Θεωρούμε ένα σταθερό κόστος για κάθε ενέργεια. Το συνολικό κόστος μίας λύσης είναι το σύνολο κόστους όλων των ενεργειών Συνάρτηση path_cost: (ορισμένη στην κλάση Problem) def path_cost(self, c, state1, action, state2): return c + 1

Επαναλαμβανόμενες καταστάσεις

Κλάση κόμβος Αναπαριστά ένα κόμβο στο δέντρο αναζήτησης Δεν χρειάζεται να τη πειράξουμε Προσέξτε πως αν υπάρχουν δύο μονοπάτια προς μία κατάσταση τότε υπάρχουν δύο κόμβοι στο δέντρο αναζήτησης

class Node: def init (self, state, parent=none, action=none, path_cost=0): def expand(self, problem): "List the nodes reachable in one step from this node." def child_node(self, problem, action) def solution(self) "Return the sequence of actions to go from the root to this node." def path(self): "Return a list of nodes forming the path from the root to this node."

Επίλυση προβλήματος (1/2) from MissionariesAndCannibals import * p = MissionariesAndCannibals() s = depth_first_graph_search(p) sol = s.solution() # List of actions path = s.path() # Solution path (nodes of search tree) print "Solution: \n+{0}+\n Action\t State\t \t Path Cost \n+{0}+".format('-'*42) for i in range(len(path)) : state = path[i].state cost = path[i].path_cost action = " " if i > 0 : action = sol[i-1] print " {0}\t {1} \t {2} \t ".format(action, state, cost) print "+------------------------------------------+"

Επίλυση προβλήματος (2/2)

Αναφορές O κώδικας του βιβλίου ΑΙΜΑ σε python που χρησιμοποιήθηκε για αυτή την υλοποίηση μπορεί να βρεθεί στη παρακάτω διεύθυνση http://code.google.com/p/aimapython/source/checkout