Βελτιστοποίηση σε τρίλιζα Καταδίωξη/διαφυγή ΒΕΛΤΙΣΤΟΠΟΙΗΣΗ Ένα απλό παράδειγμα Βελτιστοποίηση σε τρίλιζα Καταδίωξη/διαφυγή (με ορατό ή αόρατο φυγά)
Ας παίξουμε! Δύο παίκτες Ο 1ος παίκτης διαλέγει τον αριθμό 1 ή 2 Το ίδιο και ο 2ος και ο αριθμός του προστίθεται στου πρώτου. Παίζουν εναλλάξ αυξάνοντας τον αριθμό κατά 1 ή 2 Όποιος φτάσει πρώτος στο 10 κερδίζει
Ας παίξουμε! LIVE!
Δέντρο παιχνιδιού 1 2 2 3 3 4 4 5 1 2 1 2 1 2 1 2 1ος παίκτης 1 2 1ος παίκτης 1 2 2ος παίκτης 1 2 2 3 1 2 1ος 3 4 1 2 2ος 4 5
Δέντρο παιχνιδιού 1 2 1ος 1 2 1 2ος 2 2 3 1 1ος 2 3 4 1 2 2ος 4 5
Δέντρο παιχνιδιού 1 2 1ος 1ος 1 2 1 2ος 2 2 3 1 1ος 1ος 2 3 4 1 2 2ος 1 2 1ος 1ος 1 2 1 2ος 2 2 3 1 1ος 1ος 2 3 4 1 2 2ος 4 5 1 2 1ος 5 6 2ος 1 2 1 6 7 7 1ος 1 7
Δέντρο παιχνιδιού 1 2 1ος 1ος 1 2 1 2ος 2 2 3 1 1ος 1ος 2 3 4 1 2 2ος 1 2 1ος 1ος 1 2 1 2ος 2 2 3 1 1ος 1ος 2 3 4 1 2 2ος 4 5 1 2 1ος 1 2 5 6 6 7 2ος 1 2 1 1 6 7 7 7 1ος 1 7
Δέντρο παιχνιδιού 1 2 1ος 1ος 1 2 1 2ος 2 2 3 1 1ος 1ος 2 3 4 1 2 2ος 1 2 1ος 1ος 1 2 1 2ος 2 2 3 1 1ος 1ος 2 3 4 1 2 2ος 1 2 4 5 5 6 1 2 1ος 1 2 1 2 1 5 6 6 7 6 7 7 2ος 1 2 1 1 1 6 7 7 7 7 1ος 1 7
Δέντρο παιχνιδιού 1 2 1ος 1ος 1 2 1 2ος 2 2 3 1 1ος 1ος 2 1 2 3 4 4 5 1 2 1ος 1ος 1 2 1 2ος 2 2 3 1 1ος 1ος 2 1 2 3 4 4 5 1 2 1 2ος 1 2 2 1 2 4 5 5 6 5 6 6 7 1 2 1ος 1 2 1 2 1 1 2 1 1 5 6 6 7 6 7 7 6 7 7 7 2ος 1 2 1 1 1 1 6 7 7 7 7 7 1ος 1 7
Δέντρο παιχνιδιού 1 2 1ος 1ος 1 2 1 2ος 2 1 2 2 3 3 4 1 1ος 1ος 2 1 2 1 2 1ος 1ος 1 2 1 2ος 2 1 2 2 3 3 4 1 1ος 1ος 2 1 2 1 2 1 2 3 4 4 5 4 5 5 6 1 2 1 2 2ος 1 2 2 1 2 1 1 2 1 2 1 4 5 5 6 5 6 6 7 5 6 6 7 6 7 7 1 2 1ος 1 2 1 2 1 1 2 1 1 1 2 1 1 1 5 6 6 7 6 7 7 6 7 7 7 6 7 7 7 7 2ος 1 2 1 1 1 1 1 6 7 7 7 7 7 7 1ος 1 7
Δέντρο παιχνιδιού 1ος 1ος 1 2 2ος 2 3 3 4 1ος 1ος 3 4 4 5 4 5 5 6 2ος 1ος 1ος 1 2 2ος 2 3 3 4 1ος 1ος 3 4 4 5 4 5 5 6 2ος 4 5 5 6 5 6 6 7 5 6 6 7 6 7 7 1ος 5 6 6 7 6 7 7 6 7 7 7 6 7 7 7 7 2ος 6 7 7 7 7 7 7 1ος 7
Δέντρο παιχνιδιού 1ος 1ος 1 2 2ος 2 3 3 4 1ος 1ος 3 4 4 5 4 5 5 6 2ος 1ος 1ος 1 2 2ος 2 3 3 4 1ος 1ος 3 4 4 5 4 5 5 6 2ος 4 5 5 6 5 6 6 7 5 6 6 7 6 7 7 1ος 5 6 6 7 6 7 7 6 7 7 7 6 7 7 7 7 2ος 6 7 7 7 7 7 7 1ος 7
Δέντρο παιχνιδιού 1ος 1ος 1 2 2ος 2 3 3 4 1ος 1ος 3 4 4 5 4 5 5 6 2ος 1ος 1ος 1 2 2ος 2 3 3 4 1ος 1ος 3 4 4 5 4 5 5 6 2ος 4 5 5 6 5 6 6 7 5 6 6 7 6 7 7 1ος 5 6 6 7 6 7 7 6 7 7 7 6 7 7 7 7 2ος 6 7 7 7 7 7 7 1ος 7
Δέντρο παιχνιδιού 1ος 1ος 1 2 2ος 2 3 3 4 1ος 1ος 3 4 4 5 4 5 5 6 2ος 1ος 1ος 1 2 2ος 2 3 3 4 1ος 1ος 3 4 4 5 4 5 5 6 2ος 4 5 5 6 5 6 6 7 5 6 6 7 6 7 7 1ος 5 6 6 7 6 7 7 6 7 7 7 6 7 7 7 7 2ος 6 7 7 7 7 7 7 1ος 7
Δέντρο παιχνιδιού 1ος 1ος 1 2 2ος 2 3 3 4 1ος 1ος 3 4 4 5 4 5 5 6 2ος 1ος 1ος 1 2 2ος 2 3 3 4 1ος 1ος 3 4 4 5 4 5 5 6 2ος 4 5 5 6 5 6 6 7 5 6 6 7 6 7 7 1ος 5 6 6 7 6 7 7 6 7 7 7 6 7 7 7 7 2ος 6 7 7 7 7 7 7 1ος 7
Δέντρο παιχνιδιού 1ος 1ος 1 2 2ος 2 3 3 4 1ος 1ος 3 4 4 5 4 5 5 6 2ος 1ος 1ος 1 2 2ος 2 3 3 4 1ος 1ος 3 4 4 5 4 5 5 6 2ος 4 5 5 6 5 6 6 7 5 6 6 7 6 7 7 1ος 5 6 6 7 6 7 7 6 7 7 7 6 7 7 7 7 2ος 6 7 7 7 7 7 7 1ος 7
Τρίλιζα
Τρίλιζα Υπάρχει δέντρο παιχνιδιού για την τρίλιζα? Ποιο είναι το βάθος του δέντρου? Είναι σταθερό το βάθος? Πόσες διακλαδώσεις υπάρχουν σε κάθε βήμα?
Τρίλιζα δέντρο 1 1ος παίκτης (επιλέγει maximum) -1 -1 1 2ος παίκτης (επιλέγει minimum) 1 -1 -1 1 1 -1 -1 1 1 1 1
Τρίλιζα Όλο το δέντρο έχει χοντρικά 9! = 360000 τελικούς κόμβους Για την ακρίβεια έχει 549.946 κόμβους (58.924 αν λάβουμε υπόψη τη συμμετρία) Πρακτικά εφαρμόσιμη μέθοδος μόνο για υπολογιστή!
O αλγόριθμος… με απλά λόγια Αλγόριθμος Βρες_Αξία Αν είναι τελικός κόμβος Αν είναι νίκη του Χ: Αξία = 1 Αν είναι νίκη του Ο: Αξία = -1 Αν είναι ισοπαλία: Αξία = 0 Αν δεν είναι τελικός κόμβος Για όλες τις δυνατές κινήσεις: Υπολογίζουμε την αξία του κάθε κόμβου που προκύπτει Αν είναι σειρά του Χ βρίσκουμε το μέγιστο των παραπάνω Αν είναι σειρά του Ο βρίσκουμε το ελάχιστο των παραπάνω Αυτό θα γίνει με τον ίδιο αλγόριθμο
Αναδρομικές διαδικασίες Πρόβλημα Α1 Πρόβλημα Β1 Πρόβλημα Β2 Πρόβλημα Β3 Γ1 Γ2 Γ3 Γ4 Γ5 Γ6 Γ7 Γ8 Γ9
O αλγόριθμος… με απλά λόγια Αλγόριθμος Βρες_Αξία Αν είναι τελικός κόμβος Αν είναι νίκη του Χ: Αξία = 1 Αν είναι νίκη του Ο: Αξία = -1 Αν είναι ισοπαλία: Αξία = 0 Αν δεν είναι τελικός κόμβος Για όλες τις δυνατές κινήσεις: Υπολογίζουμε την αξία του κάθε κόμβου που προκύπτει Αν είναι σειρά του Χ βρίσκουμε το μέγιστο των παραπάνω Αν είναι σειρά του Ο βρίσκουμε το ελάχιστο των παραπάνω
Αλγόριθμος - Ψευδοκώδικας function Value (A[3][3], player) if (A[1][1] + A[1][2] + A[1][3] == 3) or (A[2][1] + A[2][2] + A[2][3] == 3) or …. Value = 1 else if (A[1][1] + A[1][2] + A[1][3] == -3) or (A[2][1] + A[2][2] + A[2][3] == -3) or …. Value = -1 else if (A[1][1] * A[1][2] * A[1][3] * … * A[3][3] != 0) Value = 0 end if Συνέχεια…
Ψευδοκώδικας - Συνέχεια if (player==1) bestValue = -1 // Initialize bestValue if (player==2) bestValue = 1 for (i=1 to 3) for(j=1 to 3) if (A[i][j]==0) // Is free square? A[i][j] = 3 - 2*player // Play the move new_player = 3 – player // Decide next player tempValue = Value(A, new_player) if (tempValue > bestValue AND player==1) bestValue = tempValue else if (tempValue < bestValue AND player==2) end if A[i][j] = 0 // Take back move end for
Πώς γίνεται στην πράξη; Υλοποίηση του αλγορίθμου σε C Εύκολα γραφικά με Visual Basic Δημιουργία .dll με τον κώδικα C και κλήση από Visual Basic!
Τεχνικές λεπτομέρειες Στη C/C++: Δημιουργία dll project Γράφουμε κανονικά τις συναρτήσεις δηλώνοντάς τες ως extern (πχ “extern int myFunc(int var1)”) Στη Visual Basic: Δηλώνουμε στις γενικές μεταβλητές ότι θα χρησιμοποιήσουμε την αντίστοιχη συνάρτηση: Private Declare Function myFunc Lib “path\filename.dll" (ByVal var1 As Long) As Long Καλούμε τη συνάρτηση όποτε θέλουμε όπως και στη C (πχ “b=myFunc(a)”)
Pursuit Evasion με αόρατο φυγάδα Αυτό το παιχνίδι είναι σχεδόν ίδιο με το προηγούμενο. Διαφορές Οι κυνηγοί δεν γνωρίζουν τη θέση του φυγάδα (αόρατος φυγάδας). Ο φυγάδας γνωρίζει τις θέσεις των κυνηγών. Ο φυγάδας έχει πολύ μεγαλύτερη ταχύτητα από τους κυνηγούς. Εφαρμογή του παιχνιδιού: έρευνα μέσα σε ένα κτίριο.
Όπως και στα προηγούμενα, με διακριτοποίηση καταλήγουμε σε καταδίωξη επί ενός γράφου.
Καταδίωξη / διαφυγή Αόρατου Φυγάδα επί ενός γράφου
Το πρόβλημα του αόρατου φυγάδα είναι υπολογιστικά πολύ πιο δύσκολο από αυτό του ορατού φυγάδα. Διάφορες λύσεις, όλες ευρετικές. Δεν υπάρχει minmax διατύπωση ανάλογη με του ορατού φυγάδα (γιατί δεν εφαρμόζεται η λύση του ορατού φυγάδα?) Βασική ιδέα: Σαρώνουμε το κτίριο, καθαρίζουμε τα δωμάτια, φροντίζουμε ώστε κανένα καθαρό δωμάτιο να μην ξαναμολυνθεί. Βασική ιδέα: Η κατάσταση (state) της καταδίωξης και η συνάρτηση εξέλιξης κατάστασης (state evolution function).
H Κατάσταση της Καταδίωξης Που βρίσκεται ο κάθε κυνηγός Που μπορεί να βρίσκεται ο φυγάδας (dirty set) Διάνυσμα κατάστασης (xt,Dt) Συνάρτηση εξέλιξης κατάστασης: (xt,Dt)=F(xt-1,Dt-1,ut) Το Κόστος της Κατάστασης της Καταδίωξης J(xt,Dt)=|Dt|
Algorithm PEI (Pursue / Evasion Invisible) Input: Graph (V,E); Starting node n₀ For t=1:Tmax For n=1:N Path(n)=[ ] DirtySet(n)=V Cost(n)=|DirtySet(n)| Next n Path(n₀)=[n₀] DirtySet(n₀)=V-N(n₀) Cost(n₀)=|DirtySet(n₀)| [Path, DirtySet, Cost]=SearchUpdate(Path, DirtySet, Cost) Next t Output: PathBest
Func[Path,DSet,Cost]=SearchUpdate(Path,DSet, Cost) For n=1:N For m=1:N If m is neighbor of n PathBest=Path(m) DirtyBest=DirtySet(m) CostBest=Cost(m) PathNew=[Path(n) m] DirtyNew=State(n,DirtySet(n),m) CostNew=|DirtyNew| If CostNew<CostBest PathBest=PathNew DirtyBest=DirtyNew CostBest=CostNew EndIf Path(m)=PathBest DirtySet(m)=DirtyBest Cost(m)=CostBest Next m Next n
PEI Computer Demo 1
PEI Computer Demo 2
PEI Computer Demo 3