Αναζήτηση με αντιπαλότητα (Adversarial Search)

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "Αναζήτηση με αντιπαλότητα (Adversarial Search)"

Transcript

1 Σχολή Τεχνολογικών Εφαρμογών (ΣΤΕΦ) Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Διδάσκων: Γκόγκος Χρήστος Μάθημα: Τεχνητή Νοημοσύνη (εργαστήριο Δ εξαμήνου) Ακαδημαϊκό έτος εαρινό εξάμηνο Αναζήτηση με αντιπαλότητα (Adversarial Search) Η αναζήτηση με αντιπαλότητα αφορά προβλήματα στα οποία επιχειρείται η σχεδίαση ενός πλάνου ενεργειών σε καταστάσεις στις οποίες παίκτες σχεδιάζουν ενέργειες ο ένας εναντίον του άλλου. Περιβάλλοντα στα οποία δημιουργούνται προβλήματα αναζήτησης με αντιπαλότητα είναι γνωστά ως παιχνίδια ή παίγνια. Παιχνίδια (Games) Τα παιχνίδια με τα οποία θα ασχοληθούμε ανήκουν στην κατηγορία των ντετερμινιστικών, παρατηρήσιμων, και μηδενικού αθροίσματος παιχνιδιών. Οι όροι που αναφέρθηκαν σημαίνουν: Ντετερμινιστικό (deterministic): Κάθε ενέργεια εφόσον επαναληφθεί ξεκινώντας από την ίδια κατάσταση κάθε φορά δίνει το ίδιο αποτέλεσμα. Για παράδειγμα το σκάκι είναι ντετερμινιστικό παιχνίδι αλλά το τάβλι δεν είναι. Παρατηρήσιμο (observable): Οι πλήρεις πληροφορίες είναι διαθέσιμες στους παίκτες. Η τρίλιζα είναι παρατηρήσιμη ενώ το πόκερ δεν είναι καθώς στο πόκερ ο ένας παίκτης δεν έχει πρόσβαση στα χαρτιά του άλλου παίκτη. Μηδενικού αθροίσματος (zero sum game): Κάθε κέρδος για έναν παίκτη σημαίνει απώλεια ίσης αξίας για τον άλλο παίκτη. Παραδείγματα παιχνιδιών αυτού του είδους που παίζονται από δύο παίκτες είναι η τρίλιζα, το οθέλλο1, το σκάκι, το γκο2 και άλλα. Ένα παιχνίδι μπορεί να οριστεί ως ένα πρόβλημα αναζήτησης με συστατικά στοιχεία τα ακόλουθα: Την αρχική κατάσταση. Ένα χώρο καταστάσεων με όλες τις επιτρεπτές καταστάσεις στις οποίες μπορεί να μεταβεί το παιχνίδι μέσω των τελεστών μετάβασης (των επιτρεπτών κινήσεων). Ένα σύνολο τελικών καταστάσεων που υποδηλώνουν καταστάσεις στις οποίες το παιχνίδι τερματίζεται με νίκη του ενός από τους δύο αντίπαλους ή με ισοπαλία. Εναλλακτικά, μια τελική κατάσταση μπορεί να χαρακτηρίζεται από μια αριθμητική τιμή η οποία να υποδηλώνει το σκορ της νίκης του κάθε παίκτη. Ο αλγόριθμος minimax Έχει καθιερωθεί σε προβλήματα αναζήτησης με αντιπαλότητα δύο παικτών ο ένας παίκτης να αναφέρεται ως MAX και o άλλος ως MIN. Κάθε παίκτης θα πρέπει να καταστρώσει μια βέλτιστη στρατηγική η οποία θα προσδιορίζει τις κινήσεις που θα τον οδηγήσουν στη νίκη λαμβάνοντας υπόψη τις καλύτερες κινήσεις που θα μπορούσε να κάνει ο αντίπαλός του. Για να γίνει αυτό δημιουργείται ένα δένδρο παιχνιδιού το οποίο έχει ως ρίζα την αρχική κατάσταση και κάθε νέο επίπεδο του δένδρου δημιουργείται εναλλάξ από τις έγκυρες κινήσεις των δύο παικτών. Για παράδειγμα στο ακόλουθο δένδρο παιχνιδιού ο παίκτης που παίζει πρώτος είναι ο MAX. Η επιλογή της κίνησης που θα κάνει εξαρτάται από τις τιμές οι οποίες υποδηλώνουν τη χρησιμότητα (utility) κάθε τερματικού κόμβου για τον MAX. Σε κάθε κόμβο, πλην των τερματικών, υπολογίζεται η χρησιμότητα που είναι η μέγιστη τιμή από τα παιδιά του αν είναι κόμβος MAX ή η ελάχιστη τιμή από τα παιδιά του αν είναι κόμβος MIN. Οι τιμές συμπληρώνονται στο

2 δένδρο από κάτω προς τα πάνω. Η κίνηση που θα πρέπει να κάνει ο ΜΑΧ είναι εκείνη που δίνει την υψηλότερη τιμή χρησιμότητας στη ρίζα του δένδρου. Στο παράδειγμα της εικόνας 1 αυτό συμβαίνει με την κίνηση a1 που οδηγεί στην κατάσταση Β που έχει μεγαλύτερη χρησιμότητα έναντι των καταστάσεων C και D. Η κίνηση a1 ακολουθείται από την κίνηση b1 που είναι η καλύτερη δυνατή απάντηση του MΙΝ δεδομένης της κατάστασης Β. Εικόνα 1. Δένδρο παιχνιδιού Ο αλγόριθμος minimax είναι μια μορφή αναζήτησης πρώτα κατά βάθος η οποία μπορεί να υλοποιηθεί αναδρομικά. Ο αριθμός των κόμβων που εξετάζονται είναι εκθετικός ως προς των αριθμό των κινήσεων στο παιχνίδι. Στην ορολογία των παιχνιδιών λέγεται ότι μια κίνηση αποτελείται από δύο μισές κινήσεις (στρώσεις-plies), μια στρώση (ply) από τον παίκτη ΜΑΧ ακολουθούμενη από μια στρώση από τον παίκτη MIN. Κλάδεμα Άλφα-Βήτα Η τεχνική του κλαδέματος άλφα-βήτα επιτρέπει στον αλγόριθμο άλφα-βήτα να είναι αποδοτικότερος έναντι του αλγορίθμου minimax καθώς εξαλείφει τμήματα του δένδρου αναζήτησης στα οποία δεν πρόκειται να εντοπιστεί η ακολουθία των βέλτιστων κινήσεων. Ο αλγόριθμος άλφα-βήτα επιστρέφει πάντα το ίδιο αποτέλεσμα με τον αλγόριθμο minimax εξετάζοντας όμως στην συντριπτική πλειοψηφία των περιπτώσεων σημαντικά λιγότερους κόμβους. Εικόνα 2. Κλάδεμα α-β 2

3 Ο αλγόριθμος άλφα-βήτα λαμβάνει το όνομά του από τις παραμέτρους α και β που προσδιορίζουν δύο φράγματα: α = τιμή της καλύτερης επιλογής που έχει βρεθεί για τον ΜΑΧ κατά μήκος της διαδρομής που έχει διανυθεί. Η τιμή του α είναι αρχικά -. β = τιμή της καλύτερης επιλογής που έχει βρεθεί για τον ΜΙΝ κατά μήκος της διαδρομής που έχει διανυθεί Η τιμή του β είναι αρχικά +. Καθώς η αναζήτηση προχωρά, οι τιμές των α και β ενημερώνονται και τα υποδένδρα ενός κόμβου κλαδεύονται μόλις διαπιστωθεί ότι η τιμή του κόμβου είναι χειρότερη από την τρέχουσα τιμή του α ή του β. Στο παράδειγμα της εικόνας 2 το σκεπτικό με το οποίο πραγματοποιείται κλάδεμα του δένδρου είναι το ακόλουθο: Στο βήμα (a) και εξετάζοντας μόνο το πλέον αριστερό παιδί της κατάστασης Β που έχει τιμή 3 διαπιστώνουμε ότι ο ΜΙΝ μπορεί να επιτύχει τιμή μικρότερη ή ίση του 3. Στο βήμα (c) έχοντας εξετάσει όλα τα παιδιά της κατάστασης Β μπορούμε να συμπεράνουμε ότι η ρίζα (δηλαδή η κατάσταση Α) θα έχει τιμή μεγαλύτερη ή ίση του 3. Στο βήμα (d) εξετάζοντας το πλέον αριστερό παιδί της κατάστασης C που έχει τιμή 2 διαπιστώνουμε ότι η κατάσταση C θα έχει τιμή μικρότερη ή ίση του 2. Γνωρίζοντας ότι η ρίζα έχει ήδη τιμή μεγαλύτερη ή ίση του 3, αυτό σημαίνει ότι η κατάσταση C δεν πρόκειται ποτέ να επιλεγεί από τον MAX και συνεπώς τα υπόλοιπα παιδιά της κατάστασης C μπορούν να κλαδευτούν. Στα βήματα (e) και (f) φαίνεται ότι δεν μπορεί να ληφθεί αντίστοιχη απόφαση με το βήμα (d) καθώς οι τιμές κόμβων με τη σειρά που εξετάζονται δεν επιτρέπουν το κλάδεμα. Οι δύο πρώτες (14 και 5) είναι μεγαλύτερες από το 3 και η τρίτη (το 2) όταν εξετάζεται δεν έχει άλλες τιμές δεξιότερα για να κλαδέψει. Στο παράδειγμα της εικόνας 2 δε χρειάστηκε να ασχοληθούμε καθόλου με δύο από τους κόμβους φύλλα. Στη γενική περίπτωση η αποδοτικότητα του αλγορίθμου άλφα-βήτα εξαρτάται από τη σειρά με την οποία εξετάζονται τα παιδιά των κόμβων. Στην καλύτερη περίπτωση ο δραστικός παράγοντας διακλάδωσης γίνεται b έναντι του b και συνεπώς ο αλγόριθμος άλφα-βήτα μπορεί να βλέπει δύο φορές πιο μπροστά σε σχέση με τον minimax. Στη συνέχεια παρουσιάζεται μια αλγοριθμική περιγραφή του τρόπου με τον οποίο τα όρια α και β λαμβάνουν τιμές κατά τη διάρκεια της αναζήτησης οδηγώντας σε κλάδεμα τμημάτων του δένδρου αναζήτησης. Αλγοριθμική περιγραφή κλαδέματος άλφα-βήτα 1. Ορίζονται για κάθε κόμβο του δένδρου, πλην των τερματικών, τα όρια α και β. a. Στη ρίζα του δένδρου δίνονται οι τιμές α=- και β=+. b. Η αναζήτηση προχωρά «πρώτα κατά βάθος (DFS=Depth First Search)» και οι τιμές των α και β αντιγράφονται σε κάθε κόμβο που συναντά για πρώτη φορά η DFS από τον γονέα του (δηλαδή από πάνω προς τα κάτω). 2. Όταν λάβει τιμή ένας κόμβος x είτε διότι είναι τερματικός είτε διότι έχουν εξεταστεί τα παιδιά του τότε: a. Αν ο γονέας του x είναι κόμβος max τότε αλλάζει το όριο α για το γονέα εφόσον η τιμή του x είναι μεγαλύτερη από το α οπότε και το α γίνεται η τιμή του x. b. Αν ο γονέας του x είναι κόμβος min τότε αλλάζει το όριο β για το γονέα εφόσον η τιμή του x είναι μικρότερη από το β οπότε και το β γίνεται η τιμή του x. c. Αν σε κάποιο κόμβο γίνει το α>=β τότε τα υπόλοιπα κλαδιά του κόμβου που δεν έχουν ακόμα εξερευνηθεί από την αναζήτηση DFS κλαδεύονται. Πρακτική χρήση των αλγορίθμων minimax και άλφα-βήτα Στην πράξη λόγω του μεγέθους του δένδρου του παιχνιδιού δεν είναι δυνατόν οι αλγόριθμοι minimax και άλφα-βήτα να φτάσουν μέχρι τις τερματικές καταστάσεις έτσι ώστε να υπολογίσουν εκεί τη χρησιμότητα κάθε κατάστασης. Άρα ξεκινώντας από την τρέχουσα κατάσταση ορίζεται ένα τεχνητό βάθος που ορίζει μέχρι ποια στρώση θα αναπτύσσεται το δένδρο του παιχνιδιού. Η δε χρησιμότητα, στους κόμβους που παίζουν τον ρόλο των τερματικών κόμβων (χωρίς υποχρεωτικά να είναι) υπολογίζεται με μια ευρετική συνάρτηση στην οποία γίνεται προσπάθεια να αποδοθούν 3

4 διαβαθμισμένα υψηλές τιμές για καταστάσεις που είναι υπέρ του παίκτη MAX και αντίστοιχα διαβαθμισμένα χαμηλές τιμές για καταστάσεις που είναι υπέρ του παίκτη MIN. Ένα πρόβλημα της ανωτέρω προσέγγισης είναι το φαινόμενο του ορίζοντα (horizon effect) σύμφωνα με το οποίο μια κακή κίνηση θεωρείται καλή λόγω του ότι το αποτέλεσμά της αποκαλύπτεται μετά το βάθος στο οποίο είναι σε θέση να «δει» ο αλγόριθμος. Υπάρχουν διάφορες προσεγγίσεις για την επίλυση του συγκεκριμένου προβλήματος (π.χ. scout algorithms, singular extensions, quiescence search κ.α.). Το παιχνίδι Οθέλλο Το παιχνίδι Οθέλλο (γνωστό και ως Reversi) είναι ένα παιχνίδι δύο ατόμων που παίζεται σε ένα ταμπλό 8 Χ 8 χρησιμοποιώντας πούλια που από τη μια πλευρά είναι λευκά και από την άλλη μαύρα. Στην υλοποίηση που θα ακολουθήσει τα λευκά πούλια αναπαρίστανται με τον χαρακτήρα Ο και τα μαύρα με τον χαρακτήρα Χ. Η αρχική διαμόρφωση του παιχνιδιού είναι η ακόλουθη: 2 3 X O Οι παίκτες παίζουν εναλλάξ τοποθετώντας ένα νέο πούλι του χρώματός τους σε κάποια από τις θέσεις οι οποίες θα προκαλέσουν την αναστροφή χρώματος σε ένα τουλάχιστον πούλι του αντιπάλου. Για να συμβεί αυτό θα πρέπει ανάμεσα στο πούλι που πρόκειται να τοποθετήσει ο παίκτης και σε ένα άλλο πούλι του ίδιου χρώματος να υπάρχουν πούλια του αντιπάλου τα οποία θα αλλάζουν χρώμα μόλις τοποθετήσει ο παίκτης το πούλι του. Συνεπώς, για να μπορεί να παίξει ένας παίκτης θα πρέπει να έχει την δυνατότητα να τοποθετήσει ένα πούλι προκαλώντας αναστροφή. Αν δεν έχει αυτή τη δυνατότητα, παραχωρεί τη σειρά του στον αντίπαλο. Το παιχνίδι τελειώνει όταν είτε το ταμπλό έχει γεμίσει είτε όταν και οι δύο παίκτες δεν έχουν επιτρεπτές κινήσεις. Ο στόχος για κάθε παίκτη είναι στο τέλος του παιχνιδιού να έχει μεγαλύτερο αριθμό από πούλια του χρώματός του σε σχέση με τον αριθμό από πούλια του αντιπάλου του. Ο χώρος αναζήτησης του Οθέλλο είναι μικρότερος σε σχέση με άλλα παιχνίδια όπως το σκάκι και το γκο καθώς οι νόμιμες κινήσεις ανά πάσα στιγμή είναι συνήθως από 5 μέχρι 15. Υλοποίηση Το ταμπλό (board) του παιχνιδιού αναπαρίσταται ως ένας δισδιάστατος πίνακας χαρακτήρων 8 Χ 8 και αρχικοποιείται με τη συνάρτηση char **initialize_board(). Οι βασικές συναρτήσεις οι οποίες χρησιμοποιούνται στην υλοποίηση των επιλυτών του προβλήματος είναι οι συναρτήσεις που εμφανίζονται στο αρχείο lab03_board.hpp. Η συνάρτηση void update_board(char **aboard, int r, int c, char disk) αναλαμβάνει την ενημέρωση του ταμπλό έτσι ώστε να αναπαριστά το νέο ταμπλό που θα προκύψει όταν τοποθετηθεί ένα πούλι τύπου disk ( Χ ή Ο ) στη γραμμή r και στη στήλη c. Η συνάρτηση list<char **> get_successor_boards(char **aboard, char disk) επιστρέφει μια λίστα με όλα τα πιθανά ταμπλό που μπορούν να προκύψουν αν τοποθετηθεί ένα πούλι τύπου disk σε οποιαδήποτε από τις πιθανές έγκυρες θέσεις στις οποίες θα μπορούσε να τοποθετηθεί. 4

5 Συναρτήσεις για την εναλλαγή χρώματος στα πούλια Η συνάρτηση list<pair<int, int>> all_directions_disks_to_flip(char **aboard, int r, int c, char disk) επιστρέφει μια λίστα με ζεύγη ακεραίων που αναπαριστούν όλα τα πούλια που πρόκειται να αντιστραφούν σε περίπτωση που ο παίκτης για τον οποίο είναι η σειρά του να παίξει τοποθετήσει ένα πούλι στη γραμμή r και στη στήλη c. Η συνάρτηση list<pair<int, int>> disks_to_flip(char **aboard, int r, int c, char disk, int xdir, int ydir) επιστρέφει μια λίστα από πούλια που πρόκειται να αντιστραφούν αν ο παίκτης κινηθεί στην κατεύθυνση που υποδηλώνεται από τα xdir, ydir και η οποία μπορεί να είναι μια από οκτώ πιθανά ζεύγη τιμών. Για παράδειγμα το ζεύγος 1,1 υποδηλώνει κίνηση προς τη διαγώνιο κάτω δεξιά σε σχέση με τη τρέχουσα θέση. Οι οκτώ κατευθύνσεις φαίνονται στον ακόλουθο πίνακα. -1, -1-1, 0-1, 1 0, -1 τρέχουσα θέση 0, 1 1, -1 1, 0 1, 1 Η συνάρτηση disks_to_flip εξετάζει την κίνηση προς την κατεύθυνση που υποδηλώνεται από τα xdir, ydir εφόσον το πούλι που συναντά είναι του αντιπάλου. Αν συναντήσει πούλι του χρώματος του παίκτη που πραγματοποιεί την κίνηση επιστρέφει εισάγοντας σε μια λίστα τα πούλια που πρέπει να αντιστραφούν. Η συνάρτηση all_directions_disks_to_flip καλεί τη συνάρτηση disks_to_flip για όλες τις (8) πιθανές κατευθύνσεις. #ifndef LAB03_BOARD_HPP_INCLUDED #define LAB03_BOARD_HPP_INCLUDED #include <cstdio> #include <iostream> #include <utility> #include <list> #include <vector> #include <algorithm> #include <climits> #include <iomanip> using namespace std; const int ROWS{8; const int COLS{8; // αρχικοποίηση ταμπλό παιχνιδιού char **initialize_board(); // σχεδίαση του ταμπλό στην οθόνη και απεικόνιση του σκορ void draw_board(char **aboard); // διάνυσμα με έγκυρες θέσεις στις οποίες μπροούν να τοποθετηθούν πούλια vector<pair<int, int>> get_valid_positions(char **aboard, char disk); // ενημέρωση του ταμπλό void update_board(char **aboard, int r, int c, char disk); // διαγραφή της μνήμης που καταλαμβάνει ένα ταμπλό void delete_board(char **aboard); 5

6 // λίστα νέων ταμπλό που προκύπτουν αν τοποθετηθεί ένα πούλι τύπου (disk) list<char **> get_successor_boards(char **aboard, char disk); // αντιγραφή ενός ταμπλό char **copy_board(char **aboard); // πλήθος από πούλια τύπου disk int get_disks_with_color(char **aboard, char disk); #endif lab03_board.hpp #include "lab03_board.hpp" // αντιγραφή ενός ταμπλό char **copy_board(char **aboard) { char **duplicated_board = new char *[ROWS]; for (int i = 0; i < ROWS; i++) duplicated_board[i] = new char[cols]; for (int i = 0; i < ROWS; i++) for (int j = 0; j < COLS; j++) duplicated_board[i][j] = aboard[i][j]; return duplicated_board; // είναι οι συντεταγμένες r, c (γραμμή και στήλη) εντός των ορίων του ταμπλό; bool in_bounds(int r, int c) { return (r >= 0 && r < ROWS && c >= 0 && c < COLS); // λίστα με πούλια που θα άλλάξουν χρώμα στην κατεύθυνση που υποδηλώνεται από τα // xdir, ydir list<pair<int, int>> disks_to_flip(char **aboard, int r, int c, char disk, int xdir, int ydir) { aboard[r][c] = disk; char opposite_disk; if (disk == 'X') opposite_disk = 'O'; else opposite_disk = 'X'; int x = r, y = c; x += xdir; y += ydir; list<pair<int, int>> disks_to_flip{; if (in_bounds(x, y) && aboard[x][y] == opposite_disk) { x += xdir; y += ydir; if (in_bounds(x, y)) { while (aboard[x][y] == opposite_disk) { x += xdir; y += ydir; 6

7 if (!in_bounds(x, y)) { break; if (in_bounds(x, y)) if (aboard[x][y] == disk) while (true) { x -= xdir; y -= ydir; if ((x == r) && (y == c)) break; disks_to_flip.push_back(make_pair(x, y)); aboard[r][c] = ' '; return disks_to_flip; // λίστα με πούλια που θα αλλάξουν χρώμα σε όλες τις κατευθύνσεις list<pair<int, int>> all_directions_disks_to_flip(char **aboard, int r, int c, char disk) { list<pair<int, int>> list_of_disks_to_flip{; int directions[8][2] = {{0, 1, {1, 1, {1, 0, {1, -1, {0, -1, {-1, -1, {-1, 0, {-1, 1; for (int i = 0; i < 8; i++) { list<pair<int, int>> l = disks_to_flip(aboard, r, c, disk, directions[i][0], directions[i][1]); list_of_disks_to_flip.insert(list_of_disks_to_flip.end(), l.begin(), l.end()); return list_of_disks_to_flip; char **initialize_board() { char **board = new char *[ROWS] {; for (int i = 0; i < ROWS; i++) { board[i] = new char[cols]{; for (int j = 0; j < COLS; j++) board[i][j] = ' '; board[rows / 2-1][COLS / 2-1] = 'X'; board[rows / 2-1][COLS / 2] = 'O'; board[rows / 2][COLS / 2] = 'X'; board[rows / 2][COLS / 2-1] = 'O'; return board; int get_disks_with_color(char **aboard, char disk) { int c{0; for (int i = 0; i < ROWS; i++) for (int j = 0; j < COLS; j++) if (aboard[i][j] == disk) 7

8 c++; return c; void display_score(char **aboard) { cout << "Score X=" << get_disks_with_color(aboard, 'X') << " O=" << get_disks_with_color(aboard, 'O') << endl; void draw_board(char **aboard) { cout << " "; for (int j = 0; j < COLS; j++) cout << setw(2) << right << j; cout << endl; for (int i = 0; i < ROWS; i++) { cout << setw(2) << right << i << " "; for (int j = 0; j < ROWS; j++) cout << setw(1) << aboard[i][j] << " "; cout << endl; display_score(aboard); vector<pair<int, int>> get_valid_positions(char **aboard, char disk) { vector<pair<int, int>> valid_moves{; for (int i = 0; i < ROWS; i++) for (int j = 0; j < COLS; j++) if (aboard[i][j] == ' ') { if (!all_directions_disks_to_flip(aboard, i, j, disk).empty()) valid_moves.push_back(make_pair(i, j)); return valid_moves; void update_board(char **aboard, int r, int c, char disk) { for (pair<int, int> p : all_directions_disks_to_flip(aboard, r, c, disk)) { aboard[p.first][p.second] = disk; aboard[r][c] = disk; void delete_board(char **aboard) { for (int i = 0; i < ROWS; i++) delete[] aboard[i]; delete[] aboard; list<char **> get_successor_boards(char **aboard, char disk) { list<char **> successors{; for (pair<int, int> p : get_valid_positions(aboard, disk)) { char **b = copy_board(aboard); update_board(b, p.first, p.second, disk); successors.push_back(b); 8

9 return successors; lab03_board.cpp Απεικόνιση του ταμπλό και χρήση των βασικών συναρτήσεων χειρισμού του ταμπλό Στη συνέχεια παρουσιάζεται ένα απλό πρόγραμμα (lab03_01.cpp) το οποίο αρχικοποιεί ένα παιχνίδι, επιλέγει με τυχαίο τρόπο μια έγκυρη κίνηση για τον παίκτη Χ και εμφανίζει όλα τα πιθανά ταμπλό που μπορούν να προκύψουν για τον παίκτη Ο. #include "lab03_board.hpp" int main() { default_random_engine gen; gen.seed(time(null)); char **board = initialize_board(); draw_board(board); vector<pair<int, int>> valid_pairs_x = get_valid_positions(board, 'X'); cout << "Valid moves for X: "; for (pair<int, int> p : valid_pairs_x) cout << "(" << p.first << "," << p.second << ") "; shuffle(valid_pairs_x.begin(), valid_pairs_x.end(), gen); pair<int, int> p = valid_pairs_x.front(); cout << "Move selected: (" << p.first << "," << p.second << ")" << endl; update_board(board, p.first, p.second, 'X'); draw_board(board); int c = 0; for (char **b : get_successor_boards(board, 'O')) { cout << "\npossible next board " << ++c << endl; draw_board(b); delete_board(board); lab03_01.cpp 9

10 Μεταγλώττιση και εκτέλεση του κώδικα g++ lab03_board.cpp lab03_01.cpp -o lab03_01 -std=c++11./lab03_ X O Score X=2 O=2 Valid moves for X: (2,4) (3,5) (4,2) (5,3) Move selected: (3,5) 2 3 X X X Score X=4 O=1 Possible next board 1 2 O 3 O X X Score X=3 O=3 Possible next board 2 2 O 3 X O X Score X=3 O=3 Possible next board X X X 4 O O O Score X=3 O=3 Παρτίδα παιχνιδιού ανάμεσα σε 2 παίκτες Εδώ, θα παρουσιαστεί η υλοποίηση του κώδικα που θα επιτρέπει σε δύο παίκτες (ανθρώπους) να παίξουν ένα παιχνίδι Οθέλλο. #include "lab03_board.hpp" void human_move(char** board, char disk); lab03_human.hpp #include "lab03_human.hpp" void human_move(char** board, char disk) { if (disk == 'X') cout << "Player X turn, valid moves="; else cout << "Player O turn, valid moves="; vector<pair<int, int>> valid_pairs = get_valid_positions(board, disk); for (pair<int, int> x : valid_pairs) cout << "(" << x.first << " " << x.second << ")"; int r {, c { ; do { 10

11 cout << endl << "Enter move:"; cin >> r >> c; while (find(valid_pairs.begin(), valid_pairs.end(), make_pair(r, c)) == valid_pairs.end()); update_board(board, r, c, disk); draw_board(board); lab03_human.cpp #include "lab03_board.hpp" #include "lab03_human.hpp" int main() { char** board = initialize_board(); bool flag{false; int moves{0; draw_board(board); while (!flag) { bool player1_moved{false; bool player2_moved{false; if (!(get_valid_positions(board, 'X').empty())) { human_move(board, 'X'); player1_moved = true; moves++; if (!(get_valid_positions(board, 'O').empty())) { human_move(board, 'O'); player2_moved = true; moves++; if ((moves == ROWS * COLS - 4) (!player1_moved &&!player2_moved)) flag = true; delete_board(board); lab03_02.cpp 11

12 Μεταγλώττιση και εκτέλεση του κώδικα g++ lab03_board.cpp lab03_human.cpp lab03_02.cpp -o lab03_02 -std=c++11./lab03_ X O Score X=2 O=2 Player X turn, valid moves=(2 4)(3 5)(4 2)(5 3) Enter move:2 4 2 X 3 X X Score X=4 O=1 Player O turn, valid moves=(2 3)(2 5)(4 5) Enter move:2 3 2 O X 3 O X Score X=3 O=3 Player X turn, valid moves=(1 2)(2 2)(3 2)(4 2)(5 2) Enter move: Αυτόματοι επιλυτές Στη συνέχεια θα παρουσιαστούν 3 αυτόματοι επιλυτές: ένας ευρετικός επιλυτής, ο επιλυτής minimax και o επιλυτής άλφα-βήτα. Ο κώδικας και για τους 3 επιλυτές βρίσκεται στα αρχεία lab03_solvers.hpp και lab03_solvers.cpp. #include "lab03_board.hpp" // η κίνηση που θα γίνει αποφασίζεται από μια απλή ευρετική συνάρτηση που // μετρά για κάθε έγκυρη θέση τον αριθμό από πούλια που θα προκύψει // και επιλέγει την κίνηση με την μεγαλύτερη τιμή void computer_move_using_simple_heuristic(char **board, char disk); void computer_move_using_min_max(char **board, int plies, char disk); void computer_move_using_alpha_beta(char **board, int plies, char disk); lab03_solvers.hpp #include "lab03_solvers.hpp" void computer_move_using_simple_heuristic(char **board, char disk) { cout << "Computer using heuristic plays with disk " << disk << endl; int best_r{-1; int best_c{-1; int best_value{-1; for (pair<int, int> x : get_valid_positions(board, disk)) { char **duplicated_board = copy_board(board); int r{x.first; int c{x.second; update_board(duplicated_board, r, c, disk); int value = get_disks_with_color(duplicated_board, disk); if (value > best_value) { 12

13 best_r = r; best_c = c; best_value = value; cout << "(" << x.first << " " << x.second << ")->" << value << " "; delete_board(duplicated_board); cout << endl; update_board(board, best_r, best_c, disk); draw_board(board); // MINIMAX & ALPHA-BETA // ευρετική συνάρτηση για την αριθμητική σχέση στα πούλια των δύο αντιπάλων int parity(char **aboard) { int max_player_disks = get_disks_with_color(aboard, 'O'); int min_player_disks = get_disks_with_color(aboard, 'X'); return 100 * (max_player_disks - min_player_disks) / (max_player_disks + min_player_disks); // ευρετική συνάρτηση για τη σχέση κινητικότητας ανάμεσα στους δύο αντιπάλους int mobility(char **aboard) { int max_player_moves = get_valid_positions(aboard, 'O').size(); int min_player_moves = get_valid_positions(aboard, 'X').size(); if (max_player_moves + min_player_moves == 0) return 0; else return 100 * (max_player_moves - min_player_moves) / (max_player_moves + min_player_moves); // αριθμός από γωνίες στις οποίες βρίσκεται πούλι τύπου disk int player_corners(char **aboard, char disk) { int c{0; if (aboard[0][0] == disk) c++; if (aboard[0][cols - 1] == disk) c++; if (aboard[rows - 1][0] == disk) c++; if (aboard[rows - 1][COLS - 1] == disk) c++; return c; // ευρετική συνάρτηση για τη σχέση κατειλημμένων γωνιών από τους δύο αντιπάλους int corners(char **aboard) { int max_player_corners = player_corners(aboard, 'O'); int min_player_corners = player_corners(aboard, 'X'); if (max_player_corners + min_player_corners == 0) return 0; 13

14 else return 100 * (max_player_corners - min_player_corners) / (max_player_corners + min_player_corners); // συνάρτηση χρησιμότητας int utility(char **aboard) { return parity(aboard) + mobility(aboard) + corners(aboard); bool is_complete(char **aboard) { int c{0; for (int i = 0; i < ROWS; i++) for (int j = 0; j < COLS; j++) if ((aboard[i][j] == 'X') (aboard[i][j] == 'O')) c++; if (c == ROWS * COLS) return true; else return false; int min_value(char **aboard, int plies); int max_value(char **aboard, int plies) { if (is_complete(aboard) plies == 0 get_valid_positions(aboard, 'O').empty()) return utility(aboard); list<char **> succ_boards = get_successor_boards(aboard, 'O'); int v = INT_MIN; for (char **b : succ_boards) { int v2 = min_value(b, plies - 1); if (v2 > v) v = v2; return v; int min_value(char **aboard, int plies) { if (is_complete(aboard) plies == 0 get_valid_positions(aboard, 'X').empty()) return utility(aboard); list<char **> succ_boards = get_successor_boards(aboard, 'X'); int v = INT_MAX; for (char **b : succ_boards) { int v2 = max_value(b, plies - 1); if (v2 < v) v = v2; return v; 14

15 pair<int, int> minimax_decision(char **aboard, int plies, char disk) { if (disk == 'O') { int max = INT_MIN; pair<int, int> move; for (pair<int, int> p : get_valid_positions(aboard, disk)) { char **b = copy_board(aboard); update_board(b, p.first, p.second, 'O'); int v = max_value(b, plies - 1); if (v > max) { max = v; move.first = p.first; move.second = p.second; return move; else { int min = INT_MAX; pair<int, int> move; for (pair<int, int> p : get_valid_positions(aboard, disk)) { char **b = copy_board(aboard); update_board(b, p.first, p.second, 'X'); int v = min_value(b, plies - 1); if (v < min) { min = v; move.first = p.first; move.second = p.second; return move; void computer_move_using_min_max(char **board, int plies, char disk) { cout << "Computer using min-max plays with disk " << disk << endl; pair<int, int> p = minimax_decision(board, plies, disk); update_board(board, p.first, p.second, disk); draw_board(board); int ab_min_value(char **aboard, int alpha, int beta, int plies); int ab_max_value(char **aboard, int alpha, int beta, int plies) { if (is_complete(aboard) plies == 0 get_valid_positions(aboard, 'O').empty()) return utility(aboard); list<char **> succ_boards = get_successor_boards(aboard, 'O'); int v = INT_MIN; for (char **b : succ_boards) { int v2 = ab_min_value(b, alpha, beta, plies - 1); if (v2 > v) 15

16 v = v2; if (v >= beta) { return v; if (v > alpha) alpha = v; return v; int ab_min_value(char **aboard, int alpha, int beta, int plies) { if (is_complete(aboard) plies == 0 get_valid_positions(aboard, 'X').empty()) return utility(aboard); list<char **> succ_boards = get_successor_boards(aboard, 'X'); int v = INT_MAX; for (char **b : succ_boards) { int v2 = ab_max_value(b, alpha, beta, plies - 1); if (v2 < v) v = v2; if (v <= alpha) { return v; if (v < beta) beta = v; return v; pair<int, int> ab_minimax_decision(char **aboard, int plies, char disk) { if (disk == 'O') { int max = INT_MIN; pair<int, int> move; for (pair<int, int> p : get_valid_positions(aboard, disk)) { char **b = copy_board(aboard); update_board(b, p.first, p.second, 'O'); int v = ab_max_value(b, INT_MIN, INT_MAX, plies - 1); if (v > max) { max = v; move.first = p.first; move.second = p.second; return move; else { int min = INT_MAX; pair<int, int> move; for (pair<int, int> p : get_valid_positions(aboard, disk)) { 16

17 char **b = copy_board(aboard); update_board(b, p.first, p.second, 'X'); int v = ab_min_value(b, INT_MIN, INT_MAX, plies - 1); if (v < min) { min = v; move.first = p.first; move.second = p.second; return move; void computer_move_using_alpha_beta(char **board, int plies, char disk) { cout << "Computer using alpha-beta plays with disk " << disk << endl; pair<int, int> p = ab_minimax_decision(board, plies, disk); update_board(board, p.first, p.second, disk); draw_board(board); lab03_solvers.cpp Παρτίδα παιχνιδιού με παίκτη (άνθρωπο) και αντίπαλο τον ευρετικό επιλυτή Ο αυτόματος ευρετικός επιλυτής προκειμένου να αποφασίσει την κίνηση που πρόκειται να κάνει εξετάζει όλες τις πιθανές κινήσεις και επιλέγει την κίνηση η οποία θα μετατρέψει περισσότερα πούλια στο δικό του χρώμα. #include "lab03_board.hpp" #include "lab03_human.hpp" #include "lab03_solvers.hpp" int main() { char **board = initialize_board(); bool flag{false; int moves{0; draw_board(board); while (!flag) { bool player1_moved{false; bool player2_moved{false; if (!(get_valid_positions(board, 'X').empty())) { human_move(board, 'X'); player1_moved = true; moves++; if (!(get_valid_positions(board, 'O').empty())) { computer_move_using_simple_heuristic(board, 'O'); player2_moved = true; moves++; if ((moves == ROWS * COLS - 4) (!player1_moved &&!player2_moved)) flag = true; delete_board(board); 17

18 lab03_03.cpp Μεταγλώττιση και εκτέλεση του κώδικα g++ lab03_board.cpp lab03_human.cpp lab03_solvers.cpp lab03_03.cpp -o lab03_03 -std=c++11./lab03_ X O Score X=2 O=2 Player X turn, valid moves=(2 4)(3 5)(4 2)(5 3) Enter move: X X X Score X=4 O=1 Computer using heuristic plays with disk O (2 3)->3 (2 5)->3 (4 5)->3 2 O 3 O X X Score X=3 O=3 Player X turn, valid moves=(1 2)(2 2)(3 2)(4 2)(5 2) Enter move:3 2 2 O 3 X X X X Score X=5 O=2 Computer using heuristic plays with disk O (2 1)->4 (2 5)->4 (4 1)->4 (4 5)->5 2 O 3 X X O X 4 O O O Score X=3 O=5 Player X turn, valid moves=(1 3)(1 4)(5 3)(5 4)(5 5) Enter move: Ο αλγόριθμος minimax και ο αλγόριθμος alpha-beta στο παιχνίδι Οθέλλο Η συνάρτηση χρησιμότητας int utility(char **aboard) επιστρέφει μια ακέραια τιμή για κάθε διαμόρφωση του ταμπλό. Τιμές με υψηλότερες θετικές τιμές είναι προτιμότερες για τον παίκτη Ο ενώ συμμετρικά μικρότερες αρνητικές τιμές είναι προτιμότερες για τον παίκτη Χ. Η συνάρτηση χρησιμότητας καλεί τρεις ευρετικές συναρτήσεις προκειμένου να διαμορφώσει την τιμή της. Οι ευρετικές συναρτήσεις αφορούν: 1. τον αριθμό από πούλια που έχει στο ταμπλό ο κάθε παίκτης 2. τον αριθμό των κινήσεων που είναι σε θέση να κάνει ο κάθε παίκτης 3. τον αριθμό από γωνίες που έχει καταλάβει ο κάθε παίκτης Εναλλακτικά, θα μπορούσε να χρησιμοποιηθεί κάποια άλλη συνάρτηση χρησιμότητας. Παρτίδα παιχνιδιού με παίκτη και αντίπαλο τον αλγόριθμο minimax #include "lab03_board.hpp" #include "lab03_human.hpp" #include "lab03_solvers.hpp" int main(int argc, char *argv[]) { if (argc!= 3) exit(-1); 18

19 string solver = argv[1]; int plies = atoi(argv[2]); char **board = initialize_board(); bool flag{false; int moves{0; draw_board(board); while (!flag) { bool player1_moved{false; bool player2_moved{false; if (!(get_valid_positions(board, 'X').empty())) { human_move(board, 'X'); player1_moved = true; moves++; if (!(get_valid_positions(board, 'O').empty())) { if (solver.compare("minimax")==0) computer_move_using_min_max(board, plies, 'O'); else computer_move_using_alpha_beta(board, plies, 'O'); player2_moved = true; moves++; if ((moves == ROWS * COLS - 4) (!player1_moved &&!player2_moved)) flag = true; delete_board(board); lab03_04.cpp Μεταγλώττιση και εκτέλεση του κώδικα g++ lab03_board.cpp lab03_human.cpp lab03_solvers.cpp lab03_04.cpp -o lab03_04 -std=c++11./lab03_04 MINIMAX X O Score X=2 O=2 Player X turn, valid moves=(2 4)(3 5)(4 2)(5 3) Enter move: X O 4 X X X Score X=4 O=1 Computer using min-max plays with disk O Computer using min-max plays with disk O 2 O X 3 O O O X O 4 O O O 5 O O O O 6 X 7 X X X Score X=6 O=12 Player X turn, valid moves=(2 2)(2 6)(3 0)(3 6)(4 0)(4 5)(6 1)(6 4) Enter move:6 1 2 O X 3 O O O X O 4 O X O 5 O X O O 6 X X 7 X X X Score X=9 O=10 Computer using min-max plays with disk O 19

20 2 3 O O O 4 X X X Score X=3 O=3 Player X turn, valid moves=(2 1)(2 2)(2 3)(2 4)(2 5) Enter move:2 5 2 X 3 O O X 4 X X X Score X=5 O= O O X 3 O O O O O 4 O X O 5 O X O O 6 X X 7 X X X Score X=8 O=12 Player X turn, valid moves=(2 1)(2 2)(2 3)(2 6)(4 0)(4 1)(4 5)(5 0)(5 5)(6 3)(6 5) Enter move: Εκτέλεση του κώδικα για τον άλφα-βήτα με 5 στρώσεις./lab03_04 ALPHABETA 5 Τα ίδια αποτελέσματα με το MINIMAX αλλά ταχύτερα Αναφορές 1. Τεχνητή Νοημοσύνη μια σύγχρονη προσέγγιση, Β έκδοση, Stuart Russell, Peter Norvig, Εκδόσεις Κλειδάριθμος, Τεχνητή Νοημοσύνη, Γ έκδοση, Ι. Βλαχαβάς, Π. Κεφαλάς, Ν. Βασιλειάδης, Φ. Κόκορας, Η. Σακελλαρίου, Γκιούρδας Εκδοτική, Introduction to Artificial Intelligence, Wolfgang Ertel, Springer,

ΑΣΚΗΣΕΙΣ ΓΙΑ ΤΟ ΕΡΓΑΣΤΗΡΙΟ 3

ΑΣΚΗΣΕΙΣ ΓΙΑ ΤΟ ΕΡΓΑΣΤΗΡΙΟ 3 Version 1.0 (16/03/2017) Σχολή Τεχνολογικών Εφαρμογών (ΣΤΕΦ) Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Διδάσκων: Γκόγκος Χρήστος Μάθημα: Τεχνητή Νοημοσύνη (εργαστήριο Δ εξαμήνου) Ακαδημαϊκό έτος 2016-2017 εαρινό

Διαβάστε περισσότερα

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

Τεχνητή Νοημοσύνη. 6η διάλεξη ( ) Ίων Ανδρουτσόπουλος. Τεχνητή Νοημοσύνη 6η διάλεξη (2016-17) Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Οι διαφάνειες αυτής της διάλεξης βασίζονται στα βιβλία Τεχνητή Νοημοσύνη των Βλαχάβα κ.ά., 3η έκδοση, Β. Γκιούρδας

Διαβάστε περισσότερα

Θεωρία Λήψης Αποφάσεων

Θεωρία Λήψης Αποφάσεων Θεωρία Λήψης Αποφάσεων Ενότητα 8: Αναζήτηση με Αντιπαλότητα Μπεληγιάννης Γρηγόριος Σχολή Οργάνωσης και Διοίκησης Επιχειρήσεων Τμήμα Διοίκησης Επιχειρήσεων Αγροτικών Προϊόντων & Τροφίμων (Δ.Ε.Α.Π.Τ.) Αναζήτηση

Διαβάστε περισσότερα

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

Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή raniah@hua.gr 1 Παίγνια Δύο Αντιπάλων Τα προβλήματα όπου η εξέλιξη των καταστάσεων εξαρτάται

Διαβάστε περισσότερα

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

Κεφάλαιο 5. Αλγόριθµοι Αναζήτησης σε Παίγνια ύο Αντιπάλων. Τεχνητή Νοηµοσύνη - Β' Έκδοση Κεφάλαιο 5 Αλγόριθµοι Αναζήτησης σε Παίγνια ύο Αντιπάλων Τεχνητή Νοηµοσύνη - Β' Έκδοση Ι. Βλαχάβας, Π. Κεφαλάς, Ν. Βασιλειάδης, Φ. Κόκκορας, Η. Σακελλαρίου Αλγόριθµοι Αναζήτησης σε Παίγνια ύο Αντιπάλων

Διαβάστε περισσότερα

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

Επίλυση Προβλημάτων 1 Επίλυση Προβλημάτων 1 Επίλυση Προβλημάτων Περιγραφή Προβλημάτων Αλγόριθμοι αναζήτησης Αλγόριθμοι τυφλής αναζήτησης Αναζήτηση πρώτα σε βάθος Αναζήτηση πρώτα σε πλάτος (ΒFS) Αλγόριθμοι ευρετικής αναζήτησης

Διαβάστε περισσότερα

Αλγόριθμοι Αναζήτησης σε Παίγνια Δύο Αντιπάλων

Αλγόριθμοι Αναζήτησης σε Παίγνια Δύο Αντιπάλων Τεχνητή Νοημοσύνη 06 Αλγόριθμοι Αναζήτησης σε Παίγνια Δύο Αντιπάλων Εισαγωγικά (1/3) Τα προβλήματα όπου η εξέλιξη των καταστάσεων εξαρτάται από δύο διαφορετικά σύνολα τελεστών μετάβασης που εφαρμόζονται

Διαβάστε περισσότερα

Προγραμματιστικές Ασκήσεις, Φυλλάδιο 1

Προγραμματιστικές Ασκήσεις, Φυλλάδιο 1 ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΕ C Προγραμματιστικές Ασκήσεις, Φυλλάδιο Εκφώνηση: 9/3/0 Παράδοση: 5/4/0,.59 Άσκηση 0 η : Το πρόβλημα της βελόνας του Buffon Θέμα της εργασίας

Διαβάστε περισσότερα

που θα δώσει αποτέλεσµα 48, λόγω της αριστερής προσεταιριστικότητας των τελεστών / και *, ενώ η επιθυµητή αντικατάσταση θα ήταν η

που θα δώσει αποτέλεσµα 48, λόγω της αριστερής προσεταιριστικότητας των τελεστών / και *, ενώ η επιθυµητή αντικατάσταση θα ήταν η ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Α' Περιόδου 2013 Θέµα 1 (α') Η απάντηση είναι λάθος. Αν χρησιµοποιήσουµε την µακροεντολή, για παράδειγµα, στην έκφραση 24/CUBE(2) η έκφραση

Διαβάστε περισσότερα

Πληροφοριακά Συστήματα Διοίκησης (ΜΒΑ) Ενότητα 8: Παίγνια πλήρους και ελλιπούς πληροφόρησης

Πληροφοριακά Συστήματα Διοίκησης (ΜΒΑ) Ενότητα 8: Παίγνια πλήρους και ελλιπούς πληροφόρησης Πληροφοριακά Συστήματα Διοίκησης (ΜΒΑ) Ενότητα 8: Παίγνια πλήρους και ελλιπούς πληροφόρησης Μπεληγιάννης Γρηγόριος Σχολή Οργάνωσης και Διοίκησης Επιχειρήσεων Τμήμα Διοίκησης Επιχειρήσεων Αγροτικών Προϊόντων

Διαβάστε περισσότερα

ΑΣΚΗΣΕΙΣ ΓΙΑ ΤΟ ΕΡΓΑΣΤΗΡΙΟ 2

ΑΣΚΗΣΕΙΣ ΓΙΑ ΤΟ ΕΡΓΑΣΤΗΡΙΟ 2 Version 1.5 (16/03/2017) Σχολή Τεχνολογικών Εφαρμογών (ΣΤΕΦ) Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Διδάσκων: Γκόγκος Χρήστος Μάθημα: Τεχνητή Νοημοσύνη (εργαστήριο Δ εξαμήνου) Ακαδημαϊκό έτος 2016-2017 εαρινό

Διαβάστε περισσότερα

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

Επίλυση προβληµάτων. Περιγραφή προβληµάτων Αλγόριθµοι αναζήτησης Αλγόριθµοι τυφλής αναζήτησης Αλγόριθµοι ευρετικής αναζήτησης Επίλυση προβληµάτων Περιγραφή προβληµάτων Αλγόριθµοι αναζήτησης Αλγόριθµοι τυφλής αναζήτησης Αλγόριθµοι ευρετικής αναζήτησης! Παιχνίδια δύο αντιπάλων Προβλήµατα ικανοποίησης περιορισµών Γενικά " Ντετερµινιστικά

Διαβάστε περισσότερα

Τσάπελη Φανή ΑΜ: 2004030113. Ενισχυτική Μάθηση για το παιχνίδι dots. Τελική Αναφορά

Τσάπελη Φανή ΑΜ: 2004030113. Ενισχυτική Μάθηση για το παιχνίδι dots. Τελική Αναφορά Τσάπελη Φανή ΑΜ: 243113 Ενισχυτική Μάθηση για το παιχνίδι dots Τελική Αναφορά Περιγραφή του παιχνιδιού Το παιχνίδι dots παίζεται με δύο παίχτες. Έχουμε έναν πίνακα 4x4 με τελείες, και σκοπός του κάθε παίχτη

Διαβάστε περισσότερα

Ασκήσεις μελέτης της 6 ης διάλεξης

Ασκήσεις μελέτης της 6 ης διάλεξης Οικονομικό Πανεπιστήμιο Αθηνών, Τμήμα Πληροφορικής Μάθημα: Τεχνητή Νοημοσύνη, 2016 17 Διδάσκων: Ι. Ανδρουτσόπουλος Ασκήσεις μελέτης της 6 ης διάλεξης 6.1. (α) Το mini-score-3 παίζεται όπως το score-4,

Διαβάστε περισσότερα

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf(%u\n, x); Β. unsigned char ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εξετάσεις Β Περιόδου 2015 (8/9/2015) ΟΝΟΜΑΤΕΠΩΝΥΜΟ:................................................................................ Α.Μ.:...............................................

Διαβάστε περισσότερα

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΜΑΚΕΔΟΝΙΑΣ ΟΙΚΟΝΟΜΙΚΩΝ ΚΑΙ ΚΟΙΝΩΝΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΕΦΑΡΜΟΣΜΕΝΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕΧΝΗΤΗ ΝΟΗΜΟΣΥΝΗ ΠΑΝΕΠΙΣΤΗΜΙΟ ΜΑΚΕΔΟΝΙΑΣ ΟΙΚΟΝΟΜΙΚΩΝ ΚΑΙ ΚΟΙΝΩΝΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΕΦΑΡΜΟΣΜΕΝΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕΧΝΗΤΗ ΝΟΗΜΟΣΥΝΗ Τελικές εξετάσεις Πέμπτη 27 Ιουνίου 2013 10:003:00 Έστω το πάζλ των οκτώ πλακιδίων (8-puzzle)

Διαβάστε περισσότερα

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

Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή raniah@hua.gr 1 Αναζήτηση Δοθέντος ενός προβλήματος με περιγραφή είτε στον χώρο καταστάσεων

Διαβάστε περισσότερα

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

Δομές Δεδομένων και Αλγόριθμοι Δομές Δεδομένων και Αλγόριθμοι Χρήστος Γκόγκος ΤΕΙ Ηπείρου Χειμερινό Εξάμηνο 2014-2015 Παρουσίαση 18 Dijkstra s Shortest Path Algorithm 1 / 12 Ο αλγόριθμος εύρεσης της συντομότερης διαδρομής του Dijkstra

Διαβάστε περισσότερα

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

Μάθημα 22: Δυαδικά δέντρα (Binary Trees) Trees Page 1 Μάθημα 22: Δυαδικά δέντρα (Binary Trees) Ένα δένδρο είναι δυαδικό αν όλοι οι κόμβοι του έχουν βαθμό (degree)

Διαβάστε περισσότερα

Προγραμματισμός Υπολογιστών με C++

Προγραμματισμός Υπολογιστών με C++ Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 2η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Βασικοί αριθμητικοί τύποι, μετατροπές τύπων και σταθερές. Πίνακες. Πίνακες

Διαβάστε περισσότερα

[ΠΛΗ 417] Τεχνητή Νοημοσύνη. Project Εξαμήνου ΠΟΛΥΤΕΧΝΕΙΟ ΚΡΗΤΗΣ

[ΠΛΗ 417] Τεχνητή Νοημοσύνη. Project Εξαμήνου ΠΟΛΥΤΕΧΝΕΙΟ ΚΡΗΤΗΣ [ΠΛΗ 417] Τεχνητή Νοημοσύνη Project Εξαμήνου Γεωργαρά Αθηνά (A.M. 2011030065) ΠΟΛΥΤΕΧΝΕΙΟ ΚΡΗΤΗΣ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ & ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΕΑΡΙΝΟ ΕΞΑΜΗΝΟ 2015-2016 Στη εργασία εξαμήνου αυτή

Διαβάστε περισσότερα

Αυτόνομοι Πράκτορες. Εργασία εξαμήνου. Μάθηση του παιχνιδιού British square με χρήση Temporal Difference(TD) Κωνσταντάκης Γιώργος

Αυτόνομοι Πράκτορες. Εργασία εξαμήνου. Μάθηση του παιχνιδιού British square με χρήση Temporal Difference(TD) Κωνσταντάκης Γιώργος Αυτόνομοι Πράκτορες Εργασία εξαμήνου Μάθηση του παιχνιδιού British square με χρήση Temporal Difference(TD) Κωνσταντάκης Γιώργος 2010030090 Περιγραφή του παιχνιδιού Το British square είναι ένα επιτραπέζιο

Διαβάστε περισσότερα

Ε ανάληψη. Προβλήµατα ικανο οίησης εριορισµών. ορισµός και χαρακτηριστικά Ε ίλυση ροβληµάτων ικανο οίησης εριορισµών

Ε ανάληψη. Προβλήµατα ικανο οίησης εριορισµών. ορισµός και χαρακτηριστικά Ε ίλυση ροβληµάτων ικανο οίησης εριορισµών ΠΛΗ 405 Τεχνητή Νοηµοσύνη Αναζήτηση µε Αντι αλότητα Adversarial Search Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υ ολογιστών Πολυτεχνείο Κρήτης Ε ανάληψη Προβλήµατα ικανο οίησης εριορισµών ορισµός και

Διαβάστε περισσότερα

Δισδιάστατοι Πίνακες (2D Arrays) Εισαγωγή στη C++

Δισδιάστατοι Πίνακες (2D Arrays) Εισαγωγή στη C++ Δισδιάστατοι Πίνακες (2D Arrays) Εισαγωγή στη C++ Γενικά Η εντολή: int arr[5][2]; Δηλώνει την μεταβλητή arr σαν πίνακα με πέντε γραμμές (rows) και με δύο στήλες (columns). Η αρίθμηση και των δύο δεικτών

Διαβάστε περισσότερα

Αναζήτηση με Αντιπαλότητα

Αναζήτηση με Αντιπαλότητα Αναζήτηση με Αντιπαλότητα Μανόλης Κουμπαράκης Τεχνητή Νοημοσύνη 1 Αναζήτηση με Αντιπαλότητα Όταν σε ένα περιβάλλον έχουμε περισσότερους από ένα πράκτορες, τότε κάθε πράκτορας πρέπει να λαμβάνει υπόψη του

Διαβάστε περισσότερα

Εισαγωγή στον Προγραμματισμό

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

Διαβάστε περισσότερα

Τεχνητή Νοημοσύνη Ι. Ενότητα 6: Αναζήτηση με Αντιπαλότητα

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

Διαβάστε περισσότερα

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ Γεώργιος Παπαϊωάννου (2013-16) gepap@aueb.gr Περιγραφή: Βασικοί Τύποι Πίνακες (μέρος 1) Συμβολοσειρές Ο Προεπεξεργαστής Τελευταία ενημέρωση: Σεπτέμβριος 2016 Εισαγωγή - 2 short:

Διαβάστε περισσότερα

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

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 17: Λύση Προβλημάτων με Αναδρομή Οι πύργοι του Hanoi Δίνεται ένα χώρος με τρεις θέσεις αποθήκευσης. Δίνεται μια στοίβα από Ν πλάκες σε φθίνον μέγεθος, σε μια από τις τρεις

Διαβάστε περισσότερα

Αυτόνομοι Πράκτορες. Εργασία εξαμήνου. Value Iteration και Q- Learning για Peg Solitaire

Αυτόνομοι Πράκτορες. Εργασία εξαμήνου. Value Iteration και Q- Learning για Peg Solitaire Αυτόνομοι Πράκτορες Εργασία εξαμήνου Value Iteration και Q- Learning για Peg Solitaire Μαρίνα Μαυρίκου 2007030102 1.Εισαγωγικά για το παιχνίδι Το Peg Solitaire είναι ένα παιχνίδι το οποίο παίζεται με ένα

Διαβάστε περισσότερα

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

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 17: Λύση Προβλημάτων με Αναδρομή Οι πύργοι του Hanoi Δίνεται ένα χώρος με τρεις θέσεις αποθήκευσης. Δίνεται μια στοίβα από Ν πλάκες σε φθίνον μέγεθος, σε μια από τις τρεις

Διαβάστε περισσότερα

#4. Heaps (σωροί), η ταξινόμηση HeapSort, η δομή std::priority_queue της STL

#4. Heaps (σωροί), η ταξινόμηση HeapSort, η δομή std::priority_queue της STL Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Σχολή Τεχνολογικών Εφαρμογών Ακαδημαϊκό έτος 2016-2017 ΤΕΙ Ηπείρου - Άρτα Δομές Δεδομένων και Αλγόριθμοι (εργαστήριο) Γκόγκος Χρήστος #4. Heaps (σωροί), η ταξινόμηση HeapSort,

Διαβάστε περισσότερα

Εντολές εισόδου - εξόδου. Εισαγωγή στη C++

Εντολές εισόδου - εξόδου. Εισαγωγή στη C++ Εντολές εισόδου - εξόδου Εισαγωγή στη C++ Το πρώτο πρόγραμμα //my first program #include using namespace std; int main(){ cout

Διαβάστε περισσότερα

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

Δομές Δεδομένων & Αλγόριθμοι - Πίνακες 1 Πίνακες Οι πίνακες έχουν σταθερό μέγεθος και τύπο δεδομένων. Βασικά πλεονεκτήματά τους είναι η απλότητα προγραμματισμού τους και η ταχύτητα. Ωστόσο δεν παρέχουν την ευελιξία η οποία απαιτείται

Διαβάστε περισσότερα

Η εντολή if-else. Η απλή μορφή της εντολής if είναι η ακόλουθη: if (συνθήκη) { Η γενική μορφή της εντολής ifelse. εντολή_1; εντολή_2;..

Η εντολή if-else. Η απλή μορφή της εντολής if είναι η ακόλουθη: if (συνθήκη) { Η γενική μορφή της εντολής ifelse. εντολή_1; εντολή_2;.. Επιλογή - Επανάληψη Η εντολή if-else Ο τελεστής παράστασης συνθήκης H εντολή switch Η εντολές for και while Η εντολή do-while Η εντολές break - continue - goto Μαθηματικές συναρτήσεις Λέξεις κλειδιά στη

Διαβάστε περισσότερα

Τεχνητή Νοημοσύνη. 2η διάλεξη (2015-16) Ίων Ανδρουτσόπουλος. http://www.aueb.gr/users/ion/

Τεχνητή Νοημοσύνη. 2η διάλεξη (2015-16) Ίων Ανδρουτσόπουλος. http://www.aueb.gr/users/ion/ Τεχνητή Νοημοσύνη 2η διάλεξη (2015-16) Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Οι διαφάνειες αυτής της διάλεξης βασίζονται στα βιβλία: Τεχνητή Νοημοσύνη των Βλαχάβα κ.ά., 3η έκδοση, Β. Γκιούρδας

Διαβάστε περισσότερα

Αλγόριθμοι Ταξινόμησης Μέρος 1

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

Διαβάστε περισσότερα

Αλγόριθμοι Τυφλής Αναζήτησης

Αλγόριθμοι Τυφλής Αναζήτησης Τεχνητή Νοημοσύνη 04 Αλγόριθμοι Τυφλής Αναζήτησης Αλγόριθμοι Τυφλής Αναζήτησης (Blind Search Algorithms) Εφαρμόζονται σε προβλήματα στα οποία δεν υπάρχει πληροφορία που να επιτρέπει αξιολόγηση των καταστάσεων.

Διαβάστε περισσότερα

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( ) ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ Γεώργιος Παπαϊωάννου (2013-16) gepap@aueb.gr Περιγραφή: Μορφές μεταβίβασης ορισμάτων σε συναρτήσεις (και μεθόδους) και οι επιπτώσεις τους Επιστροφή τιμών από κλήση συναρτήσεων Υπερφόρτωση

Διαβάστε περισσότερα

ΑΥΤΟΝΟΜΟΙ ΠΡΑΚΤΟΡΕΣ. ΑΝΑΦΟΡΑ ΕΡΓΑΣΙΑΣ Othello-TD Learning. Βόλτσης Βαγγέλης Α.Μ

ΑΥΤΟΝΟΜΟΙ ΠΡΑΚΤΟΡΕΣ. ΑΝΑΦΟΡΑ ΕΡΓΑΣΙΑΣ Othello-TD Learning. Βόλτσης Βαγγέλης Α.Μ ΑΥΤΟΝΟΜΟΙ ΠΡΑΚΤΟΡΕΣ ΑΝΑΦΟΡΑ ΕΡΓΑΣΙΑΣ Othello-TD Learning Βόλτσης Βαγγέλης Α.Μ. 2011030017 Η παρούσα εργασία πραγματοποιήθηκε στα πλαίσια του μαθήματος Αυτόνομοι Πράκτορες και σχετίζεται με λήψη αποφάσεων

Διαβάστε περισσότερα

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

Δομές Δεδομένων και Αλγόριθμοι Δομές Δεδομένων και Αλγόριθμοι Χρήστος Γκόγκος ΤΕΙ Ηπείρου Χειμερινό Εξάμηνο 2014-2015 Παρουσίαση 8 Quick Sort 1 / 11 Ο αλγόριθμος QuickSort 1 Προτάθηκε από τον CAR (Tony) Hoare το 1961 2 Ο αλγόριθμος

Διαβάστε περισσότερα

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

Διάλεξη 17: Δυαδικά Δέντρα. Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ Διάλεξη 7: Δυαδικά Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Δυαδικά Δένδρα Δυαδικά Δένδρα Αναζήτησης Πράξεις Εισαγωγής, Εύρεσης Στοιχείου, Διαγραφής Μικρότερου Στοιχείου Διδάσκων:

Διαβάστε περισσότερα

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

Τεχνητή Νοημοσύνη. 3η διάλεξη ( ) Ίων Ανδρουτσόπουλος. Τεχνητή Νοημοσύνη 3η διάλεξη (2016-17) Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Οι διαφάνειες αυτής της διάλεξης βασίζονται στα βιβλία Τεχνητή Νοημοσύνη των Βλαχάβα κ.ά., 3η έκδοση, Β. Γκιούρδας

Διαβάστε περισσότερα

lab13grades Άσκηση 2 -Σωστά απελευθερώνετε ολόκληρη τη λίστα και την κεφαλή

lab13grades Άσκηση 2 -Σωστά απελευθερώνετε ολόκληρη τη λίστα και την κεφαλή ΑΕΜ ΒΑΘΜΟΣ ΣΧΟΛΙΑ 00497 -Δεν ελέγχετε αν η createlist εκτελλέστικε σωστά και δεν τερµατίζετε το πρόγραµµα σε διαφορετική -Σωστά βρίσκετε το σηµείο στο οποίο πρέπει να προστεθεί ο κόµβος. -Σωστά τερµατίζετε

Διαβάστε περισσότερα

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τι είναι οι πίνακες; Μονοδιάστατοι πίνακες. Απλές μεταβλητές: Κεντρική μνήμη

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τι είναι οι πίνακες; Μονοδιάστατοι πίνακες. Απλές μεταβλητές: Κεντρική μνήμη ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ Μονοδιάστατοι πίνακες Τι είναι οι πίνακες; Απλές μεταβλητές: Κεντρική μνήμη 32 10 0001 a e z Ονόματα μεταβλητών 1 2 Τι είναι οι πίνακες; Πίνακες: Κεντρική μνήμη x Όνομα πίνακα 3 Τι είναι

Διαβάστε περισσότερα

Στη C++ υπάρχουν τρεις τύποι βρόχων: (a) while, (b) do while, και (c) for. Ακολουθεί η σύνταξη για κάθε μια:

Στη C++ υπάρχουν τρεις τύποι βρόχων: (a) while, (b) do while, και (c) for. Ακολουθεί η σύνταξη για κάθε μια: Εργαστήριο 6: 6.1 Δομές Επανάληψης Βρόγχοι (Loops) Όταν θέλουμε να επαναληφθεί μια ομάδα εντολών τη βάζουμε μέσα σε ένα βρόχο επανάληψης. Το αν θα (ξανα)επαναληφθεί η εκτέλεση της ομάδας εντολών καθορίζεται

Διαβάστε περισσότερα

Δομές Δεδομένων και Αλγόριθμοι (Γ εξάμηνο) Τμήμα Μηχανικών Πληροφορικής ΤΕ, ΤΕΙ Ηπείρου. Άσκηση εργαστηρίου #6 (Υλοποίηση δυαδικού δένδρου αναζήτησης)

Δομές Δεδομένων και Αλγόριθμοι (Γ εξάμηνο) Τμήμα Μηχανικών Πληροφορικής ΤΕ, ΤΕΙ Ηπείρου. Άσκηση εργαστηρίου #6 (Υλοποίηση δυαδικού δένδρου αναζήτησης) Δομές Δεδομένων και Αλγόριθμοι (Γ εξάμηνο) Τμήμα Μηχανικών Πληροφορικής ΤΕ, ΤΕΙ Ηπείρου Γκόγκος Χρήστος 04/12/2014 Άσκηση εργαστηρίου #6 (Υλοποίηση δυαδικού δένδρου αναζήτησης) Στην εργασία αυτή παρουσιάζεται

Διαβάστε περισσότερα

Κεφάλαιο 3. Αλγόριθµοι Τυφλής Αναζήτησης. Τεχνητή Νοηµοσύνη - Β' Έκδοση. Ι. Βλαχάβας, Π. Κεφαλάς, Ν. Βασιλειάδης, Φ. Κόκκορας, Η.

Κεφάλαιο 3. Αλγόριθµοι Τυφλής Αναζήτησης. Τεχνητή Νοηµοσύνη - Β' Έκδοση. Ι. Βλαχάβας, Π. Κεφαλάς, Ν. Βασιλειάδης, Φ. Κόκκορας, Η. Κεφάλαιο 3 Αλγόριθµοι Τυφλής Αναζήτησης Τεχνητή Νοηµοσύνη - Β' Έκδοση Ι. Βλαχάβας, Π. Κεφαλάς, Ν. Βασιλειάδης, Φ. Κόκκορας, Η. Σακελλαρίου Αλγόριθµοι Τυφλής Αναζήτησης Οι αλγόριθµοι τυφλής αναζήτησης (blind

Διαβάστε περισσότερα

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ Θεωρία Παιγνίων και Αποφάσεων Διδάσκων: Ε. Μαρκάκης, Εαρινό εξάμηνο 2015

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ Θεωρία Παιγνίων και Αποφάσεων Διδάσκων: Ε. Μαρκάκης, Εαρινό εξάμηνο 2015 ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ Θεωρία Παιγνίων και Αποφάσεων Διδάσκων: Ε. Μαρκάκης, Εαρινό εξάμηνο 2015 Λύσεις 2η σειράς ασκήσεων Προθεσμία παράδοσης: 18 Μαίου 2015 Πρόβλημα 1. (14

Διαβάστε περισσότερα

Προγραμματισμός Υπολογιστών με C++

Προγραμματισμός Υπολογιστών με C++ Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 5η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Πίνακες ως ορίσματα συναρτήσεων. Τα ορίσματα argc και argv της main.

Διαβάστε περισσότερα

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

Δομές Δεδομένων και Αλγόριθμοι Δομές Δεδομένων και Αλγόριθμοι Χρήστος Γκόγκος ΤΕΙ Ηπείρου Χειμερινό Εξάμηνο 2014-2015 Παρουσίαση 19 Hashing - Κατακερματισμός 1 / 23 Πίνακες απευθείας πρόσβασης (Direct Access Tables) Οι πίνακες απευθείας

Διαβάστε περισσότερα

Προγραμματισμός Υπολογιστών με C++

Προγραμματισμός Υπολογιστών με C++ Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 4η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Δείκτες και πίνακες. Δείκτες σε σταθερές και σταθεροί δείκτες. Μεταβίβαση

Διαβάστε περισσότερα

Θεωρία Παιγνίων Δρ. Τασσόπουλος Ιωάννης

Θεωρία Παιγνίων Δρ. Τασσόπουλος Ιωάννης Θεωρία Παιγνίων Δρ. Τασσόπουλος Ιωάννης 1 η Διάλεξη Ορισμός Θεωρίας Παιγνίων και Παιγνίου Κατηγοριοποίηση παιγνίων Επίλυση παιγνίου Αξία (τιμή) παιγνίου Δίκαιο παίγνιο Αναπαράσταση Παιγνίου Με πίνακα Με

Διαβάστε περισσότερα

Ασκήσεις ανακεφαλαίωσης στο μάθημα Τεχνητή Νοημοσύνη

Ασκήσεις ανακεφαλαίωσης στο μάθημα Τεχνητή Νοημοσύνη Ασκήσεις ανακεφαλαίωσης στο μάθημα Τεχνητή Νοημοσύνη Τμήμα Μηχανικών Πληροφορικής ΤΕ (ΤΕΙ Ηπείρου) Τυφλή αναζήτηση Δίνεται το ακόλουθο κατευθυνόμενο γράφημα 1. Ο κόμβος αφετηρία είναι ο Α και ο κόμβος

Διαβάστε περισσότερα

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τύποι δεδομένων ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΠΡΑΞΕΙΣ ΜΕΤΑΒΛΗΤΕΣ. Ακέραιοι αριθμοί (int) Πράξεις μεταξύ ακεραίων αριθμών

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τύποι δεδομένων ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΠΡΑΞΕΙΣ ΜΕΤΑΒΛΗΤΕΣ. Ακέραιοι αριθμοί (int) Πράξεις μεταξύ ακεραίων αριθμών ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΠΡΑΞΕΙΣ ΜΕΤΑΒΛΗΤΕΣ 1 Τύποι δεδομένων Η γλώσσα προγραμματισμού C++ υποστηρίζει τους παρακάτω τύπους δεδομένων: 1) Ακέραιοι αριθμοί (int). 2) Πραγματικοί αριθμοί διπλής ακρίβειας

Διαβάστε περισσότερα

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

Δομές Δεδομένων και Αλγόριθμοι Δομές Δεδομένων και Αλγόριθμοι Χρήστος Γκόγκος ΤΕΙ Ηπείρου Χειμερινό Εξάμηνο 2014-2015 Παρουσίαση 17 Σωροί (Heaps) έκδοση 10 1 / 19 Heap Σωρός Ο σωρός είναι μια μερικά ταξινομημένη δομή δεδομένων που υποστηρίζει

Διαβάστε περισσότερα

PROJECT ΣΤΟ ΜΑΘΗΜΑ "ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΕΥΡΕΤΙΚΕΣ ΜΕΘΟΔΟΥΣ"

PROJECT ΣΤΟ ΜΑΘΗΜΑ ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΕΥΡΕΤΙΚΕΣ ΜΕΘΟΔΟΥΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ PROJECT ΣΤΟ ΜΑΘΗΜΑ "ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΕΥΡΕΤΙΚΕΣ ΜΕΘΟΔΟΥΣ" ΜΕΡΟΣ ΔΕΥΤΕΡΟ Υπεύθυνος Καθηγητής Λυκοθανάσης Σπυρίδων Ακαδημαικό Έτος:

Διαβάστε περισσότερα

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

Δομές Δεδομένων και Αλγόριθμοι Δομές Δεδομένων και Αλγόριθμοι Χρήστος Γκόγκος ΤΕΙ Ηπείρου Χειμερινό Εξάμηνο 2014-2015 Παρουσίαση 14 Στοίβες 1 / 14 Στοίβες Η στοίβα είναι μια ειδική περίπτωση γραμμικής λίστας στην οποία οι εισαγωγές

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΜΑΚΕΔΟΝΙΑΣ ΤΜΗΜΑ ΕΦΑΡΜΟΣΜΕΝΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕΧΝΗΤΗ ΝΟΗΜΟΣΥΝΗ. Τελικές εξετάσεις Παρασκευή 4 Ιουλίου 2014, 18:00-21:00

ΠΑΝΕΠΙΣΤΗΜΙΟ ΜΑΚΕΔΟΝΙΑΣ ΤΜΗΜΑ ΕΦΑΡΜΟΣΜΕΝΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕΧΝΗΤΗ ΝΟΗΜΟΣΥΝΗ. Τελικές εξετάσεις Παρασκευή 4 Ιουλίου 2014, 18:00-21:00 ΘΕΜΑ 1 ο (2 μονάδες) ΠΑΝΕΠΙΣΤΗΜΙ ΜΑΚΕΔΝΙΑΣ ΤΜΗΜΑ ΕΦΑΡΜΣΜΕΝΗΣ ΠΛΗΡΦΡΙΚΗΣ ΤΕΧΝΗΤΗ ΝΗΜΣΥΝΗ Τελικές εξετάσεις Παρασκευή 4 Ιουλίου 2014, 18:00-21:00 Δίνεται ο παρακάτω χάρτης πόλεων της Ρουμανίας με τις μεταξύ

Διαβάστε περισσότερα

Δομές Επανάληψης. Εισαγωγή στη C++

Δομές Επανάληψης. Εισαγωγή στη C++ Δομές Επανάληψης Εισαγωγή στη C++ Επαναληπτικές δηλώσεις Οι βρόγχοι (loops) αναγκάζουν ένα τμήμα κώδικα να επαναλαμβάνεται. Η επανάληψη συνεχίζεται για όσο μία λογική συνθήκη είναι αληθής. Όταν η συνθήκη

Διαβάστε περισσότερα

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

Ασκήσεις μελέτης της 4 ης διάλεξης. ), για οποιοδήποτε μονοπάτι n 1 Οικονομικό Πανεπιστήμιο Αθηνών, Τμήμα Πληροφορικής Μάθημα: Τεχνητή Νοημοσύνη, 2016 17 Διδάσκων: Ι. Ανδρουτσόπουλος Ασκήσεις μελέτης της 4 ης διάλεξης 4.1. (α) Αποδείξτε ότι αν η h είναι συνεπής, τότε h(n

Διαβάστε περισσότερα

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

Alternative to Balanced Trees, Comms of the ACM, 33(6), June 1990, ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ Τμήμα Πληροφορικής & Τηλεπικοινωνιών Μια σημείωση από τον Α. Δελή για το άρθρο: W. Pugh, Skip Lists: A Probabilistic Alternative to Balanced Trees, Comms of the ACM, 33(), June 10,

Διαβάστε περισσότερα

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

Τεχνητή Νοημοσύνη. 4η διάλεξη ( ) Ίων Ανδρουτσόπουλος. Τεχνητή Νοημοσύνη 4η διάλεξη (2016-17) Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Οι διαφάνειες αυτής της διάλεξης βασίζονται κυρίως στα βιβλία Τεχνητή Νοημοσύνη των Βλαχάβα κ.ά., 3η έκδοση, Β.

Διαβάστε περισσότερα

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2014-15

Διαβάστε περισσότερα

PROJECT ΣΤΟ ΜΑΘΗΜΑ ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΕΥΡΕΤΙΚΕΣ ΜΕΘΟ ΟΥΣ

PROJECT ΣΤΟ ΜΑΘΗΜΑ ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΕΥΡΕΤΙΚΕΣ ΜΕΘΟ ΟΥΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ PROJECT ΣΤΟ ΜΑΘΗΜΑ ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΕΥΡΕΤΙΚΕΣ ΜΕΘΟ ΟΥΣ ΜΕΡΟΣ ΠΡΩΤΟ Πολίτη Όλγα Α.Μ. 4528 Εξάµηνο 8ο Υπεύθυνος Καθηγητής Λυκοθανάσης

Διαβάστε περισσότερα

Πληροφορική 2. Αλγόριθμοι

Πληροφορική 2. Αλγόριθμοι Πληροφορική 2 Αλγόριθμοι 1 2 Τι είναι αλγόριθμος; Αλγόριθμος είναι ένα διατεταγμένο σύνολο από σαφή βήματα το οποίο παράγει κάποιο αποτέλεσμα και τερματίζεται σε πεπερασμένο χρόνο. Ο αλγόριθμος δέχεται

Διαβάστε περισσότερα

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

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 19: Λύση Προβλημάτων με Αναδρομή Οι πύργοι του Hanoi Δίνεται ένα χώρος με τρείς θέσεις αποθήκευσης. Δίνεται μια στοίβα από Ν πλάκες σε φθίνων μέγεθος, σε μια από τις τρείς

Διαβάστε περισσότερα

Εργαστήριο 3 Εντολή for while, do while

Εργαστήριο 3 Εντολή for while, do while Εργαστήριο 3 Εντολή for while, do while Άσκηση 3.1 Εύρεση αθροίσματος ακεραίων με χρήση της εντολής for #include int main(int argc, char *argv[]) int num,sum; coutnum;

Διαβάστε περισσότερα

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

Εργαστήριο Επεξεργασίας Πληροφορίας και Υπολογισμών Τομέας Ηλεκτρονικής και Υπολογιστών. ΤΗΜΜΥ Α.Π.Θ Πέμπτη 11 / 12 / 2014 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Εργαστήριο Επεξεργασίας Πληροφορίας και Υπολογισμών Τομέας Ηλεκτρονικής και Υπολογιστών 5 o Εξάμηνο ΤΗΜΜΥ Α.Π.Θ 2014-2015 Πέμπτη 11 / 12 / 2014 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ DS Gomoku Part 3 MinMax Algorithm (0,5 βαθμοί)

Διαβάστε περισσότερα

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

Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή raniah@hua.gr 1 Αλγόριθμοι Τυφλής Αναζήτησης Οι αλγόριθμοι τυφλής αναζήτησης εφαρμόζονται σε

Διαβάστε περισσότερα

Στόχοι και αντικείμενο ενότητας. Πέρασμα Πίνακα σε Συνάρτηση (συν.) Πέρασμα Πίνακα σε Συνάρτηση. #8.. Ειδικά Θέματα Αλγορίθμων

Στόχοι και αντικείμενο ενότητας. Πέρασμα Πίνακα σε Συνάρτηση (συν.) Πέρασμα Πίνακα σε Συνάρτηση. #8.. Ειδικά Θέματα Αλγορίθμων Στόχοι και αντικείμενο ενότητας Πέρασμα Πίνακα σε Συνάρτηση #8.. Ειδικά Θέματα Αλγορίθμων Προβλήματα Αναζήτησης Γραμμική Αναζήτηση (Linear Search) Ενημέρωση Μέτρηση Δυαδική Αναζήτηση (Binary Search) Προβλήματα

Διαβάστε περισσότερα

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128] ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εξετάσεις Α Περιόδου 2017 (27/1/2017) ΟΝΟΜΑΤΕΠΩΝΥΜΟ:................................................................................ Α.Μ.:...............................................

Διαβάστε περισσότερα

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

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 9: Συναρτήσεις Ορισμός συναρτήσεων () { /* δήλωση μεταβλητών */ /* εντολές ελέγχου/επεξεργασίας */ o Μια συνάρτηση ορίζεται δίνοντας

Διαβάστε περισσότερα

2 η Διάλεξη C++ Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ

2 η Διάλεξη C++ Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ 2 η Διάλεξη C++ Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ Τι μάθαμε μέχρι τώρα Κάθε πρόγραμμα της c++ περιέχει υποχρεωτικά μια συνάρτηση main() η οποία είναι εκείνη που εκτελείται πρώτη. Κάθε

Διαβάστε περισσότερα

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

Εργαστήριο Επεξεργασίας Πληροφορίας και Υπολογισμών Τομέας Ηλεκτρονικής και Υπολογιστών ΤΗΜΜΥ Α.Π.Θ 2015-2016 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Εργαστήριο Επεξεργασίας Πληροφορίας και Υπολογισμών Τομέας Ηλεκτρονικής και Υπολογιστών 5 Εξάμηνο ΤΗΜΜΥ Α.Π.Θ 2015-2016 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ DS Prximity Το παιχνίδι Το Prximity είναι ένα παιχνίδι στρατηγικής,

Διαβάστε περισσότερα

Αναφορές, είκτες και Αλφαριθμητικά

Αναφορές, είκτες και Αλφαριθμητικά Αναφορές, είκτες και Αλφαριθμητικά Ο τελεστής αναφοροποίησης Αναφορές είκτες Πίνακες και δείκτες Ο τελεστής new και delete υναμικοί πίνακες είκτες προς συναρτήσεις Αλφαριθμητικά της C Πίνακες Αλφαριθμητικών

Διαβάστε περισσότερα

Ονοματεπώνυμο και ΑΜ: Είχα παραδώσει εργασίες τα προηγούμενα ακαδημαϊκά έτη: ΚΑΛΗ ΕΠΙΤΥΧΙΑ!

Ονοματεπώνυμο και ΑΜ: Είχα παραδώσει εργασίες τα προηγούμενα ακαδημαϊκά έτη: ΚΑΛΗ ΕΠΙΤΥΧΙΑ! Οικονομικό Πανεπιστήμιο Αθηνών, Τμήμα Πληροφορικής Μάθημα: Προγραμματισμός Υπολογιστών με C++ Εξεταστική περίοδος: Φεβρουαρίου 2010. Διδάσκων: Α. Δημάκης Γράψτε όλες τις απαντήσεις σας πάνω σε αυτό το

Διαβάστε περισσότερα

Ευρετική αναζήτηση (πληροφορημένη αναζήτηση)

Ευρετική αναζήτηση (πληροφορημένη αναζήτηση) Version 1.5.1 (24/03/2017) Σχολή Τεχνολογικών Εφαρμογών (ΣΤΕΦ) Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Διδάσκων: Γκόγκος Χρήστος Μάθημα: Τεχνητή Νοημοσύνη (εργαστήριο Δ εξαμήνου) Ακαδημαϊκό έτος 2016-2017 εαρινό

Διαβάστε περισσότερα

Προγραμματισμός Υπολογιστών με C++

Προγραμματισμός Υπολογιστών με C++ Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 11η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Υπερφόρτωση του τελεστή εκχώρησης. Στατικές μεταβλητές, στατικές σταθερές

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΝΠΙΣΤΗΜΙΟ ΘΣΣΛΙΣ ΣΧΟΛΗ ΘΤΙΚΩΝ ΠΙΣΤΗΜΩΝ ΤΜΗΜ ΠΛΗΡΟΦΟΡΙΚΗΣ ΝΠΤΥΞΗ ΚΙ ΣΧΔΙΣΗ ΛΟΓΙΣΜΙΚΟΥ Η γλώσσα προγραμματισμού C ΡΓΣΤΗΡΙΟ 4.4: λφαριθμητικά, αρχεία, πίνακες, δομές, συναρτήσεις+ 2 Ιουνίου 2016 Η παρακάτω

Διαβάστε περισσότερα

Red-Black Δέντρα. Red-Black Δέντρα

Red-Black Δέντρα. Red-Black Δέντρα Red-Black Δέντρα v 6 3 8 4 z Red-Black Δέντρα Περίληψη Από τα (2,4) δέντρα στα red-black δέντρα Red-black δέντρο Ορισμός Ύψος Εισαγωγή αναδόμηση επαναχρωματισμός Διαγραφή αναδόμηση επαναχρωματισμός προσαρμογή

Διαβάστε περισσότερα

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

Διδάσκων: Κωνσταντίνος Κώστα Διάλεξη Ε4: Επανάληψη Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή σε δενδρικές δομές δεδομένων, Δυαδικά Δένδρα Αναζήτησης Ισοζυγισμένα Δένδρα & 2-3 Δένδρα Διδάσκων: Κωνσταντίνος

Διαβάστε περισσότερα

Προγραμματισμός Υπολογιστών με C++ Φύλλο Διαγωνίσματος Ακαδημαϊκό εξάμηνο: Χειμερινό

Προγραμματισμός Υπολογιστών με C++ Φύλλο Διαγωνίσματος Ακαδημαϊκό εξάμηνο: Χειμερινό Προγραμματισμός Υπολογιστών με C++ Φύλλο Διαγωνίσματος Ακαδημαϊκό εξάμηνο: Χειμερινό 2013-14 Διδάσκων: Γεώργιος Παπαϊωάννου Μονογραφή επιτηρητή: Στοιχεία Φοιτητή (συμπληρώνεται από το φοιτητή) Όνομα: Αίθουσα/αμφιθέατρο:

Διαβάστε περισσότερα

ΠΛΗ 405 Τεχνητή Νοηµοσύνη 2007. Ε ανάληψη. Προβλήµατα ικανο οίησης εριορισµών ορισµός και χαρακτηριστικά

ΠΛΗ 405 Τεχνητή Νοηµοσύνη 2007. Ε ανάληψη. Προβλήµατα ικανο οίησης εριορισµών ορισµός και χαρακτηριστικά ΠΛΗ 405 Τεχνητή Νοηµοσύνη Αναζήτηση µε Αντι αλότητα Adversarial Search Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υ ολογιστών Πολυτεχνείο Κρήτης Ε ανάληψη Προβλήµατα ικανο οίησης εριορισµών ορισµός και

Διαβάστε περισσότερα

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

Δομές Δεδομένων & Αλγόριθμοι Δομές Δεδομένων & Αναζήτηση & Ταξινόμηση 1 Αναζήτηση Έχω έναν πίνακα Α με Ν στοιχεία. Πρόβλημα: Βρες αν το στοιχείο x ανήκει στον πίνακα Αν ο πίνακας είναι αταξινόμητος τότε μόνη λύση σειριακή αναζήτηση

Διαβάστε περισσότερα

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ00 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 01-15

Διαβάστε περισσότερα

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

Γ7.5 Αλγόριθμοι Αναζήτησης. Γ Λυκείου Κατεύθυνσης Γ7.5 Αλγόριθμοι Αναζήτησης Γ Λυκείου Κατεύθυνσης Εισαγωγή Αλγόριθμος αναζήτησης θεωρείται ένας αλγόριθμος, ο οποίος προσπαθεί να εντοπίσει ένα στοιχείο με συγκεκριμένες ιδιότητες, μέσα σε μία συλλογή από

Διαβάστε περισσότερα

ΕΡΓΑΣΤΗΡΙΑΚΕΣ ΑΣΚΗΣΕΙΣ C ΣΕΙΡΑ 2 η

ΕΡΓΑΣΤΗΡΙΑΚΕΣ ΑΣΚΗΣΕΙΣ C ΣΕΙΡΑ 2 η Δ.Π.Θ. - Πολυτεχνική Σχολή Τμήμα Μηχανικών Παραγωγής & Διοίκησης Ακαδ. έτος 2017-2018 Τομέας Συστημάτων Παραγωγής Εξάμηνο Β Αναπληρωτής Καθηγητής Στέφανος Δ. Κατσαβούνης ΜΑΘΗΜΑ : ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Διαβάστε περισσότερα

10 η Διάλεξη C++ - Πίνακες. Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ

10 η Διάλεξη C++ - Πίνακες. Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ 10 η Διάλεξη C++ - Πίνακες Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ Ανακεφαλαίωση Κατά την κλήση μιας συνάρτησης κατ αξία οι τιμές των ορισμάτων αντιγράφονται στις αντίστοιχες τυπικές παραμέτρους

Διαβάστε περισσότερα

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

Διάλεξη 22: Δυαδικά Δέντρα. Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 22: Δυαδικά Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Δυαδικά Δένδρα - Δυαδικά Δένδρα Αναζήτησης - Πράξεις Εισαγωγής, Εύρεσης Στοιχείου, Διαγραφής Μικρότερου Στοιχείου

Διαβάστε περισσότερα

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τι είναι οι πίνακες; Μονοδιάστατοι πίνακες. Απλές μεταβλητές: Κεντρική μνήμη

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τι είναι οι πίνακες; Μονοδιάστατοι πίνακες. Απλές μεταβλητές: Κεντρική μνήμη ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ Μονοδιάστατοι πίνακες Τι είναι οι πίνακες; Απλές μεταβλητές: Κεντρική μνήμη a e z Ονόματα μεταβλητών Τι είναι οι πίνακες; Πίνακες: Κεντρική μνήμη x Όνομα πίνακα Τι είναι οι πίνακες; Μια

Διαβάστε περισσότερα

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Τύποι δεδομένων, μεταβλητές, πράξεις. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Τύποι δεδομένων, μεταβλητές, πράξεις. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Άδειες Χρήσης ΥΠΟΛΟΓΙΣΤΕΣ ΙI Τύποι δεδομένων, μεταβλητές, πράξεις Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης Το παρόν εκπαιδευτικό

Διαβάστε περισσότερα

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

Διάλεξη 14: Δέντρα IV B Δένδρα. Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 14: Δέντρα IV B Δένδρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: 2 3 Δένδρα, Εισαγωγή και άλλες πράξεις Άλλα Δέντρα: Β δένδρα, Β+ δέντρα, R δέντρα Διδάσκων: Παναγιώτης Ανδρέου ΕΠΛ231

Διαβάστε περισσότερα

Διαδικασιακός Προγραμματισμός

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 7 η Πίνακες Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή Σωτήρης Χριστοδούλου

Διαβάστε περισσότερα

Τίτλος Μαθήματος: Ηλεκτρονικοί Υπολογιστές IΙΙ. Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης

Τίτλος Μαθήματος: Ηλεκτρονικοί Υπολογιστές IΙΙ. Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης Τίτλος Μαθήματος: Ηλεκτρονικοί Υπολογιστές IΙΙ Ενότητα: Συναρτήσεις και ορίσματα Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης Τμήμα: Οικονομικών Επιστημών Διαφορά καθολικής μεταβλητής και σταθεράς

Διαβάστε περισσότερα

Μάθημα 21: Ουρές (Queues)

Μάθημα 21: Ουρές (Queues) Queues Page 1 Μάθημα 21: Ουρές (Queues) Η ουρά (queue) είναι μια δομή δεδομένων. Η βασική λειτουργικότητα είναι η εισαγωγή στοιχείων στην πίσω θέση και η εξαγωγή-διαγραφή στοιχείων από την μπροστινή θέση.

Διαβάστε περισσότερα

Δομημένος Προγραμματισμός (ΤΛ1006)

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ100) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

Διαβάστε περισσότερα

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

Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 12: Δέντρα ΙΙ -Δυαδικά Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Δυαδικά Δένδρα - Δυαδικά Δένδρα Αναζήτησης(ΔΔΑ) - Εύρεση Τυχαίου, Μέγιστου, Μικρότερου στοιχείου - Εισαγωγή

Διαβάστε περισσότερα

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δυναμική Δέσμευση Μνήμης και Δομές Δεδομένων (Φροντιστήριο)

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δυναμική Δέσμευση Μνήμης και Δομές Δεδομένων (Φροντιστήριο) ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δυναμική Δέσμευση Μνήμης και Δομές Δεδομένων (Φροντιστήριο) Τμήμα Πληροφορικής, Πανεπιστήμιο Κύπρου http://www.cs.ucy.ac.cy/courses/epl232 Το μάθημα αυτό

Διαβάστε περισσότερα

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

Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή raniah@hua.gr 1 Αλγόριθμοι Ευριστικής Αναζήτησης Πολλές φορές η τυφλή αναζήτηση δεν επαρκεί

Διαβάστε περισσότερα