DS - Pacman. 2.1 Η calculatenextpacmanposition... 3

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

first block of queries p-th block of queries p

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ. Πρώτη Σειρά ασκήσεων Ημερομηνία Παράδοσης: 24 Απριλίου 2018, 12 μ.μ.

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

Γραφικά υπολογιστών Εργαστήριο 10 Εισαγωγή στα Sprites

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

ΕΦΑΡΜΟΓΗ Q-LEARNING ΣΕ GRID WORLD ΚΑΙ ΕΞΥΠΝΟΣ ΧΕΙΡΙΣΜΟΣ ΤΟΥ LEARNING RATE ΛΑΘΙΩΤΑΚΗΣ ΑΡΗΣ ΑΥΤΟΝΟΜΟΙ ΠΡΑΚΤΟΡΕΣ

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

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

Κεφάλαιο 5. Το Συμπτωτικό Πολυώνυμο

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

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

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ 23/04/2012. Α. Να απαντήσετε με Σ ή Λ στις παρακάτω προτάσεις:

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

Ολοκληρωμένα κυκλώματα 1 ο σετ ασκήσεων

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 17/1/08

A. ΣΥΝΕΧΕΙΑ ΣΥΝΑΡΤΗΣΗΣ

A. ΣΥΝΕΧΕΙΑ ΣΥΝΑΡΤΗΣΗΣ

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

All Pairs Shortest Path

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

ΠΑΙΧΝΙΔΙ PACMAN 3D ΜΕ ΜΕΘΟΔΟΥΣ ΕΝΙΣΧΗΤΙΚΗΣ ΜΑΘΗΣΗΣ

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

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

3 ο Εργαστήριο Μεταβλητές, Τελεστές

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

Αξιολόγηση Προσωπικού

1. Να συμπληρώσετε τις τιμές του παρακάτω πίνακα Α (εκτελώντας τις εντολές με την σειρά)

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

Παραδείγματα μεταβλητών

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

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

Πολυτεχνείο Κρήτης Σχολή Ηλεκτρονικών Μηχανικών Και Μηχανικών Η/Υ. ΠΛΗ 513 Αυτόνομοι Πράκτορες

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

max & min Μεθοδολογία - 1 Τα βήματα που συνήθως ακολουθούμε στις τεχνικές εύρεσης max & min είναι τα εξής:

Κεφάλαιο 1: Κίνηση και γεωμετρικά σχήματα

1ο μέρος 1. Φτιάχνουμε την πίστα. Μια ενδεικτική πίστα φαίνεται παρακάτω:

Προσεγγιστικοί Αλγόριθμοι

ΑΣΚΗΣΕΙΣ ΣΤΗ ΓΡΑΦΙΚΗ ΠΑΡΑΣΤΑΣΗ ΣΥΝΑΡΤΗΣΗΣ. Λυμένες Ασκήσεις

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

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

ΝΕΕΣ ΔΥΝΑΤΟΤΗΤΕΣ-ΒΕΛΤΙΩΣΕΙΣ ΑΝΑΒΑΘΜΙΣΗΣ 2.59

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

Αναγνώριση Προτύπων Εργασία 2η Clustering

Μάθημα 1: Εισαγωγή. Κάνε κλικ την εντολή "κινήσου" και με το ποντίκι πατημένο μετέφερε τη στη περιοχή σεναρίων.

ΚΕΦΑΛΑΙΟ 10 ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ

Αξιολόγηση Προσωπικού

Εργαστήριο 2 - Άσκηση - Ανάλυση

Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών

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

Φροντιστήρια Επίγνωση Προτεινόμενα Θέματα Πανελλαδικών ΑΕΠΠ 2015

Συνδυαστική Βελτιστοποίηση Εισαγωγή στον γραμμικό προγραμματισμό (ΓΠ)

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 22/11/07

H κλάση ArrayList. Γιώργος Θάνος. Γραφείο Γ. Γκλαβάνη 37. Αντικει ενοστραφής Προγρα. ος όροφος

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ Κεφάλαιο 3 ο

Το Κ2 είναι ένα παιχνίδι για 1 έως 5 παίκτες, ηλικίας 8 ετών και άνω, με διάρκεια περίπου 60 λεπτά.

Η ΜΕΘΟΔΟΣ PCA (Principle Component Analysis)

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

Συνήθεις Διαφορικές Εξισώσεις Ι Ασκήσεις - 09/11/2017. Άσκηση 1. Να βρεθεί η γενική λύση της διαφορικής εξίσωσης. dy dx = 2y + x 2 y 2 2x

Τιμή Τιμή. σκορ. ζωές

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ Τελικό επαναληπτικό διαγώνισμα Επιμέλεια: Δρεμούσης Παντελής

Οικονοµικό Πανεπιστήµιο Αθηνών. Τµήµα Πληροφορικής. Φθινοπωρινό Εξάµηνο Δοµές Δεδοµένων - Εργασία 2. Διδάσκων: E. Μαρκάκης

Έστω ένας πίνακας με όνομα Α δέκα θέσεων : 1 η 2 η 3 η 4 η 5 η 6 η 7 η 8 η 9 η 10 η

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

Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών

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

Δομημένος Προγραμματισμός

Διάλεξη 21: Γράφοι IV - Βραχύτερα Μονοπάτια σε Γράφους

ΥΣ02 Τεχνητή Νοημοσύνη Χειμερινό Εξάμηνο

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

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

ΚΕΦΑΛΑΙΟ Μηχανική Μάθηση

Πολυτεχνείο Κρήτης Τμήμα ΗΜΜΥ Χειμερινό Εξάμηνο Intelligence Lab. Αυτόνομοι Πράκτορες. Κουσανάκης Βασίλης

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

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

Γραφήματα οικογένειας παραβολών

Θεωρήστε ένα puzzle (παιχνίδι σπαζοκεφαλιάς) με την ακόλουθη αρχική διαμόρφωση : b b b w w w e

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

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

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

ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ 2015 Β ΦΑΣΗ ÁÈÇÍÁ ΕΚΦΩΝΗΣΕΙΣ

Σχήµα 6.1: Εισαγωγή της εντολής Read From Spreadsheet File στο Block Diagram.

KTurtle. KTurtle του KDE. KTurtle (καμβάς), Επεξεργαστής Κώδικα και Επιθεωρητής (Εικόνα 2.1). Στην Κονσόλα (Εκτελεστής) Επιφάνεια Εργασίας (καμβάς)

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

Εισαγωγή στον Προγραμματισμό (με. τη C)

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 10 Ο. Δομές Ενώσεις Απαριθμητοί τύποι δεδομένων ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Οδηγίες Εργασίας 1 Facility-Game

Σενάριο 16: Ο κόσμος του Robby

Πρόβλεψη αποτελεσμάτων ποδοσφαιρικών αγώνων βάσει του ιστορικού των αναμετρήσεων

Κάθε φορά, που νιώθουμε τρελή λαχτάρα να μιλήσουμε για ευθείες, φανταζόμαστε εξισώσεις της παρακάτω μορφής : y = αx + β

ΑΤΕΙ ΠΕΙΡΑΙΑ/ ΣΤΕΦ 15/10/2012 ΤΜΗΜΑ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ ΑΠΑΝΤΗΣΕΙΣ ΓΡΑΠΤΗΣ ΕΞΕΤΑΣΗΣ ΣΤΗ ΦΥΣΙΚΗ

max & min Μεθοδολογία Τα βήματα που ακολουθούμε σε όλες τις τεχνικές εύρεσης max & min είναι τα εξής 2:

Κλάσεις και Αντικείµενα

ΦΥΣΙΚΗ ΓΕΝΙΚΗΣ ΠΑΙΔΕΙΑΣ Α ΛΥΚΕΙΟΥ

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

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

for for for for( . */

Transcript:

Εργασία 2η Δομές Δεδομένων Αντωνιάδης Ιωάννης 7137 Μόσχογλου Στυλιανός 6978 23 Δεκεμβρίου 2011

Περιεχόμενα 1 Πρόλογος 3 2 Η γενική αλγοριθμική ιδέα 3 2.1 Η calculatenextpacmanposition............... 3 2.2 Η κλάση Node69787137...................... 5 3 Η υλοποίηση της double evaluate() 6 3.1 Πιθανές βελτιώσεις........................ 8 3.1.1 Με την χρήση machine learning AI.......... 8 4 Στατιστικές αναλύσεις 9 5 Επίλογος 9 2

1 Πρόλογος Η εργασία αυτή πραγματοποιήθηκε στα πλαίσια του μαθήματος Δομές Δεδομένων, στο πολυτεχνικό τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών του Αριστοτελείου Πανεπιστημίου Θεσσαλονίκης. Είναι δακτυλογραφημένη σε L A TEX2ε. Ευχαριστούμε θερμά τον υποψήφιο διδάκτορα Αντώνιο Χρυσόπουλο που ήταν και είναι πάντα διαθέσιμος, όποτε τον χρειαστήκαμε. Καλή ανάγνωση... 2 Η γενική αλγοριθμική ιδέα 2.1 Η calculatenextpacmanposition Ουσιαστικά εδώ έχουμε να αντιμετώπισουμε μια πιο ρεαλιστική έκδοση του pacman σε σχέση με την πρώτη εργασία. Στόχος της είναι να οδηγήσουμε τον pacman καταλλήλως, ώστε να καταφέρει τελικά να πιάσει τις τέσσερις σημαίες που βρίσκονται μέσα στο maze χωρίς να τον πιάσουν τα (τέσσερα) φαντάσματα. Θεωρητικά ζητούμενο δηλαδή είναι η κατασκευή ενός αρκετά robust αυτόματου παίκτη (pacman) που κάθε φορά θα προσπαθεί να διαλέγει την καλύτερη δυνατή κίνηση, η οποία θα ορίζεται από μια σειρά ελέγχων, όπως θα δούμε και παρακάτω. Πριν ξεκινήσουμε όμως οιοδήποτε έλεγχο κίνησης, θα πρέπει να δούμε ποιες κινήσεις τους pacman απαγορεύονται. Αυτό που δε θέλουμε σε καμία περίπτωση είναι ο pacman να προσκρούεται σε τοίχο στην επόμενη κίνησή του. Επομένως, προτεραιότητά μας θα είναι να εξασφαλίζουμε κάθε φορά να μην πέφτει ο pacman σε τοίχο. Σύμφωνα με την εκφώνηση της εργασίας, θα πρέπει κάθε φορά η κίνηση του pacman να ορίζεται μέσω ενός αντικειμένου που ανήκει στην κλάση με όνομα Node69787137. Επομένως, μέσα στη συνάρτηση calculatenextpacmanposition, θα πρέπει να δημιουργούμε κάθε φορά το πολύ τέσσερα αντικείμενα τύπου Node69787137, μιας και οι πιθανές κινήσεις που μπορεί να κάνει ο pacman είναι τέσσερις (να μη ξεχνάμε ότι οι διαγώνιες κινήσεις δεν επιτρέπονται). Ανάλογα λοιπόν με το αν στην επόμενη πιθανή κίνηση υπάρχει τοίχος, ο pacman θα πρέπει να δημιουργεί κατά βούληση αντικείμενα. Αυτό το πετυχαίνουμε μέσω της λειτουργίας Vector που υπάρχει μέσα στην java.util.vector. Ουσιαστικά το Vector λειτουργεί όπως ένας δυναμικός πίνακας. Απλώς, μπορεί να αυξάνει, να μειώνει το μέγεθός του αυθαίρετα και πολύ πιο εύκολα από τους δυναμικούς αυτούς καθ αυτούς πίνακες. Επίσης, διαθέτει συναρτήσεις που διευκολύνουν στην εύρεση του μεγέθους του, κ.λπ. Κάθε φορά μέσω μίας if και της Maze[i][j].walls[k] ελέγχουμε αν υπάρχει τοίχος στην επόμενη διεύθυνση k. Αν δεν υπάρχει τοίχος, τότε δημιουργούμε το αντικείμενο. Αν υπάρχει, τότε δεν κάνουμε κάτι. Στο παρακάτω 3

σχήμα φαίνεται και οπτικά η διαδικασία δημιουργίας αντικειμένων, ανάλογα με την πιθανή κατεύθυνση. TRY IT! DON T! TRY IT! TRY IT! Βάσει λοιπόν του σχήματος, θα δημιουργηθούν στη συγκεκριμένη περίπτωση τρία αντικείμενα. Ενα για την βόρεια, ένα για την ανατολική κι ένα για τη νότια κατεύθυνση. Για τη δυτική δε θα δημιουργηθεί, μιας και υπάρχει τοίχος. Αμέσως μετά το συγκεκριμένο έλεγχο και τη δημιουργία των αντικειμένων, βλέπουμε την τιμή της nodeevaluation για καθένα από τα αντικείμενα που δημιουργήθηκαν και κρατάμε τελικά το αντικείμενο που έχει τη μεγαλύτερη τιμή nodeevaluation. Οσο μεγαλύτερη είναι η τιμή, τόσο πιο αποδοτική κρίνεται για τη συγκεκριμένη περίπτωση η κίνηση. Το πώς γίνεται αυτό, θα το αναλύσουμε παρακάτω. Ολοκληρώνουμε την calculatenextpacmanposition, επιστρέφοντας ως τιμή το nodemove που αντιστοιχεί στο άνωθεν επιλεγμένο nodeevulation. Αυτή πλέον (nodemove) θα είναι η νέα κατεύθυνση του pacman. Ο κύκλος αυτός συνεχίζεται μέχρι να κερδίσει ή να χάσει το pacman. 4

2.2 Η κλάση Node69787137 Η συγκεκριμένη κλάση είναι ουσιαστικά το... ζουμί της υπόθεσης. Είναι ο βασικός πυρήνας λειτουργίας του pacman και χωρίς αυτόν, θα έχανε πιο γρήγορα και από τη σκιά του. Αυτή, όπως ορίζεται και στην εκφώνηση, θα περιέχει τις ακόλουθες συναρτήσεις: Node(): Είναι ο constructor της κλάσης. Δέχεται σαν ορίσματα τέσσερις τιμές. Τις συντεταγμένες της πιθανής επόμενης κίνησης (δηλαδή έστω x,y), τη μεταβλητή move που ουσιαστικά ορίζει αυτή την επόμενη πιθανή κατεύθυνση (από 0 έως 3 οι πιθανές κατευθύνσεις) και το maze, που ουσιαστικά είναι ο πίνακας μέσα στον οποίο τρέχει ο pacman. Επίσης, μέσα στον constructor, κρατάμε για κάθε μία από τις επόμενες πιθανές κινήσεις και την προηγούμενη θέση του pacman, μιας και αλλιώς είναι αδύνατον να δούμε κατά πόσο συμφέρει η επόμενη κίνηση, χωρίς στοιχεία για την τωρινή. Αυτό επιτυγχάνεται απλά μέσω μιας switch και οι παλιές συντεταγμένες τώρα αποθηκεύονται σαν μεταβλητές ως prevx, prevy. int[][] findghosts(): Αυτή, όπως είναι προφανές κι από το όνομά της, είναι υπεύθυνη για τον εντοπισμό των φαντασμάτων σε κάθε κίνηση. Παρατηρούμε ότι επιστρέφει έναν δισδιάστατο πίνακα. Επομένως, σαρώνουμε με την χρήση δύο for όλο το maze και κάθε φορά που εντοπίζουμε ένα φάντασμα μέσω της βοηθητικής isghost(), καταχωρούμε σε έναν πίνακα result[][] τις συντεταγμένες του πρώτου φαντάσματος, του δεύτερου, κ.ό.κ. Επειδή είναι τέσσερα στο σύνολο τα φαντάσματα, έχουμε έναν βοηθητικό counter k που τον αρχικοποιούμε σε 0. Ετσι, αρχικά, όταν βρεθεί το πρώτο φάντασμα, θα μπει στη θέση result[0][1] η μεταβλητή i και στη θέση result[0][1] η μεταβλητή j. Επειτα, αυξάνουμε το k κατά μία μονάδα (k++) για το επόμενο φάντασμα (αλλάζουμε δηλαδή τη γραμμή στον πίνακα result), κ.ό.κ. int[][] findflags(): Οπως λέει και το όνομά της, είναι υπεύθυνη για τον εντοπισμό των σημαιών σε κάθε κίνηση. Παρατηρούμε ότι επιστρέφει έναν δισδιάστατο πίνακα. Επομένως, σαρώνουμε με την χρήση δύο for όλο το maze και κάθε φορά που εντοπίζουμε μία σημαία μέσω της βοηθητικής isflag(), καταχωρούμε σε έναν πίνακα result[][] τις συντεταγμένες της πρώτης σημαίας, της δεύτερης, κ.ό.κ. Επειδή είναι τέσσερις στο σύνολο οι σημαίες, έχουμε έναν βοηθητικό counter k που τον αρχικοποιούμε σε 0. Ετσι, αρχικά, όταν βρεθεί η πρώτη σημαία, θα μπει στη θέση result[0][1] η εκάστοτε μεταβλητή i και στη θέση result[0][1] η μεταβλητή j. Επειτα, αυξάνουμε το k κατά μία μονάδα (k++) για την επόμενη σημαία (αλλάζουμε δηλαδή τη γραμμή στον πίνακα result), κ.ό.κ. 5

Boolean[] checkflags(): Οπως μας δίνεται και στην εκφώνηση, η συνάρτηση αυτή είναι υπεύθυνη για την επιστροφή της κατάστασης της κάθε σημαίας που υπάρχει στην πλατφόρμα. Επόμενως, πάλι μέσω μίας διπλής for σαρώνουμε όλο το maze και όταν βρίσκουμε σημαία, αν αυτή δεν έχει πιαστεί, τότε στην αντίστοιχη θέση του πίνακα res[] καταχωρούμε την τιμή false. Σε διαφορετική περίπτωση (αν έχει πιαστεί), δίνουμε την τιμή true. Ο καθορισμός της θέσης της σημαίας μέσα στον πίνακα res γίνεται μέσω ενός εσωτερικού counter k. Αρχικά είναι k = 0 και κάθε φορά που βρίσκουμε μια νέα σημαία, αυξάνεται (k++). 3 Η υλοποίηση της double evaluate() Τέλος, η κύρια λειτουργία της Node69787137 είναι η εκτέλεση της συνάρτησης double evaluate(). Αυτή η συνάρτηση είναι υπεύθυνη για τον εντοπισμό της αποδοτικότερης κίνησης του pacman, σύμφωνα πάντα με συγκεκριμένα κριτήρια και την κατάσταση του maze, τη δεδομένη χρονική στιγμή που καλείται. Ξεκινάμε με την εξής παραδοχή. Μιας και το pacman κινείται μόνο οριζόντια ή κάθετα, οι αποστάσεις που θα θεωρήσουμε ότι ισχύουν είναι αντίστοιχες του αλγορίθμου Manhattan Distance. Δηλαδή, ορίζονται κάθε φορά ως η απόλυτη τιμή της διαφοράς των τετμημένων συν η απόλυτη τιμή της διαφοράς των τεταγμένων. Ορίζουμε τέλος και μια max απόσταση στο maze, που είναι ίση με Double.POSITIVE INFINITY. Αυτό θα μας χρειαστεί για την απλή αρχικοποίηση των μεταβλητών, ώστε να σιγουρευτούμε ότι δεν θα υπάρξει κάποιο conflict κατά την εκτέλεση του προγράμματος. Αφού γίνει η αρχικοποίηση και δηλωθούν και οι μεταβλητές, θα δούμε ένα ένα τα κριτήρια που εφαρμόζουμε. Μη αποδεκτές κινήσεις Το πρώτο κριτήριο που εφαρμόζουμε αφορά στο τι γίνεται αν η επικείμενη θέση που πρόκειται να μεταβεί το pacman συμπίπτει με μία από αυτές των φαντασμάτων. Σε αυτήν την περίπτωση του δίνουμε ένα αρνητικό βάρος, πολύ μεγάλο, έτσι ώστε να διαλέξει πιθανώς μια άλλη καλύτερη κίνηση. Απόσταση από σημαίες Το δεύτερο κριτήριο αφορά την απόσταση του pacman από τις σημαίες. Αρχικά, σαρώνουμε όλο το maze, μέχρι να βρούμε μια σημαία που δεν έχει πιαστεί προηγουμένως από το pacman. Με το που την εντοπίσουμε, συγκρίνουμε την απόστασή της από την τωρινή θέση του pacman. Αυτό το κάνουμε για όλες τις σημαίες που δεν έχουν πιαστεί. Τελικά, κρατάμε την ελάχιστη απόσταση σημαίας από τον pacman. Εντελώς αντίστοιχα, κάνουμε ακριβώς την ίδια διαδικασία για τη νέα πιθανή θέση του pacman 6

αυτή την φορά. Αν η νέα ελάχιστη απόσταση είναι μικρότερη από την προηγούμενη ελάχιστη απόσταση, τότε προσδίδουμε ένα θετικό βαρός. Αν όχι, τότε προσδίδουμε ένα αρνητικό. Απόσταση από φαντάσματα Το τρίτο κριτήριο αφορά την απόσταση του pacman από τα φαντάσματα. Αρχικά, σαρώνουμε όλο το maze, μέχρι να βρούμε ένα φάντασμα. Με το που το εντοπίσουμε, συγκρίνουμε την απόστασή του από την τωρινή θέση του pacman. Αυτό το κάνουμε για όλα τα φαντάσματα. Τελικά, κρατάμε αυτή την απόσταση που είναι ελάχιστη από το pacman. Εντελώς αντίστοιχα, κάνουμε ακριβώς την ίδια διαδικασία για τη νέα πιθανή θέση του pacman αυτή την φορά. Αν η νέα ελάχιστη απόσταση είναι μεγαλύτερη από την προηγούμενη ελάχιστη απόσταση, τότε προσδίδουμε ένα θετικό βαρός. Αν όχι, τότε προσδίδουμε ένα αρνητικό. Αν η νέα απόσταση είναι ίση με 1, τότε προσδίδουμε ένα μεγάλο αρνητικό βάρος, ώστε σίγουρα να μην εκτελέσει τη συγκεκριμένη κίνηση. Απόσταση φαντασμάτων από σημαίες Το τέταρτο κριτήριο αφορά την απόσταση των φαντασμάτων από τη σημαία που θέλει να καταλάβει ο pacman. Σε αυτή την περίπτωση, παραπλήσια με τις άνωθεν περιπτώσεις, σαρώνουμε όλο το maze μέχρι να εντοπίσουμε κάποιο φάντασμα. Οταν το εντοπίσουμε, συγκρίνουμε την απόστασή του από τη σημαία που θέλει να καταλάβει ο pacman. Να σημειωθεί εδώ πως έχουμε φροντίσει από πριν να αποθηκεύσουμε τις συντεταγμένες της συγκεκριμένης σημαίας στις μεταβλητές flagx, flagy. Αυτό το κάνουμε για όλα τα φαντάσματα. Τελικά κρατάμε την απόσταση του φαντάσματος που είναι η ελάχιστη από τη σημαία που θέλει να καταλάβει ο pacman. Αν αυτή η απόσταση είναι μεγαλύτερη από την ελάχιστη απόσταση της νέας επικείμενης θέσης του pacman από τη συγκεκριμένη σημαία, τότε δίνουμε ένα θετικό βάρος. Αν όχι, τότε δίνουμε ένα αρνητικό. Η προσθήκη της αρνητικής αυτής βαθμολογίας γίνεται ως εξής. Ελέγχουμε πόσα φαντάσματα βρίσκονται μεταξύ της σημαίας που θέλει να καταλάβει ο pacman και του pacman. Για κάθε φάντασμα που βρίσκεται στο διάβα του pacman, αφαιρούμε αντίστοιχα ένα ποσό. Προτειμούμε δηλαδή να ακυρώσουμε την κίνηση του pacman προς αυτή τη σημαία, έστω κι αν είναι πιο κοντά, καθώς υπάρχουν πολλά φαντάσματα στο δρόμο προς αυτή. Απόσταση pacman από το κέντρο Το maze είναι ένα ορθογώνιο. Το κέντρο του βρίσκεται στο σημείο τομής των διαγωνίων του. Δηλαδή, σε ένα σύστημα συντεταγμένων, στη μέση των τετμημένων και τεταγμένων αντίστοιχα. Επομένως, θα ελέγχουμε κάθε φορά το πόσο κοντά είναι ο pacman στο κέντρο του x και y άξονα. Οσο πιο κοντά είναι, τόσο περισσότερους πόντους 7

θα δίνουμε. Παρακάτω, παρουσιάζουμε ένα γράφημα μιας πιθανής δρομολόγησης του pacman (πράσινο χρώμα) σε βάθος χρόνου, σύμφωνα με τα κριτήρια που αναφέραμε παραπάνω, για την κατάκτηση της σημαίας (μπλε χρώμα) και αποφυγής των φαντασμάτων (κόκκινο χρώμα). possible path 3.1 Πιθανές βελτιώσεις Σίγουρα καθόλη τη διάρκεια παραγωγής του κώδικα υπήρξαν σκέψεις περί βελτίωσης της παρούσας εργασίας. Ο χρονικός περιορισμός δεν μας επέτρεψε να δούμε σε βάθος τη βέλτιστη λειτουργία της evaluate(). Ωστόσο, προτείνουμε ανεπυφύλακτα ιδέες και προτάσεις για μελλοντικές βελτιώσεις, που ενδέχεται να δημιουργήσουν ένα καλύτερο αυτοματοποιημένο παίκτη, με υψηλά επίπεδα τεχνικής νοημοσύνης ως προς την επιλογή των κινήσεων. 3.1.1 Με την χρήση machine learning AI Η χρήση τεχνητής νοημοσύνης είναι σίγουρα μια επιλογή που θα βοηθούσε πολύ. Με χρήση δένδρων και συγκεκριμένα του A* Algorithm ο pacman θα μπορεί, κάθε φορά που πρόκειται να κάνει κίνηση, να είναι σε θέση να βλέπει σε βάθος χρόνου τι του συμφέρει να εκτελέσει, συνυπολογίζοντας πολύ περισσότερες παραμέτρους από αυτές που ελέγχουμε άνωθεν. 8

4 Στατιστικές αναλύσεις Παρακάτω, παρουσιάζουμε ένα γράφημα με τον αριθμό των εκτελέσεων που πραγματοποιήσαμε και το success rate (ποσοστό επιτυχίας) του pacman στο να πιάνει σημαίες, αλλά και να νικάει. Προφανώς επειδή τα φαντάσματα είναι περισσότερα από τον pacman και είναι αρκετά έξυπνα ώστε να γνωρίζουν όλα το προς τα πού κινείται, το ποσοστό επιτυχίας μειώνεται δραματικά. Ακόμη κι ένας βέλτιστος πράκτορας δεν θα μπορούσε να νικάει συνέχεια. Τα στατιστικά έχουν παρθεί ύστερα από περίπου 100 εκτελέσεις. 100% 52.5% 15% flags taken wins 5 Επίλογος Μέσα στον κώδικα με τον οποίο υλοποιείται η κλάση αναφέρονται με σχόλια όλα όσα εκτελούνται. Τα σχήματα έγιναν στο GIMP. Η επιμέλεια του παρόντος pdf και των σχημάτων έγινε από τον φοιτητή Μόσχογλου Στυλιανό. Ευχαριστούμε πολύ για την υπομονή και την ανάγνωση... Αντωνιάδης Ιωάννης Μόσχογλου Στυλιανός 9