Age of Empires 2
Το θυμάστε; Αν η απάντησή σας είναι «1», τότε τα παρακάτω θα σας αρέσουν! Για λίγη ώρα ας μείνουμε στο κομμάτι της τεχνητής νοημοσύνης
Computer players Ωραίο το Multiplayer! ( Οι computer players οδηγούνται από τεχνητή νοημοσύνη Για την ακρίβεια παίζουν βασισμένοι σε κανόνες (αν …. τότε ….)!
Age of Empires 2 – What’s more? Οι κατασκευαστές φρόντισαν να αφήσουν τη δυνατότητα να φτιάχνουμε δικά μας Artificial Intelligence scripts Ελέγχουν τη στρατηγική και ως ένα όριο τις επιλογές του computer player Και το καλύτερο: Μπορούμε να τα βάζουμε να παίζουν μεταξύ τους!=> Τουρνουά
Φτιάχνουμε AI scripts Δημιουργούμε ένα κενό αρχείο.ai Και ένα αρχείο.per με το ίδιο όνομα που περιέχει τον κώδικα Τα τοποθετούμε στο φάκελο AI του παιχνιδιού
Και τα επιλέγουμε…
Γενική λειτουργία Η στρατηγική ενός computer player είναι ένα σύνολο από κανόνες Κάθε κανόνας αποτελείται από ένα ή περισσότερα FACTS και ένα ή περισσότερα ACTIONS Όταν ικανοποιούνται όλα τα Facts, τότε ο κανόνας ενεργοποιείται και εκτελούνται όλα τα Actions.
Παράδειγμα κανόνα (defrule (food-amount > 75) (unit-type-count villager < 20) => (train villager) )
Facts Συνθήκες που μπορεί να ικανοποιούνται ή όχι Μεταξύ των Facts: – Options του παιχνιδιού (πχ map-size, civ-selected) – Συνθήκες του παιχνιδιού (πχ player-resigned, game-time) – Συνθήκες που αφορούν τον παίκτη (πχ food- amount, population, town-under-attack) – Συνθήκες που αφορούν άλλους παίκτες (πχ players-current-age, players-unit-count)
Facts Παραδείγματα: – cheats-enabled – civ-selected mongol – research-completed ri-town-watch – can-train champion – military-population >= 30 – idle-farm-count < 3
Actions Εντολές δράσης του computer player Μεταξύ των Actions: - Άμεσες εντολές τύπου «φτιάξε», «χτίσε» κλπ (πχ train, research, build, chat) - Στρατηγικός σχεδιασμός (πχ enable-timer, set-goal, set-strategic-number) - Χειρισμός του ίδιου του script (πχ generate- random-number, disable-self)
Actions Παραδείγματα: – train man-at-arms – chat-to-allies “I am a computer and I talk haha” – build stable – resign – research imperial-age – enable-timer 1 300
Επίδειξη απλού AI script (defrule (civilian-population < 4) => (train villager) ) (defrule (civilian-population >= 4) => (research ri-loom) ) (defrule (true) => (build house) (disable-self) ) (defrule (resource-found food) => (build mill) )
Περιορισμοί Οι παράμετροι πρέπει να είναι σταθεροί αριθμοί, δεν υπάρχουν μεταβλητές – military-population >= 30 – military-population >= civilian-population – x=food-amount – wood-amount
Περιορισμοί Μη πλήρης έλεγχος του computer player – Τοποθέτηση κτιρίου – Επιλογή πηγής φαγητού – Αλγόριθμος εξερεύνησης (scouting) – κ.α.
Εσωτερικός κώδικας Πολύπλοκες διαδικασίες ελέγχονται από κώδικα που δεν μπορούμε να αλλάξουμε Πώς θα μπορούσαμε να ορίσουμε τη διαδρομή που θα ακολουθήσει ο scout; Θα μπορούσαμε όμως να δώσουμε κατευθυντήριες γραμμές Η επικοινωνία με τον εσωτερικό κώδικα γίνεται μέσω των Strategic numbers
Strategic numbers set-strategic-number... – sn-minimum-attack-group-size – sn-mill-max-distance – sn-wood-dropsite-distance – sn-number-forward-builders πχ: set-strategic-number sn-minimum-attack-group-size 20
Villager tasking Τα υλικά που επιλέγουμε να μαζεύουμε ελέγχονται από strategic numbers – sn-food-gatherer-percentage – sn-wood-gatherer-percentage – sn-gold-gatherer-percentage – sn-stone-gatherer-percentage (defrule (current-age == dark-age) (wood-amount > 400) (food-amount < 100) => (set-strategic-number sn-food-gatherer-percentage 90) (set-strategic-number sn-wood-gatherer-percentage 10) )
Goals Δεν υπάρχουν μεταβλητές => καμιά επικοινωνία μεταξύ κανόνων Η κατάσταση διορθώνεται κάπως με κάποιες «μεταβλητές κατάστασης» Action:set-goal Fact:goal goal-id από 1 έως 40 Ο operator σύγκρισης του Fact είναι “==“
Goals - παράδειγμα (defrule (game-time > 2400) (current-age != imperial-age) => (set-goal 1 1) ) (defrule (civilian-population < 100) (not (goal 1 1)) => (train villager) )
Constants (defconst AGE-ADVANCEMENT 1) (defconst YES 1) (defconst NO 2) (defrule (game-time > 2400) (current-age != imperial-age) => (set-goal AGE-ADVANCEMENT YES) ) (defrule (civilian-population < 100) (not (goal AGE-ADVANCEMENT YES)) => (train villager) )
Μεταβλητή συμπεριφορά (1) Για διαφορετικούς τύπους παιχνιδιού θέλουμε να έχουμε διαφορετικούς κανόνες – game-type-specific κανόνες (πχ deathmatch) – map-specific κανόνες – civilization-specific κανόνες Εντολή load-if-defined Γρηγορότερη επεξεργασία κατά τη διάρκεια του παιχνιδιού Έλεγχος λιγότερων συνθηκών στο εσωτερικό των κανόνων
Μεταβλητή συμπεριφορά (2) Random αριθμοί Τυχαία επιλογή συμπεριφοράς Action: generate-random-number Fact: random-number Όχι και τόσο απαραίτητο στην πράξη…
Cheating 1 ος τρόπος cheating: – Action: cc-add-resource food 300 Οσοδήποτε-οποτεδήποτε difficulty = Hardest =>CHEATER!!
Cheating 2 ος τρόπος cheating: – Fact: cc-players-unit-count – Fact: cc-players-building-count Πληροφορίες για τους αντιπάλους, μη προσβάσιμες φυσιολογικά Όχι cheating: – Fact: players-unit-count – Fact: players-building-count
Που να βρείτε CPSB.doc στο φάκελο DOCS του CD – Το επίσημο manual του AI scripting – Πολλά AI scripts,άρθρα και τουρνουά μεταξύ computer players ακόμα και τώρα – Άρθρα, forum, υλικό για το AOE 2 γενικά – Το σημερινό “zone” για online games