Att göra AI Fun När det är bra, är det bra

Att göra bra artificiell intelligens för dator motståndare är svår. Programmering av ett spel som utkast är inte fruktansvärt utmanande; Att lägga över övertygande AI kan dock ta längre tid än att göra spelet själv. Men vad gör vi när vi gör detta AI? Är det viktigt att undersöka alla möjliga rörelser på tavlan, eller kan vi fuska och bara få det att flytta slumpmässigt? Vad behöver en AI göra, och (viktigast) hur kan vi se till att spelet är roligt?

Bra AI vs Fun AI

Termen "AI" är ett riktigt brett koncept, och typen av AI beror på spelet. Asymmetrisk spel, som Space Invaders, Mario, eller Tower Defense, tillåter spelaren att enkelt skära genom fiender av fiender. Eftersom "lag" (spelare vs allt annat) är obalanserade, tenderar dessa spel att använda dumma AI. Symmetrisk spel, som Starcraft, Street Fighter eller Civilization, förväntar sig att spelaren ska slå motståndare på lika villkor och kräver så mer komplicerat AI.

Space Invaders till vänster, Starcraft till höger. Spelaren kämpar med en utomjordisk horde i båda; i Starcraft tenderar de emellertid att slåss tillbaka.

Spel måste dock vara roligt, först och främst. Spelare njuter av en utmaning, inte att förlora upprepade gånger. Faktum är att vissa spel som Checkers har "lösts", vilket betyder att det är möjligt att bygga en AI som spelar ett oslagbart spel.

När mitt team och jag arbetade på vår dator / brädspel Infected, var vi tvungna att göra förstasidan AI avsiktligt hemsk för att inte skrämma spelare. Spelet AI var initialt ganska förenklat, och datorn skulle spela hyper aggressivt, med fokusering helt på high scoring-spel utan att tänka på försvar eller styrelse närvaro. 

Trots att AI var dålig fann vi att nya spelare skulle bli krossade och förlora intresse. Vi reviderade AI flera gånger, även om det fortfarande visade sig för mycket av en utmaning för spelarna. Så småningom tog vi helt enkelt bort AI, så spelet skulle bara göra ett slumpmässigt drag varje gång. Även om vissa spelare fortfarande lyckades förlora, denna massivt förbättrade spelarretentionen, så att vi kan återinföra "allvarliga" AI på högre nivåer.

Infekterad, ett spel ganska tungt baserat på ett Amiga-spel med samma namn.

Problemet med "för bra" AI kan ses i en mängd olika spel: FPS-spel med bots som har 360 graders vision, eller beat-'em-ups mot bots med perfekt reflexer. Att spela mot dessa AI: er lär inte faktiskt spelaren att spela spelet bra: det lär dem att "spela" botsarna, för att försöka hitta en fel i algoritmen som gör det lätt att döda.

Det här är inte att säga att allt AI ska vara fattigt, men snarare att bra AI är mångfacetterat. Det gör misstag, men försöker undvika att falla i samma förutsägbara mönster. Att ge AI förmågan att anpassa sig - och därmed för att ge variation i spel - kommer sannolikt att ge mycket mer underhållning till spelaren än en AI som spelar samma perfekt spel varje gång.

"Du är ingenting annat än ett paket med kort!" gråter Alice. Orealistiskt AI kan få oss att ringa något liknande: "Du är bara en massa kod!".

Gör dem mänskliga

Efter att ha smittat, lekte vi kort med en uppföljare, infekterad 2. Det var samma förutsättning, men i större skala, liknar det klassiska brädspelet Risk. Eftersom spelet var större var det viktigt att ha drastiskt förbättrat AI: något som kunde hålla spelaren underhållen under ett mycket längre spel och där flera AI kunde konkurrera mot varandra. 

Vi kopplade in den gamla AI, och det fanns flera problem med det. AI var förutsägbart, men det var något som kunde förbättras med lite arbete. Den större frågan handlade om AI: s allmänna inställning och hur den spelade. 

Det var tre huvudproblem:

  • För det första var det inte särskilt roligt att spela mot AI.
  • För det andra var det inte särskilt givande att slå AI.
  • För det tredje skulle AI "fuska" genom att avsiktligt kasta spelet.

Spelet var roligt mot andra spelare, men inte mot AI. Även om det fortfarande fanns samma utmaningsnivå var varför så stor skillnad mellan spelare mot AI och spelar mot en annan person om spelningen var densamma?

Vi kom ihåg att människor har en sak datorer inte: känslor.

En del av att spela ett spel blir emotionellt; vi älskar en spännande seger, vi hatar ett krossande nederlag. Vi älskar att gnugga våra segrar i våra vänners ansikten, och vi blir småliga och hämndiga när de förråder oss. Spel är inbördes kopplade till våra känslor, och det är något som en AI aldrig kan uppleva ... men det är något vi utvecklare kan efterlikna.

Vital Spark

Varför spelade inte AI-kulet? 

Eftersom den artificiella intelligensen var så uppenbar artificiell. Alla bots spelade på samma sätt; de hade alla samma tillvägagångssätt för spelet; De var alla lika förutsägbara i sina rörelsemönster.

Även i Pac-Man har de fyra spökena-Inky, Blinky, Pinky och Clyde-egna personligheter och rörelsemönster.

Vi behövde något för att få dem att sticka ut från varandra. Så vi introducerade personligheter: hänsynslös, defensiv, explorer. AI skulle ge en artificiell vikt till vissa strategier, och sedan flytta i dessa angreppsmönster.

Även i en grundläggande form var detta en enorm förbättring: inte längre var varje spel detsamma, men det tillade oförutsägbarhet mot fiendens rörelser och gjorde det svårare att formulera en enda "spelvinnande" strategi. Om AI: erna randomiserades när spelet startade, skulle spelaren inte kunna förutsäga hur spelet skulle utvecklas.

Personligheter på AI är inte en ny idé. Civilisationen ger personligheter till sina ledare (Gandhi älskar famously till nukefolk), Age of Mythology AIs bestämmer hur sannolikt de ska använda strategier som sköldpaddor eller rusar och orealistiska turneringsrobotar har favoritvapen.

Gandhi i civilisation 5: Undvik att anropa sin vrede.

Varför slog inte AI-belöningen?

Huvudproblemet var att AI spelade vad det såg som ett "bästa drag" varje runda. Det bedömde helt enkelt spelbrädet, utan hänsyn till diplomati. Om det skulle behöva attackera dig så skulle det göra det. Om du attackerade det tillbaka bröt det bara inte. Det såg spelet som ett matematiskt pussel som skulle lösas, snarare än ett spel mot komplexa mänskliga spelare. Att spela mot vår artificiella intelligens resulterade i ett konstgjort spel.

Vår lösning kom från ett Amiga-spel från 1989 som heter Nuclear War. I kärnkriget kämpade du mot olika världsledare och försökte neka sitt land från existens. Den som lyckades överleva skulle vinna. Även om det var förenligt, var det överraskande kul att se dina fiender fångas i personliga vendettor och kasta warheads på varandra.

Detta "vänner och fiender" system använde en mycket enkel metrisk: lycka. Varje världsledare hade en mängd ansiktsuttryck som gjorde det lätt att döma sin inställning till dig. Otroligt nog, nuking folk tenderade att göra dem olyckliga mycket snabbt. Dessutom kommer dina fiender inte bara att bli upprörd med dig, utan med varandra. Detta innebar att en enda farlig missil kunde eskalera till en fortsatt kamp mot döden.

Återigen har detta system använts i många spel, inklusive civilisation. En fiendens nation med en hög grad av "lycka" är mer benägna att förbli med dig och skicka dig gåvor, medan en fiende som hatar dig kan investera mycket resurser i att krossa dina städer.

Genom att lägga till en rudimentär glädjemätare i vårt spel fick vi vänskap och rivalisering att brygga. Ett spel är mer spännande när du utvecklar en nemesis, eller när team och allianser bildas. Plötsligt blev spelet personligt och handlingar kände sig som de hade vikt. Vi fann också att en synlig glädjemätare var viktig, annars skulle spelaren inte förstå vad som hände. Ett enkelt glatt ansiktsikon förmedlar omedelbart tanken att fiender kan bli "upprörd" och att titta på ansiktsförändringen vid vissa åtgärder gjorde det klart vilka konsekvenser dessa åtgärder hade.

Fångarens dilemma är ett välkänt spelteoriskoncept, och många programmerare har spenderat tid på att försöka bygga den ultimata boten för att tävla i det itererade fånge dilemma. Kärleksfullt var den vinnande strategin i många år också den enklaste: känd som tit-for-tat, det kopierade helt enkelt motståndarens drag.

Hur skulle AI fuska?

Problemet med Infected 2 var ofta att AI helt enkelt tittat på det kortsiktiga perspektivet. AI syftar till att maximera sin poäng varje gång: om det här innebar att man skulle göra en övergripande fattig rörelse, så skulle det ändå göra det.

Det enklaste sättet att föreställa sig det är detta scenario:

  • Alice, Bob och Carol spelar krig.
  • Alice har 100 soldater. Bob har 75 soldater. Carol har 150.
  • Varken Alice eller Bob kan slå Carol.
  • Alice och Bob kan dock slå Carol.

Problemet var att AI skulle göra vad som skulle göra det mest poäng. I det ovanstående scenariot menade det att Alice skulle attackera Bob: på kort sikt var ett utmärkt drag, men på lång sikt katastrofalt. Inte bara är Alice som gör ett drag som dömer sig själv, hon fördömer Bob till viss nederlag också. Bob är förståeligt upprörd.

Denna typ av situation är svår att undvika, eftersom den större bilden kräver en komplicerad resonemang utöver de flesta enkla AI. Vi försökte säkerställa "rättvisa" genom att göra spelare mindre benägna att bli attackerade om de förlorade eller om de hade attackerats nyligen. Medan inte varje spel kan applicera en enkel lösning är det viktigt att inse att spelare hatar att bli attackerade utan någon uppenbar anledning.

Medan Infected 2 aldrig gjorde det förbi alfascen, lärde den oss några värdefulla lektioner. Det viktigaste är att det inte räcker för att bara spela mot fiendens bots: du vill vara involverad i spelet, utveckla rivaliteter och krossa alla som står emot dig.

AI klar rätt

För många år sedan publicerades ett spel som verkade språng före konkurrensen. Även om ett multiplayer-spel genom design var botsna tillräckligt bra för att det skulle kunna avnjutas en spelare. Och trots dagens standard är det dåligt, den här orealistiska turneringen hade AI som blåste andra spel ut i vattnet.

Vi kan titta på en skärmdump i spelet för att se några av vad som gick till att göra en bot:

Bot 19, aka Tamerlane.

Färdighet var den viktigaste faktorn för att bestämma botbeteende: nybörjare bots var långsamma, var tvungna att stå still för att skjuta och var långsamma att vända sig om, medan bollarna på högre nivåer var snabbare, kunde undvika, hade ett större synfält och kunde använda avancerad vapenkombinationstekniker.

Bots kan sedan vidare modifieras med noggrannhet, alertness, camping och strafing nivåer. "Personlighet" skulle bestämmas av stridsstil och favoritvapen, bestämma huruvida bot tycktes komma nära och personligt, eller försök snipa på avstånd. Bots skulle också taunt spelaren och söka hämnd. Var och en av de 32 botsna kan anpassas individuellt, vilket innebär att du kan ha 32 olika personligheter. Vissa robotar, som Loque, blev berömda bland spelare.

Alla dessa faktorer bidrog till att skapa robotar som kände mer mänsklig. Medan spelet fortfarande skulle vara bra utan denna sofistikerade, lägger den till ett extra, nästan omärkligt lager av roligt.

Slutsats

I slutet av dagen måste du fråga: vad vill du ha från ditt AI? Får fienderna skyndsamt skynda spelaren och gå huvudet först i gropar eller försöker du utveckla något mer, något som ger en mer personlig nivå av interaktion med spelaren? Oavsett vad du bestämmer, kom ihåg tre huvudpunkter:

  • Om bots gör misstag, känner de sig mer mänskliga, och mindre som ett "kortpaket".
  • Om de medvetet gör spelningar baserade på individuell personlighet (eller känslor, som hämnd), är det mer sannolikt att oförutsägbar och spännande gameplay kommer fram.
  • Om bots försöker spela smart, snarare än kortsynt, är de mer benägna att göra spelet rättvist mot våra ögon.

referenser

  • Förhandsvisningsbild: Ghost av Andres Flores från Noun Project
  • Förhandsvisningsbild: Pacman av Andres Flores från Noun Project
  • Alice in Wonderland illustration: Av John Tenniel, i det offentliga området