Τρίτη, 22 Απριλίου 2014

Devblog: Φτιάχνοντας ανθρώπινα bots

Γεια σας!

Καλώς ορίσατε σε μια ακόμη ανάρτηση του ιστολογίου προγραμματιστών του League of Legends. Αυτήν τη φορά, αφήνουμε για λίγο την ομάδα τρόπου παιχνιδιού για να μιλήσουμε για τα bots, τα οποία, είτε το πιστεύετε είτε όχι, είναι παρόντα σε ένα σεβαστό κομμάτι του συνολικού χρόνου παιχνιδιού στο League of Legends. Πρόσφατα αναπτύξαμε μια σειρά αλλαγών που έχουν ως στόχο να τα καταστήσουν αντιπάλους που μοιάζουν περισσότερο με κανονικούς παίκτες και πιστεύουμε ότι θα σας ενδιέφερε να μάθετε μερικές από τις ιστορίες πίσω από την ενημέρωση.

Όπως πάντα, τα σχόλιά σας είναι πάντα ευπρόσδεκτα στην προσπάθειά μας να δημιουργήσουμε ένα καλύτερο ιστολόγιο προγραμματιστών. Στο μεταξύ, όμως, ας δούμε τι χρειάζεται για να δημιουργήσει κανείς ένα καλύτερο bot με συμπεριφορά ανθρώπου. Σήμερα έχουμε μαζί μας τον αναλυτή σχεδιασμού RoamingNumeral, έναν από τους βασικούς συντελεστές της ενημέρωσης των bots.

Ας ξεκινήσουμε!

 Pwyff

Γιατί ενημερώσαμε τα bots;

Οι αγώνες εναντίον bots αποτελούν αρκετά μεγάλο ποσοστό των συνολικών αγώνων, ακόμη και σε παίκτες επιπέδου 30. Αυτό μεταφράζεται σε πολλές ώρες παιχνιδιού με τους ρομποτικούς μας φίλους και πιστεύομε ότι θα μπορούσαν να γίνουν ακόμη πιο ευχάριστες.

Κάναμε μια έρευνα μεταξύ παικτών που παίζουν εναντίον bots αλλά και παικτών που παίζουν PvP, για να μάθουμε τη γνώμη τους σχετικά με τα bots. Κάτι που ήταν πολύ ξεκάθαρο στα σχόλια ήταν η επιθυμία για πιο «ανθρώπινα» bots, δηλαδή για bots που είναι λιγότερο προβλέψιμα και επικεντρώνονται στα ίδια στοιχεία του παιχνιδιού με αυτά που προτιμούν οι παίκτες, όπως τα τελειωτικά χτυπήματα και οι συνδυασμοί ικανοτήτων. Μας έκανε εντύπωση ότι, συγκριτικά, η απαίτηση για πιο «σκληρά» bots δεν ήταν τόσο μεγάλη. Με βάση αυτά τα δεδομένα, θέσαμε ως γενικότερο στόχο για αυτήν την ενημέρωση να δημιουργήσουμε bots που να συμπεριφέρονται περισσότερο σαν κανονικοί παίκτες, ειδικά επειδή αυτές οι αλλαγές θα καταστήσουν τα bots μεγαλύτερου επιπέδου δυσκολίας πιο ενδιαφέροντα στην πορεία.

Οι παίκτες είπαν, επίσης, ότι πίστευαν πως τα bots φαίνονταν να μην εξετάζουν την ισχύ των παικτών και τους κινδύνους με τον ίδιο τρόπο που κάνουν οι περισσότεροι παίκτες. Όπως αποδεικνύεται, είχαν δίκιο.

Βελτίωση αξιολόγησης κινδύνου

Ονομάζουμε αξιολόγηση κινδύνου τα συστήματα που χρησιμοποιούν τα bots για να προσδιορίσουν πόσο ισχυρά είναι αυτά και πόσο ισχυροί είναι οι εχθροί τους. Αυτά τα συστήματα παίζουν ρόλο σε όλες τις αποφάσεις των bots στη διάρκεια του αγώνα.
Τα προηγούμενα συστήματά μας χρησιμοποιούσαν μια μέθοδο που είναι πολύ συνηθισμένη στα παιχνίδια, ιδιαίτερα στα παιχνίδια βολών πρώτου προσώπου. Το bot εξετάζει πόση ζημιά έχει δεχτεί πιο πρόσφατα και χρησιμοποιεί αυτό το στοιχείο για να υπολογίσει τους μελλοντικούς κινδύνους. Σε ένα FPS, αυτό είναι πολύ λογικό. Αν ένα bot μπει σε ένα δωμάτιο και δεχτεί μεγάλες ποσότητες ζημιάς, πιθανόν να συνεχίσει να δέχεται ζημιά αν παραμείνει εκεί. Έτσι, είναι καλύτερο να οπισθοχωρήσει.

Το League of Legends λειτουργεί κάπως διαφορετικά. Αν ο Βέιγκαρ ρίξει όλα τα ξόρκια του σε ένα bot και το bot επιβιώσει, αυτό δεν σημαίνει ότι πρέπει να το βάλει στα πόδια. Αντίθετα, αυτό σημαίνει ότι είναι ώρα το bot να καταστρέψει αυτό το σατανικό μικρό @$!#!. Ο Βέιγκαρ δεν μπορεί να προκαλέσει σχεδόν καθόλου ζημιά, όταν όλες οι ικανότητές του είναι ξεφόρτιστες. Γιατί, λοιπόν, να μην του ρίξεις κάνα δυο, ή μάλλον να του ρίξεις πολλές, τη στιγμή που είναι πιο ευάλωτος;

Τα νέα συστήματά μας προσπαθούν να διαχειριστούν αυτά τα σενάρια εξετάζοντας όχι μόνο τη ζωή, αλλά και πόσα ξόρκια έχει διαθέσιμα το bot και οι κοντινοί του εχθροί. Συνολικά, έχουμε δει μερικές σαφείς βελτιώσεις στην αξιολόγηση κινδύνου των bots (προς μεγάλη λύπη του Βέιγκαρ).

Ωστόσο, αυτό δεν σημαίνει ότι η αξιολόγηση κινδύνου είναι η τελική λύση για τα bots. Το League of Legends είναι φτιαγμένο για να παίζεται από ανθρώπους και όχι από bots και αυτό δημιουργεί ορισμένα ενδιαφέροντα ζητήματα. Για παράδειγμα, το παιχνίδι δεν γνωρίζει πραγματικά τι κάνει ένα ξόρκι πριν χρησιμοποιηθεί. Όταν χρησιμοποιούνται τα Δεσμά Ψυχής της Μοργκάνα, ένα μια δέσμη ενεργειών αρχίζει να εκτελείται που ελέγχει διαρκώς αν κάποιος έχει σπάσει τα δεσμά. Όταν ολοκληρωθεί το ξόρκι, η δέσμη ενεργειών λέει «Εσύ! Είσαι εξουδετερωμένος και δέχεσαι ζημιά» σε όλους όσοι δεν έσπασαν τα δεσμά. Πριν χρησιμοποιήσει η Μοργκάνα την υπέρτατη ικανότητά της, το παιχνίδι δεν γνώριζε πραγματικά ότι τα Δεσμά Ψυχής προκαλούν ζημιά και εξουδετερώνουν.

Τώρα όλα αυτά μπορεί να φαίνονται προφανή, αλλά μόνο γιατί οι κανονικοί παίκτες μπορούν να διαβάσουν τις επεξηγήσεις εργαλείων και να σκεφτούν πιθανά σενάρια εκ των προτέρων. Ως αποτέλεσμα, το σύστημα μπορεί να διαπιστώσει τι κάνει κάθε ξόρκι, την ώρα που εκτελείται. Ωστόσο, αυτό είναι τεράστιο πρόβλημα για τα bots, επειδή δεν μπορούν να διαβάσουν και δεν μπορούν να μάθουν αποκτώντας εμπειρία.
Γι' αυτόν το λόγο, αυτή η ενημέρωση πρέπει να χρησιμοποιήσει μια κατά προσέγγιση εκτίμηση του ποσού ζημιάς που μπορούν να προκαλέσουν οι ήρωες. Τα bots θα εξακολουθήσουν μερικές φορές να παραμένουν στη μάχη περισσότερο απ' όσο θα έπρεπε ή να παρατούν μια μάχη που θα μπορούσαν να κερδίσουν, επειδή δεν μπορούν να υπολογίσουν με ακρίβεια τη ζημιά που προκαλείται... όπως ακριβώς οι κανονικοί παίκτες :P

Γιατί όχι bots σε ζούγκλα, γιατί δεν πηδούν τοίχους

Αυτό οφείλεται βασικά σε ένα απλό ζήτημα: τα bots δεν ξέρουν πού βρίσκονται οι τοίχοι. Δεν ξέρουν καν τι είναι οι τοίχοι (είναι χάλια να είσαι bot, έτσι;).

Αυτό βασικά είναι το ίδιο πρόβλημα με τις ικανότητες: Το League of Legends είναι φτιαγμένο για να παίζεται από ανθρώπους. Ένας άνθρωπος καταλαβαίνει γιατί μια διαδρομή δεν είναι ευθεία: υπάρχει ένας τοίχος στη μέση! Από την άλλη, ένα bot απλώς ακολουθεί τις αυτοματοποιημένες διαδρομές που του δίνονται. Δεν γνωρίζει πού ακριβώς βρίσκεται ο τοίχος ή πόσο παχύς είναι. Δεν γνωρίζει καλά καλά ότι το εμπόδιο είναι τοίχος. Θα μπορούσε να είναι ένας σωρός από υπηρέτες. Τα bots απλώς ακολουθούν την πιο σύντομη διαδρομή από σημείο σε σημείο που τους δίνεται από το σύστημα διαδρομών.

Τα άλματα πάνω από τοίχους με Ταχυμεταφορά ή άλλες ικανότητες είναι, συνεπώς, εξαιρετικά δύσκολα για ένα bot. Αν δεν γνωρίζει πόσο παχύς είναι ένας τοίχος ή πώς μπορεί να βρει τον πιο σύντομο δρόμο από ένα στενό πέρασμα, είναι ουσιαστικά αδύνατο να αυτοματοποιήσει αυτές τις κινήσεις. Για να γίνουν αυτές οι συμπεριφορές δυνατές στο (πολύ μακρινό) μέλλον, θα χρειάζονταν πολλές μη εμφανείς τροποποιήσεις στα συστήματα εδάφους μας.

Η δράση στη ζούγκλα είναι παρόμοια ιστορία. Ένα από τα βασικά στοιχεία για να αποδίδει ένα bot στη ζούγκλα είναι η επιλογή διαδρομών που είναι είτε ασφαλείς είτε οι καλύτερες δυνατές για λόγους που δεν εξαρτώνται απλώς από την απόσταση. Χωρίς περαιτέρω αλλαγές στα συστήματα διαδρομών και εδάφους, δεν μπορούμε να δημιουργήσουμε ένα bot ζούγκλας που να είναι κάτι περισσότερο από ένα κινούμενο πακέτο 300 χρυσών νομισμάτων, έτοιμο για άνοιγμα.

Σίγουρα πιστεύουμε ότι τα άλματα πάνω από τοίχους και η δράση στη ζούγκλα θα ήταν εξαιρετικές δυνατότητες για τα bots και στο μέλλον θέλουμε να αναζητήσουμε τρόπους να τις δώσουμε σε αυτά. Ωστόσο, προς το παρόν επιλέξαμε να επικεντρωθούμε σε άλλες συμπεριφορές που θα καταστήσουν τα bots αρκετά πιο ανταγωνιστικά, όταν μάχονται εναντίον παικτών.

Αποφυγή επιδέξιων βολών

Μία από τις πιο εμφανείς διαφορές μεταξύ παικτών και των προηγούμενων bots ήταν ο τρόπος που αντιδρούσαν όταν δέχονταν επιδέξιες βολές. Στις περισσότερες περιπτώσεις, οι παίκτες προσπαθούν να αποφύγουν τις επιδέξιες βολές, αλλά τα bots συχνά τις έτρωγαν κατακούτελα χωρίς να αντιδράσουν. Επειδή αυτή η συμπεριφορά είναι κλασική συμπεριφορά bots και όχι κανονικών παικτών, θέλαμε πραγματικά να τα μάθουμε να αποφεύγουν βολές. Ωστόσο, αντιμετωπίσαμε μια σημαντική δυσκολία (φαντάζεστε ποια!). Όπως ακριβώς με το έδαφος, τα bots δεν μπορούν να «δουν» τις επιδέξιες βολές.

Να πώς έβλεπε το bot Άνι τη Ρίψη Ακοντίου της Νίνταλι:

Το bot Άνι είναι online…
Γίνεται σάρωση...
Στόχος: Νίνταλι
Η Ζωή μου: Υψηλή
Το Q του στόχου είναι διαθέσιμο: Ναι
Ενέργεια: Φαρμάρω μέχρις εσχάτων
-------------------
Γίνεται σάρωση...
Στόχος: Νίνταλι
Η Ζωή μου: Υψηλή
Το Q του στόχου είναι διαθέσιμο: ΟΧΙ
Ενέργεια: Φαρμάρω κι άλλο
-------------------
Γίνεται σάρωση...
Στόχος: Νίνταλι
Η Ζωή μου: ΧΑΜΗΛΗ
Ζωή στόχου: Υψηλή
Το Q του στόχου είναι διαθέσιμο: ΟΧΙ
Ενέργεια: ΤΙ;;; ΠΟΥ ΕΙΝΑΙ Η ΖΩΗ ΜΟΥ;! Η ΝΙΝΤΑΛΙ ΕΙΝΑΙ OP. RIOT ΚΑΝΕ ΚΑΤΙ! (Τρέχει να σωθεί)

Ευτυχώς για το bot Άνι, η Riot Case βρήκε έναν τρόπο να χρησιμοποιήσει πληροφορίες που είναι ήδη διαθέσιμες στα bots, για να τα βοηθήσει, ώστε να προσπαθούν να αποφεύγουν τις επιδέξιες βολές. Παρακολουθώντας το πού κοιτούν οι αντίπαλοί τους, καθώς και το ποιες ικανότητες ξεφορτίστηκαν πρόσφατα, τα bots μπορούν πλέον να επιχειρούν την αποφυγή επιδέξιων βολών σε ορισμένες περιπτώσεις.

Να πώς βλέπει το bot Άνι τη Ρίψη Ακοντίου μετά την ενημέρωση:

Το bot Άνι είναι online
Γίνεται σάρωση...
Στόχος: Νίνταλι
Η Ζωή μου: Υψηλή
Το Q του στόχου είναι διαθέσιμο: Ναι
Ενέργεια: Φαρμάρισμα
-------------------
Γίνεται σάρωση...
Στόχος: Νίνταλι
Η Ζωή μου: Υψηλή
Το Q του στόχου είναι διαθέσιμο: ΟΧΙ
[ΕΝΤΟΠΙΣΤΗΚΕ ΧΡΗΣΗ ΙΚΑΝΟΤΗΤΑΣ]
Είναι επιδέξια βολή ικανότητας: ΝΑΙ
Ο στόχος κοιτάζει προς εμένα: ΝΑΙ
Ενέργεια: ΑΠΟΦΥΓΗ ΣΑΝ ΝΙΝΤΖΑ
-------------------
Γίνεται σάρωση...
Στόχος: Νίνταλι
Η Ζωή μου: Υψηλή
Το Q του στόχου είναι διαθέσιμο: ΟΧΙ
Ενέργεια: ΠΙΣΩ ΚΑΙ Σ' ΕΦΑΓΑ! ΑΕΡΑΑΑΑΑΑΑΑΑ! (Επίθεση)

Με αυτήν την αλλαγή, τα bots μπορούν πλέον να επιχειρούν την αποφυγή επιδέξιων βολών...τίποτα δεν είναι τέλειο όμως. Για παράδειγμα, το Παγάκι της Ανίβια δεν ξεφορτίζεται μέχρι να ακολουθήσει ολόκληρη την πορεία ή ενεργοποιηθεί εκ νέου.

Έτσι, τα bots δεν γνωρίζουν ότι έχει χρησιμοποιηθεί. Η Σφαίρα της Παραπλάνησης της Άρι επιστρέφει σ' αυτήν. Έτσι, τα bots μπορεί να αποφύγουν τη σφαίρα όταν φεύγει αλλά όχι όταν επιστρέφει. Υπάρχουν και άλλες ικανότητες που αυτό το σύστημα δεν μπορεί να διαχειριστεί ακόμη σωστά, αλλά η αποφυγή μερικών επιδέξιων βολών είναι σίγουρα καλύτερη από το να μην μπορείς να αποφύγεις καμία!

Ικανότητες και αντικείμενα bots

Εκτός από τις πιο δύσκολες περιπτώσεις παραπάνω, μπορούσαμε να κάνουμε αρκετά πράγματα, ώστε τα bots να μοιάζουν με πραγματικούς παίκτες, αρκεί να ασχολούμαστε σοβαρά με αυτά. Πιο συγκεκριμένα, με την ενημέρωση συνδυασμών ικανοτήτων και σετ αντικειμένων. Ο υπεύθυνος για τη διασφάλιση ποιότητας, Riot Afic, μας βοήθησε πάρα πολύ εδώ με τις γνώσεις του επιπέδου Diamond και, πλέον, τα ενημερωμένα bots χρησιμοποιούν πολλούς περισσότερους τρέχοντες συνδυασμούς ικανοτήτων και αγοράζουν καταλληλότερα αντικείμενα.

Σαν παράδειγμα, το bot Άνι χρησιμοποιεί πλέον το συνδυασμό Ταχυμεταφορά-εξουδετέρωση-Τίμπερς.

Πιο ανθρώπινα bots

Όπως είναι αναμενόμενο, τα bots που προσπαθούν να παρακολουθήσουν πολύ περισσότερες μεταβλητές καταναλώνουν αρκετά περισσότερη υπολογιστική ισχύ. Οι μηχανικοί της ομάδας μας, RiotAaronMike και RiotWooTang, έκαναν πολύ καλή δουλειά στην βελτιστοποίηση του κώδικά μας, ώστε να μπορούμε να παρουσιάσουμε την ενημέρωση χωρίς να επηρεαστεί ο φόρτος των σέρβερ.

Μια πολύ καλή ευκαιρία για να καταστήσουμε τα bots πιο αποτελεσματικά και πιο ρεαλιστικά ήταν να μειώσουμε κατά περίσταση τη συχνότητα με την οποία σαρώνουν το περιβάλλον για να αντιδράσουν. Τα αρχάρια bots κάνουν πλέον σάρωση περίπου στο ένα τρίτο της προηγούμενης συχνότητας, ενώ τα bots μεσαίου επιπέδου κάνουν σάρωση περίπου στο 50% με 100%, ανάλογα με το πόσο απειλούνται. Καμία από αυτές τις ρυθμίσεις δεν είναι αυτό που θα λέγαμε «αργή», αλλά δεν είναι τόσο γρήγορες όσο ήταν στο παρελθόν. Αυτό βοηθά, ώστε οι μη ρεαλιστικές υπεράνθρωπες αντιδράσεις των bots να μην είναι τόσο υπερβολικές.

Αυτές οι αλλαγές, καθώς και μια πληθώρα επιπλέον αφανών αλλαγών, δημιούργησαν τα νέα bots που πιστεύουμε ότι μοιάζουν περισσότερο με πραγματικούς παίκτες.

Φυσικά και δεν είναι Αδαμάντινου επιπέδου (πιθανόν ούτε καν Αργυρού), αλλά στην παρούσα φάση δεν ήταν αυτός ο σκοπός μας. Τα επόμενα βήματα είναι να βρούμε τρόπους να τροποποιήσουμε τα νέα bots και να διαμορφώσουμε μια καλύτερη εμπειρία παιχνιδιών παικτών εναντίον bots για τα πρώτα παιχνίδια των παικτών.

Έχετε το νου σας για περισσότερες πληροφορίες σχετικά με αυτό το έργο σύντομα!



 RoamingNumeral

Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου