Αναφορά Προγραμματιστικής Άσκησης μαθήματος Τεχνητής Νοημοσύνης 1

Σχετικά έγγραφα
ΚΕΥΑΛΑΙΟ 2 Σο εςωτερικό του υπολογιςτό

Το τςάϊ ςυντροφιά ςτην δουλειά

Παθήςεισ του θυροειδή ςε άτομα με ςύνδρομο Down: Πληροφορίεσ για γονείσ και δαςκάλουσ. Τι είναι ο θυροειδήσ αδένασ;

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

Βαγγϋλησ Οικονόμου Διϊλεξη 4. Δομ. Προγραμ. - Διϊλεξη 4

Εγχειρίδιο Χρήσης των Εργαλείων Αναγνώρισης Χαρισματικών Μαθητών στα Μαθηματικά

Επιςκόπηςη Τεχνολογιών Διαδικτύου

ημειώςεισ των αςκόςεων του μαθόματοσ Κεφαλαιαγορϋσ- Επενδύςεισ Ενότητα: Χρηματοοικονομικόσ Κύνδυνοσ Διδϊςκων : Αγγελϊκησ Γιώργοσ Εργαςτηριακόσ

Βαγγϋλησ Οικονόμου Διϊλεξη 5 ΠΙΝΑΚΕΣ. Δομ. Προγραμ. - Διϊλεξη 5 1

Βαγγϋλησ Οικονόμου Διϊλεξη 6. Δομ. Προγραμ. - Συναρτόςεισ - Διϊλεξη 6

Άδειες Χρήσης. Ειδικά Θέματα Μαθηματικών. Μαθηματικά στην εκπαίδευση: Επίλυση προβλήματος - Ρεαλιστικά Μαθηματικά

ενθαρρύνοντασ τη ςυνέχιςη των προβλημάτων

ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ ΘΕΜΑ Α Α1 Μονάδες 10 Μονάδες 4 ΤΕΛΟΣ 1ΗΣ ΣΕΛΙΔΑΣ

Ατλαντο-αξονικό αςτϊθεια ςτα ϊτομα με ςύνδρομο Ντϊουν: Πληροφορύεσ για γονεύσ και παιδαγωγούσ

Τεχνικόσ Μαγειρικόσ Τϋχνησ Αρχιμϊγειρασ (Chef) Β Εξϊμηνο

ΕΡΓΑΣΗΡΙΑΚΑ ΜΑΘΗΜΑΣΑ Γ ΓΤΜΝΑΙΟΤ

19/10/2009. Προηγοφμενη βδομάδα... Σήμερα Γεωγραφικά Συςτήματα Πληροφοριϊν Χωρικά Μοντζλα Δεδομζνων. Δομή του μαθήματοσ

ΑΡΧΗ 1Η ΕΛΙΔΑ ΘΕΜΑ A Α. Μονάδεσ 10 Μονάδεσ 5 Μονάδεσ 4 4 Ε. 1 Μονάδεσ 2 Ε. 2 Μονάδεσ 5 ΣΕΛΟ 1Η ΕΛΙΔA

«ΕΙΔΙΚΑ ΘΕΜΑΣΑ ΣΟΝ ΠΡΟΓΡΑΜΜΑΣΙΜΟ ΤΠΟΛΟΓΙΣΩΝ» ΚΕΦΑΛΑΙΟ 3: ΑΝΤΙΚΕΙΜΕΝΑ ΚΑΙ ΜΕΘΟΔΟΙ

Το παζάρι των λοιμώξεων ςτον 'κατεχόμενο' κόςμο των χρηςτών

NetMasterII ςύςτημα μόνιμησ εγκατϊςταςησ επιτόρηςη και καταγραφό ςημϊτων από αιςθητόρια και μετατροπεύσ κϊθε εύδουσ ςύςτημα ειδοπούηςησ βλϊβη

α = 2q + r με 0 r < 2 Πιθανϊ υπόλοιπα: r = ο: α = 2q r = 1: α = 2q + 1 Ευκλεύδεια διαύρεςη Ειςαγωγό ςτισ βαςικϋσ ϋννοιεσ των Μαθηματικών Διαιρετότητα

Πανεπιςτήμιο Πελοποννήςου Τμήμα Επιςτήμησ και Τεχνολογίασ Τηλεπικοινωνιών. Λειτουργικά Συςτήματα Προγραμματιςμόσ Συςτήματοσ. Μνήμη

Η Χρυσόκαρδη Ξανθομαλλούσα

ΔΙΑΣΡΟΦΗ ΚΑΣΑ ΣΗ ΔΙΑΡΚΕΙΑ ΣΟΤ ΘΗΛΑΜΟΤ ΣΖΕΛΑΛΗ ΑΝΑΣΑΙΑ ΜΑΙΑ ΙΠΠΟΚΡΑΣΕΙΟ Γ.Π.Ν.Θ.

Θεςμική Αναμόρφωςη τησ Προ-πτωχευτικήσ Διαδικαςίασ Εξυγίανςησ Επιχειρήςεων

ΔΙΑΓΩΝΙΣΜΑ ΦΥΣΙΚΗΣ A ΛΥΚΕΙΟΥ

Μαθηματικϊ Γ' Ενιαύου Λυκεύου (μϊθημα κατεύθυνςησ)

19/10/2009. Γεωγραφικά Συςτήματα Πληροφοριϊν Spatial Operations. Σήμερα... Τφποι ερωτήςεων (Queries)

Μαθηματικϊ. Β' Ενιαύου Λυκεύου. (μϊθημα κοινού κορμού) Υιλοςοφύα - κοπού

22/11/2009. Προηγοφμενη βδομάδα... Δεδομζνα απο Δευτερεφουςεσ πηγζσ. Αυτή την βδομάδα...

Μεθοδολογύα & Λυμϋνεσ Αςκόςεισ

ΑΛΚΟΟΛ & ΟΔΗΓΗΣΗ. Μ.Κ.Ο. Νηυάλιοι στην υγειά μας

ΠΡΟΛΗΨΗ ΑΣΤΧΗΜΑΣΩΝ ΣΟ ΠΙΣΙ

Πωσ αλλάζει τη Μεςόγειο το ενεργειακό παζλ

AΠΙΝΙΔΩΣΗ. Μημήκοσ τυλιανόσ*, Χαρούπα Στεργιανό** *Νοζηλεσηής ΚΧΜΕΘ ΠΓΝΘ ΑΧΕΠΑ **Προϊζηαμένη ΚΧΜΕΘ ΠΓΝΘ ΑΧΕΠΑ

= 8 ενώ Shift + = * * 8

Ο ΟΓΙΚΟΣ ΦΑΡΤΗΣ ΤΟΥ ΣΑΚΦΑΡΩΓΗ ΓΙΑΒΗΤΗ ΣΤΗΝ ΔΛΛΑΓΑ

Μαύροσ Γιϊννησ Μαθηματικόσ

Υποχρεώςεισ των μαθητών κατϊ τη διϊρκεια τησ εξϋταςησ

Δελτίο κρίςησ: Αύγουςτοσ- επτέμβριοσ 2012

«Δυνατότητεσ και προοπτικϋσ του επαγγϋλματοσ που θϋλω να ακολουθόςω μϋςα από το Διαδύκτυο».

Η Διαύρεςη 134:5. Η Διαύρεςη 134:5. Διδακτική Μαθηματικών ΙΙ

E.M.Π. - ΣΜΗΜΑ ΝΑΤΠΗΓΩΝ ΜΗΦΑΝΟΛΟΓΩΝ ΜΗΦΑΝΙΚΩΝ

και Νομοθετικό Πλαίςιο Προφορικήσ Εξέταςησ Δρ.Καββαδά Ευρυρδίκη Εκπαιδευτικόσ Α ΚΕΔΔΤ

ΗΛΕΚΣΡΟΝΙΚΗ ΕΠΙΚΟΙΝΩΝΙΑ ΣΟΤ ΦΟΛΕΙΟΤ ΠΡΟ ΣΟΤ ΓΟΝΕΙ. - Θέςη υπεύθυνου προςώπου για την ςυμπλήρωςη του ερωτηματολογίου: Ερωτηματολόγιο

Τρύτη Διϊλεξη Μοντϋλα Διαδικαςύασ Λογιςμικού Μϋροσ Α

Χρύςα Χατζόγλου. Αναπλ. Καθηγότρια Φυςιολογύασ Πανεπιςτημύου Θεςςαλύασ

ΤΕΙ ΑΜΘ-Σχολό Διούκηςησ και Οικονομύασ-Τμόμα Λογιςτικόσ και Χρηματοοικονομικόσ

Αναλύοντασ την ολοκληρωμϋνη φροντύδα του ρευματοπαθούσ. Κατερύνα Κουτςογιϊννη ύλλογοσ Ρευματοπαθών Κρότησ

Άδειες Χρήσης. Διδακτική Μαθηματικών I. Επίλυση προβλήματος (συνέχεια) Διδάσκων: Επίκουρος Καθ. Κ. Τάτσης

ΤΕΙ ΑΜΘ-Σχολό Διούκηςησ και Οικονομύασ-Τμόμα Λογιςτικόσ και Χρηματοοικονομικόσ Διδϊςκων : Αγγελϊκησ Γιώργοσ Εργαςτηριακόσ ςυνεργϊτησ : Σιώπη

Αρχϋσ του NCTM. Αρχϋσ του NCTM. Αρχϋσ του NCTM. Διδακτικό Μαθηματικών ΙΙ. Μϊθημα 9 ο Αξιολόγηςη

Υπεριώδεισ ακτίνεσ: ωφέλεια και βλάβη από αυτέσ

ΕΠΠΑΙΚ Θεςςαλονύκησ, /02/2011

EETT Δημόςια Διαβούλευςη ςχετικά με την εκχώρηςη δικαιώματων χρήςησ ραδιοςυχνοτήτων ςτη Ζώνη 27,5 29,5 GHz

Διπλωματικό Εργαςύα του φοιτητό του Τμόματοσ Ηλεκτρολόγων Μηχανικών και Τεχνολογύασ Υπολογιςτών τησ Πολυτεχνικόσ Σχολόσ του Πανεπιςτημύου Πατρών

ΤΜΒΑΗ ΔΙΑΝΟΜΗ ΤΛΙΚΟΤ ΣΟ ΔΙΚΣΤΟ ΠΡΑΚΣΟΡΩΝ ΣΗ ΟΠΑΠ

ΕΚΠΑΙΔΕΤΣΙΚΟ ΠΡΟΓΡΑΜΜΑ ΜΑΘΗΜΑΣΩΝ ΓΕΝΙΚΟ ΝΟΟΚΟΜΕΙΟ ΑΜΥΙΑ. < Ιανουάριος Απρίλιος, 2019 >

Άδειες Χρήσης. Διδακτική Μαθηματικών I. Πρόσθεση-αφαίρεση. Διδάσκων: Επίκουρος Καθ. Κ. Τάτσης

ΔΙΑΓΩΝΙΣΜΑ ΦΥΣΙΚΗΣ Β ΛΥΚΕΙΟΥ κατεύθυνςησ

Μεθοδολογύα & Λυμϋνεσ Αςκόςεισ

Γάμος, Διαζύγιο και Τάντρα

ΠΡΟΓΡΑΜΜΑ ΑΝΑΚΤΚΛΩΗ ΤΛΙΚΩΝ Α Υάςη: Διοικητικό Μέγαρο- Κτήριο ΟΣΕ-COSMOTE Παιανίασ

ΕΛΕΓΦΟ ΕΜΠΟΡΕΤΜΑΣΨΝ ΣΕΦΝΙΚΟ ΜΑΓΕΙΡΙΚΗ ΣΕΦΝΗ ΑΡΦΙΜΑΓΕΙΡΑ (CHEF)

Σ.Ε.Ι. ΑΘΗΝΩΝ - ΣΜΗΜΑ ΠΟΛΙΣΙΚΩΝ ΜΗΦΑΝΙΚΩΝ Σ.Ε. ΑΝΣΟΦΗ ΤΛΙΚΩΝ Ι

Περίληψη. Μαρία Ιωϊννα Αργυροπούλου Έλενα Παππϊ

ΜΕΣΑΠΣΤΦΙΑΚΗ ΕΡΓΑΙΑ ΕΠΕΞΕΡΓΑΙΑ ΒΙΝΣΕΟ ΜΕ ΦΡΗΗ DSP

2ο ΓΕ.Λ ΠΑΡΣΗ ΗΛΕΚΣΡΟΝΙΚΟ ΕΘΙΜΟ ΕΡΕΤΝΗΣΙΚΗ ΕΡΓΑΙΑ

ΚΟΙΛΑ-ΚΤΡΣΑ-ΗΜΕΙΑ ΚΑΜΠΗ

Επικοινωνύα (1) Επικοινωνύα (2) Επικοινωνύα (3) Ανακοινώςεισ μαθήματοσ: κλειδύ: math2009.

Εντολζς του Λειτουργικοφ Συστήματος UNIX

Περιεκτικότητα ςε θρεπτικϊ ςτοιχεύα Ικανότητα ανταλλαγόσ κατιόντων Οξύτητα εδϊφουσ (ph)

Επίκαιρη Ανάλυςη. Quo Vadis, Ουκρανία; Δρ. Κωνςταντίνοσ Φίλησ Διευθυντόσ Ερευνών Ινςτιτούτου Διεθνών χϋςεων

Μαθηματικοπούηςη. Μαθηματικοπούηςη. Μαθηματικϋσ δεξιότητεσ. Κατακόρυφη

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

Με τον όρο <<ΚΡΙΗ>>, περιγράφεται ςυνήθωσ μια απρόβλεπτη κατάςταςη, η οποία χαρακτηρίζεται από ένταςη και αναςφάλεια και μπορεί να αφορά το άτομο,

ΓΕΩΡΓΙΟ Ν. ΚΟΝΣΟ ΕΠΙΣΗΜΟΝΙΚΟ ΤΝΕΡΓΑΣΗ ΠΑ.ΠΕΙ.

ΠΡΑΚΣΙΚΟ ΟΔΗΓΟ ΓΙΑ ΣΟ STORYJUMPER

ΔΟΚΙΜΑΙΑ-1 (ΜΟΝΑΔΕ 60) εύναι αντύςτροφοι. (Μονϊδεσ 5)

Επιταχυντϋσ Σωματιδύων

ΕΚΠΑΙΔΕΤΣΙΚΟ ΕΝΑΡΙΟ ΓΙΑ ΣΗΝ ΑΞΙΟΠΟΙΗΗ ΚΑΙ ΕΥΑΡΜΟΓΗ ΣΩΝ ΣΠΕ ΣΗ ΔΙΔΑΚΣΙΚΗ ΠΡΑΞΗ


Θϋμα: Άνιςη μεταχεύριςη των ανθρώπων με τετραπληγύα, απώλεια ακοόσ ό ϐραςησ ςτο νϋο νομοςχϋδιο ΕΑΕ.

Πίνακασ τεχνικών και λειτουργικών προδιαγραφών. Πλόρεσ ελληνικό περιβϊλλον (interface) για Διαχειριςτϋσ, Εκπαιδευτϋσ, Εκπαιδευόμενουσ

Φοιτητόσ : Κουκϊρασ Παραςκευϊσ ΑΜ : 06/3059 Ίδρυμα/Τμόμα : Αλεξϊνδρειο Τεχνολογικό Εκπαιδευτικό Ιδρυμα/Πληροφορικόσ

Η Ενεργειακό Συνεταιριςτικό Εταιρύα Καρδύτςασ εύναι αςτικόσ ςυνεταιριςμόσ που η ςύςταςη και λειτουργύα του διϋπεται από το Ν.

Η διδασκαλία του μαθήματος της Γλώσσας στο Γυμνάσιο

Υπουργεύο Παιδεύασ, Δια Βύου Μϊθηςησ και Θρηςκευμϊτων

Δίκτυα Η/Υ ςτην Επιχείρηςη

Μαθηματικϊ για Οικονομολόγουσ Ι-Μϊθημα 4ο Παρϊγωγοσ Συναρτόςεων μιασ Μεταβλητόσ.

Ημερύδα για τη Διαφορετικότητα ςτα Σχολεύα. Σϊββατο 6 Οκτωβρύου π.μ μ.μ. ImpactHub Athens. Τϊνια Μϊνεςη, Νηπιαγωγόσ & Δαςκϊλα, Med

υμπεριφορϊ Προςεκτικόσ Παρακολούθηςησ Μαρύα Ιωϊννα Αργυροπούλου Έλενα Παππϊ

Μθχανι Αίνιγμα θ επιρροι τθσ ςτισ ςφγχρονεσ επικοινωνίεσ ςτο Internet

Μεθοδικό Φροντιςτόριο Βουλιαγμϋνησ & Κύπρου 2, Αργυρούπολη, Τηλ:

ΔΟΚΙΜΑΙΑ-1 (ΜΟΝΑΔΕ 60) εύναι αντύςτροφοι. (Μονϊδεσ 5)

Πποκλήζειρ καηά ηην ένηαξή ηοςρ

Αντύ Επιλόγου. Ειςαγωγό Ρομποτικό Ιατρικό ΠροηγμϋνεσΣεχνολογύεσ: Τποκεφϊλαια:

ΕΓΚΤΚΛΙΟ ΜΕΣΕΓΓΡΑΥΩΝ αγωνιςτικόσ περιόδου

ςτην περύπτωςη που η μόνη αλλαγό αφορϊ ςτη Δημόςια Φρηματοδότηςη ανϊ ϋτοσ (2013, 2014).

Transcript:

Αναφορά Προγραμματιστικής Άσκησης μαθήματος Τεχνητής Νοημοσύνης 1 Κοφινϊσ Νύκοσ Α.Μ.: 2007030111 Σε αυτό την εργαςύα υλοποιόςαμε ϋναν πρϊκτορα ο οπούοσ παύζει το παιχνύδι othello. Η γλώςςα την όποια προτιμόςαμε για την διεκπεραύωςη τησ εργαςύασ εύναι η C. Περιγραφή του παιχνιδιού: Το othello εύναι ϋνα παιχνύδι που παύζεται μεταξύ δύο αντιπϊλων, και ο απώτεροσ ςκοπόσ του κϊθε παύκτη εύναι να ϋχει περιςςότερα πούλια πϊνω ςτην ςκακιϋρα, από τον αντύπαλο, ςτο τϋλοσ του παιχνιδιού. Το κλαςικό παιχνύδι othello αποτελεύται από ϋνα πλϋγμα 8*8, όμωσ ςτην δικό μασ ϊςκηςη το πλϋγμα αυτό ϋχει γύνει 10*10 και υπϊρχουν κϊποια ςυγκεκριμϋνα κουτϊκια ςτο πλϋγμα, που θεωρούνται illegal, και κανϋνασ παύκτησ δεν μπορεύ να τοποθετόςει ςε εκεύνα τα κουτϊκια πούλι. Το othello εύναι ϋνα παιχνύδι με πϊρα πολλϋσ πιθανϋσ καταςτϊςεισ, τισ οπούεσ όπωσ εύναι λογικό δεν μπορούμε να εξετϊςουμε όλεσ. Οπότε ο αλγόριθμοσ που θα υλοποιόςουμε θα πρϋπει για κϊθε κατϊςταςη που βριςκόμαςτε, να κοιτϊζει κϊποιεσ καταςτϊςεισ παρακϊτω, και να μασ επιςτρϋφει την βϋλτιςτη κύνηςη που θα μπορούςαμε να κϊνουμε εκεύνη την ςτιγμό με τα υπϊρχοντα δεδομϋνα. Ο αλγόριθμοσ που υλοποιόςαμε εύναι ο αλγόριθμοσ minimax με την επϋκταςη a-b pruning. Ο αλγόριθμοσ αυτόσ μασ επιςτρϋφει την βϋλτιςτη κύνηςη εξετϊζοντασ όλεσ τισ πιθανϋσ κινόςεισ ςε κϊθε βϊθοσ. Για να επιλϋξει μύα κύνηςη ουςιαςτικϊ φτιϊχνει το δϋνδρο και ξεκινώντασ από τα φύλλα, τα οπούα αξιολογεύ με μύα ςυνϊρτηςη αξιολόγηςησ, διαλϋγει εναλλϊξ (ςαν min για τον αντύπαλο και ςαν max για εμϊσ) την βϋλτιςτη κύνηςη. Η ςυνϊρτηςη αξιολόγηςησ εύναι φτιαγμϋνη ϋτςι ώςτε ο αντύπαλοσ να θϋλει να την κϊνει minimize και εμεύσ να θϋλουμε να την κϊνουμε maximize. Ουςιαςτικϊ, μασ επιςτρϋφει την κύνηςη όπου θα εύχαμε το βϋλτιςτο κϋρδοσ αν και ο αντύπαλοσ ϋπαιζε βϋλτιςτα. Το αρνητικό αυτό του αλγορύθμου, εύναι ότι δεν εκμεταλλεύεται τισ αδυναμύεσ του αντιπϊλου, διότι ακόμα και αν ο αντύπαλοσ παύζει «χαζϊ» εμεύσ θα του ςυμπεριφερόμαςταν ςαν να όταν βϋλτιςτοσ. Minimax αλγόριθμοσ: Υλοποιόςαμε τον αλγόριθμο minimax ςτη γλώςςα προγραμματιςμού C, με αναδρομικό τρόπο. Ο minimax αποτελεύται από δύο ςυναρτόςεισ, την getmin και την getmax, οπού η getmin προςπαθεύ να ελαχιςτοποιόςει την eval και η getmax προςπαθεύ να την μεγιςτοποιόςει. Εμεύσ εύμαςτε ο max παύκτησ, και ϊρα ξεκινϊμε καλώντασ την getmax η οπούα ύςτερα καλεύ την getmin και η μύα καλεύ την επόμενη, μϋχρι να φτϊςουμε ςτο βϊθοσ που θϋλουμε να ψϊξουμε, όπου τελειώνει και η αναδρομό. Σε κϊθε αναδρομικό κλόςη μειώνουμε και το βϊθοσ κατϊ ϋνα, και όταν βρεθούμε ςε βϊθοσ ύςο με το μηδϋν επιςτρϋφουμε την τιμό τησ ςυνϊρτηςησ αξιολόγηςησ για το ςτόςιμο τησ ςκακιϋρασ ςε εκεύνο το βϊθοσ. Η τιμό τησ ςυνϊρτηςησ αξιολόγηςησ, ύςτερα, προχωρϊει προσ την ρύζα του minimax δϋνδρου. Οι min κόμβοι (ςυνϊρτηςη getmin) διαλϋγουν τη μικρότερη τιμό για την eval που μπορούν να πϊρουν, και επιςτρϋφουν αυτόν την τιμό.

Αναφορά Προγραμματιστικής Άσκησης μαθήματος Τεχνητής Νοημοσύνης 2 Αντύςτοιχα οι max κόμβοι, επιλϋγουν να επιςτρϋψουν την μεγαλύτερη τιμό του eval που ϋλαβαν. Έτςι ςτον root κόμβο, που εύναι max κόμβοσ, θα επιλϋξουμε την κύνηςη, για την οπούα λϊβαμε τη μεγαλύτερη τιμό από το αναδρομικό κϊλεςμα. Έτςι θα ϋχουμε φροντύςει να επιλϋξουμε την καλύτερη τιμό από την αναδρομικό κλόςη του minimax αλγορύθμου, και αφού και οι δύο παύκτεσ παύζουν βϋλτιςτα, τότε η κύνηςη που επιλϋξαμε, ςύγουρα θα εύναι η βϋλτιςτη. Η ςυνϊρτηςη αξιολόγηςησ καλεύται, εκτόσ από όταν φτϊςουμε ςτο μϋγιςτο βϊθοσ, όταν βρούμε τϋλοσ παιχνιδιού. Τϋλοσ παιχνιδιού ϋχουμε όταν δεν υπϊρχει ϊλλη κύνηςη για κανϋναν παύκτη. Σε κϊθε μύα ςυνϊρτηςη, βρύςκουμε όλεσ τισ κινόςεισ που μπορεύ να κϊνει ο παύκτησ ςτην εκϊςτοτε ςκακιϋρα, και εκτελούμε κϊθε μύα από αυτϋσ, και ύςτερα καλούμε την getmin ό την getmax (ανϊλογα ςε ποιον κόμβο εύμαςτε) για κϊθε μύα από αυτϋσ τισ κινόςεισ. Αν ο παύκτησ δεν ϋχει να κϊνει κύνηςη, τότε απλώσ καλούμε την επόμενη ςυνϊρτηςη. α-β pruning: Ο αλγόριθμοσ εύναι αρκετϊ αργόσ και απαιτεύ εκθετικό χρόνο για να εκτελεςτεύ. Με την επϋκταςη α-β pruning, δεν μπορούμε να διώξουμε τον εκθϋτη, αλλϊ μπορούμε να τον μειώςουμε ςτο μιςό. Η λογικό του α-β pruning εύναι πολύ απλό, όταν ϋνασ κόμβοσ καλεύ μια ςυνϊρτηςη για να αξιολογόςει την κατϊςταςη ςτην οπούα βρϋθηκε μετϊ από μύα κύνηςη, ελϋγχει τι του επιςτρϋφει και αν του κϊνει, ςε ςχϋςη με το προηγούμενο που εύχε, το κρατϊει και πετϊει το προηγούμενο. Με το α-β pruning μπορούμε να προωθούμε την τιμό που ϋχουμε, ςτουσ από κϊτω κόμβουσ, ώςτε αν αυτού βρουν τιμό μεγαλύτερη από αυτό που ϋχει προωθόςει ο από πϊνω κόμβοσ (ςτην περύπτωςη του max κόμβου) ό μικρότερη (ςτην περύπτωςη του min κόμβου) τότε την επιςτρϋφουν αμϋςωσ, χωρύσ να επεκτεύνουν τα εναπομεύναντα παιδιϊ. Ο λόγοσ που λειτουργεύ αυτό, εύναι διότι ο minimax αλγόριθμοσ, θα τα απϋρριπτε αυτϊ τα παιδύα από αυτό και μόνο την τιμό, χωρύσ να τον νοιϊζει αν υπϊρχει μεγαλύτερη η μικρότερη τιμό, γιατύ ςύγουρα δεν θα επϋλεγε αυτό την κύνηςη, οπότε περεταύρω ψϊξιμο εύναι ϊχρηςτο. Με αυτό την μικρό βελτιςτοπούηςη μπορούμε να ψϊξουμε ςε αρκετϊ μεγαλύτερο βϊθοσ, ςτον ύδιο χρόνο. Από την προγραμματιςτικό πλευρϊ, η υλοπούηςη εύναι πολύ απλό, διότι απλώσ διαδύδουμε τα α και β προσ τα κϊτω, μϋςω τησ κλόςησ των ςυναρτόςεων. Ο ϋλεγχοσ για το αν ϋχουμε cut off γύνεται με το που επιςτρϋψει η ςυνϊρτηςη που καλϋςαμε, ανϊλογα με την τιμό που μασ επϋςτρεψε, αν ϋχουμε cut off γυρνϊμε την τιμό, αλλιώσ κοιτϊμε αν πρϋπει να αλλϊξουμε τα α και β πριν καλϋςουμε την επόμενη ςυνϊρτηςη. Τϋλοσ, τα α και β προωθούνται μόνο προσ τα κϊτω. Συνάρτηςη αξιολόγηςησ: Η ςυνϊρτηςη αξιολόγηςησ εύναι ύςωσ το πιο ςημαντικό ςτοιχεύο για να δουλϋψει καλϊ το πρόγραμμα μασ. Από την ςυνϊρτηςη αξιολόγηςησ κρύνονται πολλϊ πρϊγματα, αν θα ϋχουμε εύκολα cut off ό όχι, κϊτι το οπούο εξαρτϊται από το πόςο καλϊ ϋχουμε αξιολογόςει την εκϊςτοτε κατϊςταςη. Επύςησ, επειδό

Αναφορά Προγραμματιστικής Άσκησης μαθήματος Τεχνητής Νοημοσύνης 3 πϊντα κϊνουμε μια εκτύμηςη τησ εκϊςτοτε κατϊςταςησ, πρϋπει να κϊνουμε όςο καλύτερη εκτύμηςη μπορούμε, ώςτε να ξϋρουμε όςο καλύτερα γύνεται αν αυτό η κατϊςταςη εύναι θετικό για εμϊσ ό όχι. Επύςησ, μπορούμε να χωρύςουμε το παιχνύδι ςε φϊςεισ, όπου ςτην κϊθε φϊςη ακολουθούμε και ϊλλη ςτρατηγικό. Τα βαςικϊ ςημεύα που κοιτϊμε ςε κϊθε ςτρατηγικό, εύναι το πόςεσ γωνύεσ ϋχει πιϊςει ο καθϋνασ, πόςα «κακϊ» κουτϊκια ϋχει πιϊςει ο καθϋνασ, πόςεσ κινόςεισ ϋχει και τϋλοσ όταν πληςιϊζει το τϋλοσ του παιχνιδιού, το πόςα πούλια ϋχει ο καθϋνασ πϊνω ςτην ςκακιϋρα. Έχουμε χωρύςει ςε 3 ςτϊδια το παιχνύδι, ςτο early game, ςτο mid game και ςτο end game. Στο early game κοιτϊμε πιο πολύ να μην πϊρουμε κϊποια bad κουτϊκια, το να ϋχουμε όςεσ παραπϊνω γωνύεσ γύνεται και κυρύωσ να ϋχουμε πιο πολλϊ moves από τον αντύπαλο. Στο mid game ανεβαύνει το βϊροσ που δύνουμε ςτισ γωνύεσ, γιατύ αρχύζουν να ϋχουν μεγαλύτερη ςημαςύα για το stability μασ. Στο end game το βϊροσ που δύνουμε ςτα bad κουτϊκια, πϋφτει αρκετϊ, μιασ και πλϋον λογικϊ δεν θα κϊνουν τόςο διαφορϊ οι γωνύεσ, και προςθϋτουμε ςτην ςυνϊρτηςη αξιολόγηςησ, την διαφορϊ ςτα πούλια κϊτι το οπούο δεν εύχαμε πιο πριν. Η διαφορϊ αυτό πλϋον μασ ενδιαφϋρει, διότι πληςιϊζει το τϋλοσ του παιχνιδιού, και για να φτϊςουμε ςε νύκη πρϋπει να ϋχουμε περιςςότερα πούλια από τον αντύπαλο. Οι τελικϋσ καταςτϊςεισ αξιολογούνται μόνο με την διαφορϊ ςτα πούλια, και τισ πολλαπλαςιϊζουμε με ϋναν μεγϊλο αριθμό, ώςτε να δηλώςουμε ότι αν νικϊει ο min, ο max θα την απορρύψει, αν γύνεται, αυτό την κύνηςη, και αν νικϊει ο max να την απορρύψει ο min. Βελτιςτοποιήςεισ Το πρόγραμμα μασ, με όλα τα παραπϊνω, όταν ικανό να κερδύζει πϊντα τουσ αλγόριθμουσ greedy και random, ϊλλα ϋπρεπε να το βελτιςτοποιόςουμε ςε διϊφορα ςημεύα, ώςτε να μπορούμε να ψϊχνουμε ςε μεγαλύτερο βϊθοσ, και να μπορούμε να αντιμετωπύςουμε και πιο ιςχυρούσ αντιπϊλουσ. Παρακϊτω, περιγρϊφονται οι βελτιςτοποιόςεισ που ϋγιναν. Do, Undo and Redo move: Όταν εκτελούςαμε μύα κύνηςη, οι ςυναρτόςεισ που την εκτελούςαν, μπορούςαν εύτε να μασ επιςτρϋψουν μύα νϋα ςκακιϋρα, ςτην οπούα θα ϋχει γύνει η κύνηςη ό να κϊνουν την κύνηςη ςτην υπϊρχουςα ςκακιϋρα. Επειδό τα malloc και free εύναι ακριβϊ, επιλϋξαμε τη δεύτερη υλοπούηςη, ςτην οπούα όλα γύνονται πιο γρόγορα, λόγω ϋλλειψησ κλόςεων malloc και free. Έπρεπε όμωσ να βρούμε και ϋναν τρόπο να κϊνουμε undo την κύνηςη την οπούα πραγματοποιόςαμε. Το επιτύχαμε κρατώντασ ςε μύα struct όλεσ τισ μεταβλητϋσ που αλλϊζουν, εκτελώντασ ϋνα do. Κρατϊμε δηλαδό τα πια πούλια που ϋγιναν flip, το αν πϊρθηκε γωνύα ό όχι, τουσ αρχικούσ zobtrist αριθμούσ που εύχαμε πριν γύνει η κύνηςη και τϋλοσ κϊποια ακόμα ςτοιχεύα τα οπούα μασ επιτρϋπουν να βρύςκουμε πιο γρόγορα τα legal moves (εξηγούμε παρακϊτω τι κρατϊμε ακριβώσ). Η όλη ιδϋα εύναι, ότι αφού κϊναμε ϋνα ακριβό do move, πλϋον κρατϊμε ςε ϋναν πύνακα το ποια πούλια ϋγιναν flip και ϋτςι μπορούμε να επιςτρϋψουμε γρόγορα ςτην προηγούμενη κατϊςταςη. Επύςησ με το redo μπορούμε να επιςτρϋψουμε γρόγορα ςε μύα μεταγενϋςτερη κατϊςταςη, εκτελώντασ λιγότερα βόματα από

Αναφορά Προγραμματιστικής Άσκησης μαθήματος Τεχνητής Νοημοσύνης 4 ότι η do move καθώσ δεν χρειϊζεται να εξετϊςει ποια πούλια θα γύνουν flipped, αλλϊ τα κϊνει με τη μύα, μιασ και τα ϋχει αποθηκϋυςει. Find Faster The Legal Moves: Ό τρόποσ για να βρύςκουμε τα legal moves όταν να ςαρώνουμε τον 10*10 πύνακα μασ και όπου βρύςκουμε empty να κοιτϊζουμε αν εύναι legal move. Αυτό εύναι αρκετϊ χρονοβόρο, ειδικϊ ςτην αρχό του παιχνιδιού, που ϋχουμε πϊρα πολλϊ empty squares. Η βελτιςτοπούηςη που υλοποιόςαμε, εύναι να κρατϊμε κϊθε φορϊ ποια εύναι τα empty squares, που ςυνορεύουν με κατειλημμϋνα squares. Για να το κϊνουμε αυτό, κρατόςαμε ϋναν ακόμα πύνακα 10*10, όπου «ςημαδεύουμε» αυτϊ τα empty squares, ώςτε να εκτελούμε μόνο ςε αυτϊ την islegalmove. Η ενημϋρωςη αυτού του πύνακα, γύνεται ςε κϊθε do και undo move, και ουςιαςτικϊ εύναι μόνο οκτώ εντολϋσ if, και ϊρα εύναι αρκετϊ γρόγορο. Το μόνο πρόβλημα εύναι ότι ο πρϊκτορασ μασ πρϋπει να ϋχει μπει ςτο παιχνύδι πριν παιχτεύ οποιαδόποτε κύνηςη γιατύ αλλιώσ δεν θα ενημερώςει ςωςτϊ τον πύνακα και θα «πϋςει» το πρόγραμμα. Όταν πλϋον ψϊχνουμε για legal moves, κοιτϊμε αυτόν τον πύνακα και όπου δούμε κενό τετρϊγωνο, που ςυνορεύει με τετρϊγωνο που ϋχει πούλι, εκτελούμε την islegalmove. Έτςι γλυτώνουμε πολλϊ ακριβϊ islegalmove για μεγϊλο ποςοςτό του παιχνιδιού. Επύςησ παρατηρόςαμε, ότι, η islegalmove κϊνει ό,τι ελϋγχουσ κϊνει και η domove, χωρύσ όμωσ να κϊνει αλλαγϋσ, ενώ η domove αναγνώριζε αν μπορεύ να γύνει μύα κύνηςη ό όχι. Οπότε μπορούμε αντύ να καλούμε islegalmove, και μετϊ να καλούμε την domove, να καλούμε κατευθεύαν την domove και εϊν επιςτρϋψει ότι ϋγινε η κύνηςη να καλϋςουμε αντύςτοιχα την ςυνϊρτηςη που θϋλουμε και να ςυνεχύςουμε. Με αυτό τον τρόπο, ϋχουμε μόνο ϋνα domove και ϋνα undomove, για κϊθε κύνηςη κι ϋτςι γλιτώςαμε τα islegalmove. Αυτό η λύςη εύχε πολύ καλϊ αποτελϋςματα, αλλϊ δεν μασ επϋτρεπε move ordering, διότι δεν κρατϊγαμε κϊπου τα πιθανϊ moves, ϊλλα τα κϊναμε απευθεύασ. Για να μπορούμε να κρατϊμε και κϊπου όλα τα legal moves, πριν αρχύςουμε να επεκτεινόμαςτε παρακϊτω, φτιϊξαμε και την redomove, ώςτε να μπορούμε να κϊνουμε do και undo για να βρούμε τα legal moves, και μετϊ redo undo για να επεκταθούμε παρακϊτω. Ο λόγοσ που κϊνουμε do undo redo undo και δεν κϊνουμε islegamove do undo, εύναι διότι θϋλουμε να βρούμε τον zobrist αριθμό τησ εκϊςτοτε ςκακιϋρασ, για να εκτελϋςουμε move ordering. Zobrist Hash Table: Παρατηρόςαμε ότι, ςε μύα κατϊςταςη, μπορούμε να πϊμε με διαφορετικό ακολουθύα καταςτϊςεων. Οπότε χϊνουμε χρόνο ψϊχνοντασ καταςτϊςεισ που τισ ϋχουμε όδη ψϊξει. Επύςησ, παρατηρόςαμε ότι θα μπορούςαμε να ϋχουμε γρηγορότερα cutoff αν μπορούςαμε να κϊνουμε ϋνα move ordering,γνωρύζοντασ τι περύπου μασ εύχε επιςτρϋψει η κϊθε κύνηςη ςε προηγούμενεσ αναζητόςεισ. Η λύςη για αυτό εύναι να φτιϊξουμε ϋνα μεγϊλο hash table, ςτο οπούο θα κρατϊμε τι κόςτοσ εύχε κϊθε κατϊςταςη, ςε τι βϊθοσ το εύχαμε βρει και αν όταν exact ό όχι τιμό. Για να κϊνουμε index ςτο hast table χρηςιμοποιούμε zobrist αριθμούσ. Για να βρούμε αυτούσ τουσ αριθμούσ, φτιϊχνουμε δύο 10*10 πύνακεσ, οι οπούοι ςε κϊθε θϋςη ϋχουν και ϋναν random αριθμό. Ύςτερα για να βρούμε τον zobrist

Αναφορά Προγραμματιστικής Άσκησης μαθήματος Τεχνητής Νοημοσύνης 5 αριθμό μιασ κατϊςταςησ, διαπερνϊμε τον πύνακα τησ κατϊςταςησ, και για κϊθε white πούλι που βρύςκουμε πηγαύνουμε ςτην αντύςτοιχη θϋςη ςτον πρώτο πύνακα από τουσ δύο με τουσ τυχαύουσ αριθμούσ που φτιϊξαμε, και κϊνουμε xor τον αριθμό zobrist με αυτόν. Αντύςτοιχα κϊνουμε και για ϊμα βρούμε red πούλι, μόνο που εκεύ πϊμε ςτον δεύτερο πύνακα. Ο zobrist αριθμόσ αρχικοποιεύται ςτο 0 και ύςτερα ξεκινϊμε να διαπερνϊμε τον πύνακα. Χρηςιμοποιούμε και ϋναν τυχαύο αριθμό για να υποδηλώνουμε ποιανού εύναι η ςειρϊ για να παύξει ςτην εκϊςτοτε κατϊςταςη. Ο zobrist εύναι ϋνασ int αριθμόσ, ϊρα ϋχει 32 bit ςε όλα τα ςύγχρονα pc. Επειδό οι καταςτϊςεισ μασ όμωσ εύναι αρκετϋσ παραπϊνω (ςυνολικϊ όλεσ οι πιθανϋσ) κϊνουμε όλη την παραπϊνω διαδικαςύα για να παρϊγουμε και ϋναν δεύτερο zobrist αριθμό. Δημιουργούμε νϋουσ τυχαύουσ πύνακεσ για αυτό τον αριθμό. Το να ϋχουμε ακριβό διαφοροπούηςη τησ κϊθε κατϊςταςησ από ϊλλεσ, χρειϊζεται αν θϋλουμε να κϊνουμε ϊμεςο return value από το hash table και ϊρα πρϋπει να εύμαςτε ςύγουροι ότι θα κϊνουμε ςωςτό τιμό return, και όχι την τιμό για κϊποια ϊλλη κατϊςταςη που ϋτυχε να ϋχει ύδιο zobrist αριθμό. Επειδό για να δημιουργόςουμε ϋναν zobrist αριθμό, πρϋπει να διαπερϊςουμε όλο τον πύνακα, αποφαςύςαμε ότι εύναι καλύτερο να τον διαδύδουμε προσ τα κϊτω μϋςω τησ do και τησ undo. Έτςι, όταν βλϋπουμε κϊποιο flip με την domove, κϊνουμε κατευθεύαν τα κατϊλληλα xor ςτουσ zobrist αριθμούσ μασ, και ϋτςι δεν χρειϊζεται να ξαναπερϊςουμε όλον τον πύνακα. Επύςησ, όταν καλεύται η undo, επιςτρϋφουμε την παλιϊ τιμό του zobrist αριθμού. Το hash table μασ ϋχει μϋγεθοσ δϋκα εκατομμύρια, και πιϊνει χώρο ςτην μνόμη ram ύςο με 200ΜΒ. Παρόλο που χρειϊζεται τόςο πολλό μνόμη ram ανεβϊζει κατακόρυφα την απόδοςη του προγρϊμματοσ. Move Ordering: Για να ϋχει πολύ καλϊ αποτελϋςματα το α-β pruning, πρϋπει να ϋχουμε ϋνα καλό move ordering, ώςτε να προκαλεύται γρόγορα cutoff. Οπότε, αφού ϋχουμε κρατόςει τιμϋσ ςτο hash table για καταςτϊςεισ που ϋχουμε όδη εξετϊςει, μπορούμε να τησ χρηςιμοποιόςουμε για να κϊνουμε ϋνα sort ςτισ κινόςεισ που ϋχουμε τώρα. Η διαδικαςύα εύναι, αφού βρούμε όλεσ τισ κινόςεισ, και την ςκακιϋρα την οπούα παρϊγουν αυτϋσ, βρύςκουμε ςτο hash table την τιμό που ϋχουμε για αυτό την ςκακιϋρα (και τύποτα να μην ϋχουμε δεν υπϊρχει πρόβλημα) και ύςτερα να κϊνουμε move ordering. Οι max κόμβοι, θϋλουν να εξετϊςουν πρώτα τισ κινόςεισ που μεγιςτοποιούν το κϋρδοσ και αντύςτοιχα οι min αυτϋσ που το ελαχιςτοποιούν. Οπότε οι κινόςεισ που όταν ςτο hash table ςτην ςωςτό ςειρϊ, και όςεσ απϋμειναν, μπαύνουν με τυχαύα ςειρϊ ςτο τϋλοσ. Έτςι ϋχουμε επιτύχει να κϊνουμε με μεγϊλη πιθανότητα γρόγορα cut off. Iterative Deepening: Έπρεπε να βρούμε κϊπωσ ϋναν τρόπο να αξιοποιόςουμε, όλον τον χρόνο που μασ δύνεται ςτο παιχνύδι, ώςτε να μπορούμε να βλϋπουμε πιο βαθιϊ ανϊλογα με τον χρόνο που ϋχουμε. Ο τρόποσ που ςκεφτόκαμε εύναι να εκτελούμε iterative deepening, δηλαδό να ορύςουμε ϋνα χρονικό διϊςτημα ςτο οπούο θα τρϋχουμε μύα αναζότηςη ςε ϋνα βϊθοσ και αν αυτό τελειώςει πριν τον

Αναφορά Προγραμματιστικής Άσκησης μαθήματος Τεχνητής Νοημοσύνης 6 χρόνο, να αυξϊνουμε το βϊθοσ κατϊ ϋνα και να ψϊχνουμε παρακϊτω. Με αυτόν τον τρόπο, αξιοποιούμε ςχεδόν όλο το χρόνο που μασ δύνεται, χωρύσ να βγαύνουμε εκτόσ χρόνου. Το διϊςτημα που αφόνουμε για ψϊξιμο ςε κϊθε κύνηςη διαφϋρει ανϊλογα με το ςτϊδιο του παιχνιδιού. Στην αρχό το αφόνουμε για 2 second, το οπούο πολλϋσ φορϋσ παραβιϊζεται κατϊ πολύ, χωρύσ όμωσ να μασ πειρϊζει. Για παρϊδειγμα, μπορεύ να ξεκινϊμε ςε βϊθοσ 7, να κϊνουμε 1 sec για να επιςτρϋψουμε, μετϊ να πηγαύνουμε ςε βϊθοσ 8 και να κϊνουμε 20 second να επιςτρϋψουμε. Στο τϋλοσ του παιχνιδιού μασ νοιϊζει να δούμε το τϋλοσ όςο πιο νωρύσ γύνεται, οπότε ο χρόνοσ τον οπούο αφόνουμε για να ψϊξει, εύναι ο χρόνοσ που μασ ϋχει απομϋνει δια δϋκα. Με αυτόν τον τρόπο καταφϋρνουμε να δούμε αρκετϊ νωρύσ την νύκη, πρϊγμα που εύναι κατϊ πολύ υπϋρ μασ.