290 likes | 474 Views
Age of Empires 2. Age of Empires 2. Το θυμάστε; Αν η απάντησή σας είναι «1», τότε τα παρακάτω θα σας αρέσουν! Για λίγη ώρα ας μείνουμε στο κομμάτι της τεχνητής νοημοσύνης. Computer players. Ωραίο το Multiplayer ! ( www.igzones.com) Οι computer players οδηγούνται από τεχνητή νοημοσύνη
E N D
Age of Empires 2 • Το θυμάστε; • Αν η απάντησή σας είναι «1», τότε τα παρακάτω θα σας αρέσουν! • Για λίγη ώρα ας μείνουμε στο κομμάτι της τεχνητής νοημοσύνης
Computer players • Ωραίο το Multiplayer! (www.igzones.com) • Οι 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 <goal-id> <value> • Fact: goal <goal-id> <value> • 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 <max> • Fact: random-number <operator> <value> • Όχι και τόσο απαραίτητο στην πράξη…
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 • www.aiscripters.com • Πολλά AI scripts,άρθρα και τουρνουά μεταξύ computer players ακόμα και τώρα • www.aok.heavengames.com • Άρθρα, forum, υλικό για το AOE 2 γενικά • www.igzones.com • Το σημερινό “zone” για online games