Quali comportamenti dovrebbero adottare per creare un combattente di intelligenza artificiale "non perfetto"?


19

Quando si crea un combattente PNC, è facile capire cosa fare per ottenere una macchina della morte robotizzata ottimizzando tattiche di combattimento, tempistiche e tipi di attacco, ma più difficile (e più interessante in una lotta) ottenere un nemico idiosincratico e imprevedibile. Quali comportamenti (algoritmi?) Sono utili per creare un nemico più organico e non convenzionale?

Modifica: il mio caso d'uso specifico è con nemici simili a MMO, ad esempio World of Warcraft, anche se con meno grafica. Nota che ciò significa nemici sia umani che disumani (animali, mostri, ecc.)

Risposte:


14

C'è un articolo molto interessante sull'argomento Gamasutra: errori intelligenti: come incorporare la stupidità nel tuo codice AI , di Mick West.

Questo articolo parla di un gioco di biliardo AI. Quando si implementa una tale intelligenza artificiale, è abbastanza facile farne una palla ad ogni tiro. Un modo semplicistico per rendere l'IA meno "intelligente" è, come suggerito in altre risposte, aggiungere un fattore casuale al calcolo, facendo perdere l'IA di più.

Ma ci sono due principali difetti con un simile approccio. Innanzitutto, è imprevedibile. Per un giocatore che gioca in modalità "Facile", è inaccettabile che l'IA diventi "fortunata". E se il tuo fattore casuale rende l'IA un tiro ancora migliore, colpendo una palla più preziosa o facendo una combo? Non sai cosa succederà, ed essere fortunato non dovrebbe essere un'opzione per l'IA in una modalità facile.

L'altro difetto è che il giocatore proverà a identificare un modello nei comportamenti dell'IA. E con un semplice fattore casuale, non esiste alcun modello. Ma ciò non significa che il giocatore non vedrà alcun pattern, anzi il contrario, in realtà. Non appena l'IA diventa fortunata, il giocatore vedrà una strategia nel suo comportamento. Nell'articolo, i giocatori si lamentano dell'IA che gioca una strategia di posizione. Quando c'è solo un fattore casuale nella precisione angolare .

Dal mio punto di vista, dopo aver letto questo articolo che apre gli occhi, un'intelligenza artificiale non perfetta non dovrebbe mai usare la randomizzazione come fattore di semplificazione. È esattamente il contrario. Un'intelligenza artificiale più semplice dovrebbe essere più intelligente, ma cercando di aiutare il giocatore.

Nell'esempio del gioco Pool, l'opzione migliore per implementare un'intelligenza artificiale in "modalità facile" era in realtà quella di rimuovere tutti i fattori casuali e di aggiungere una strategia di posizionamento. L'intelligenza artificiale proverebbe a colpire le palle per preparare un tiro facile e fantastico per il giocatore .

In questo modo, il giocatore penserà di essere stato fortunato. Ed è quello che ti aspetti da un gioco quando giochi facilmente.


1
Sarebbe anche utile per l'IA ricordare ciò di cui il giocatore è in grado di trarre vantaggio. Gli sviluppatori possono pensare che abbia un "piatto facile" ma se non riesce a piatto, la tattica del caso dovrebbe essere meno utilizzata dall'intelligenza artificiale. È anche utile, perché puoi allenare il giocatore, ricordare cosa non può fare e sfruttarlo di proposito ogni tanto fino a quando può, in questo modo il giocatore non è né annoiato, né frustrato.
Jonathan Connell,

Anche se sono d'accordo con il non usare la randomizzazione, non sono d'accordo con "aiutare il giocatore": sarebbe come imbrogliare, solo molto peggio perché mentiresti al giocatore.
o0 '.

@ Lo'oris: beh, non lo vedo come una bugia. Quando i giocatori dicono al gioco di andare piano con lui, si aspetta che il gioco sia gentile. Quando stai giocando a un gioco in cui sei davvero bravo con un amico che lo sta scoprendo, sento che va bene dargli delle opportunità. Rende il gioco più divertente per tutti.
Tyn,

1
C'è un buon post sul blog di Shawn Hargreaves sulla randomizzazione e la capacità per un essere umano di individuare i modelli nella casualità. Ciò tradurrebbe tonnellate, in questo caso, un giocatore che giudica erroneamente le tattiche di un giocatore di AI.
Jonathan Connell,

1
In realtà penso che la randomizzazione sull'accuratezza sia una buona strada da percorrere. Con un vero giocatore che non è eccezionale, a volte commette un errore e colpisce una palla migliore.
AttackingHobo

10

Il concetto chiave è quello di evitare di fornire all'NPC una "conoscenza perfetta".

  • Margine di errore casuale su eventuali decisioni o azioni che comportano un calcolo. ovvio esempio di mira (es. cecchini stormtrooper). Se non ti colpiscono sempre, è più realistico.
  • Line of Sight ... se non possono vederti, può creare un gioco interessante di gatto e topo.
  • Le tattiche di squadra, a seconda del tipo di gioco, i nemici che si adattano alla situazione possono essere molto più interessanti. Ad esempio, se ti sparano, non ti caricheresti alla cieca, ti copriresti fino a quando il fuoco in arrivo cessa. O forse ti sentiresti più a tuo agio se avessi compagni di squadra nelle vicinanze ... puoi simulare quei comportamenti per far sì che gli NPC si comportino come se fossero vivi.

Sono sicuro che ci saranno molti altri esempi che potrebbero essere dati, forse potresti parlarci del tuo gioco e possiamo ottenere più specifici :-)


4

Un modo rapido per rendere combattibile un'intelligenza artificiale perfetta consiste nel prendere decisioni non perfette aggiungendo un po 'di "rumore" ai suoi ingressi o alle sue uscite. Per rumore intendo alcuni fattori casuali.

Ecco un piccolo esempio per l'output:

  • L'algoritmo perfetto produce tre possibili azioni classificate con un punteggio.
  • Aggiungi un valore casuale a ciascun punteggio.
  • Scegli il miglior punteggio.

Ecco alcune idee per l'input:

  • Se le azioni si basano sulla salute dell'avversario, aggiungi un fattore casuale (diciamo +/- 10 per una barra della salute 0-100) allo stato percepito dall'intelligenza artificiale.
  • Lo stesso vale per la valutazione delle azioni, se l'IA sa che alcuni attacchi sono più forti di altri, aggiungi / sottrai casualmente alcuni valori lì.

Una cosa ovvia da prendere in considerazione è la velocità dell'IA. Nella maggior parte dei giochi, gli AI possono reagire MOLTO più velocemente degli umani (specialmente nei combattimenti) e fare un apparente multitasking (molto visibile nei giochi RTS). Quindi devi agire su questo, mantenendo l'IA un po 'lento (forse adattivamente) e limitando la quantità di cose che può fare in un determinato intervallo di tempo (cioè un'azione ogni mezzo secondo).

Spero che questo aiuti e buona fortuna!


3

È difficile dare una risposta direttamente utile senza sapere esattamente cosa stai cercando di fare.

Ho due cose da dire sull'argomento che potrebbero aiutarti.

La prima cosa (e questa è di gran lunga la più importante), se stai cercando di far sentire il nemico più interessante e umano, le tue tattiche di combattimento sono irrilevanti. Il trucco per far credere ai giocatori che un nemico è vivo è usare l'animazione, i suoni e piccoli dettagli per implicare il comportamento umano. L'intelligenza artificiale perfetta potrebbe camminare dietro un angolo, vedere un giocatore e sparare. Un'intelligenza artificiale umana potrebbe camminare dietro un angolo, vedere un giocatore, avere uno sguardo sorpreso sulla sua faccia, gridare in allarme e sparare. Il primo sembra robot. Il secondo sembra umano. Entrambi utilizzano l'IA identica in tutti i modi, ad eccezione dell'inserimento dell'animazione appena prima delle riprese (o, per mantenere lo stesso comportamento tattico, durante le riprese).

In secondo luogo, evitare la randomizzazione. I giocatori non lo apprezzano tanto quanto i designer vogliono pensare che lo faranno. I giocatori non vedono "il computer ha generato un 1 su 100, seguito da un 5, 3 e 4, quindi i fattori di errore per gli ultimi quattro colpi sono stati solo dell'1%, 5%, 3% e 4%, e questo è perché sei morto in mezzo secondo in questo round. " I giocatori vedono solo i nemici che a volte mancano selvaggiamente e altre volte li inchiodano ripetutamente per nessuna ragione riconoscibile, il che è incredibilmente frustrante. Una buona progettazione del gioco riguarda principalmente la costruzione di schemi che i giocatori umani possono fareosservare, apprendere e battere e realizzare il successo del giocatore in base al proprio giudizio, alle proprie capacità e intuizione piuttosto che al fatto che il giocatore abbia avuto fortuna. L'impulso di randomizzare deriva dall'esperienza con giochi da tavolo e giochi d'azzardo, entrambi i quali sono mezzi incredibilmente diversi dai videogiochi (e ciò che funziona in un mezzo spesso non ha senso in un altro).


1

Ricordo che al nostro corso di AI al college c'era un argomento su come rendere l'IA più "umana" e meno perfetta. È stato molti anni fa, quindi ricordo solo alcuni punti elenco nella parte superiore della mia mente.

  • Usa "librerie di mosse". Se stai combattendo un orco, digli di dire 3 routine di combattimento che ripetono di tanto in tanto. Questo rende i combattimenti più facili essendo più prevedibili, il che sembra essere l'opposto di quello che vuoi, ma rende l'IA meno "macchina perfetta" e più "noob ripetendo la stessa mossa più volte".
  • Sottoottimizzare, se possibile. Se, come dici tu, la tua IA si basa sul calcolo della mossa migliore, metti un limite artificiale a questo calcolo. Rendi la ricerca più superficiale o limita il numero di passaggi. Invece della mossa migliore di sempre, l'IA sceglierà semplicemente una buona mossa. Questo può aggiungere molta varietà al comportamento dei tuoi nemici, poiché ci sono molte più mosse buone che migliori.
  • Fai degli errori apposta. Invece della mossa migliore, scegli la seconda o la terza migliore. O anche scegliere una mossa che ha una cattiva utilità. Questo può riguardare il tuo punto "imprevedibilità".

Naturalmente questi sono solo consigli generali che dovrebbero essere studiati e testati per ogni caso, e possono davvero rendere la tua intelligenza artificiale ancora più artificiale del previsto. Comunque penso che siano un buon punto di partenza.


0

Ho appena visto questo pop-up e volevo condividere un'idea che ho usato in passato.

Diciamo che il personaggio ha tre mosse e ognuna ha un punteggio, il punteggio più alto è una mossa migliore. (Altre risposte parlano di aggiungere rumore alla creazione di questo punteggio.)

  • Attacco con una spada (30 punti)
  • Incantesimo di fuoco (50 punti)
  • Incantesimo di ghiaccio (20 punti)

Sommare i punti totali (100)

Prendi la stat di intelligenza del personaggio dal valore massimo possibile per questa stat (diciamo 60 su 100).

Genera un numero casuale tra 0 (o qualche altro piano) e il rapporto di intelligenza (0.6), moltiplicalo per i punti totali (100). Nel nostro esempio, supponiamo che il risultato sia 45.

Ora inizi a sottrarre le mosse sbagliate da questo valore fino a quando non premi zero. (Sottrai in ordine.)

Innanzitutto, consideriamo l'incantesimo di ghiaccio, che ha segnato un 20. 45 - 20 = 25. Questo è sopra lo zero, quindi lanciamo l'incantesimo di ghiaccio.

Secondo, guarda l'Attacco con una spada, del valore di 30 punti. 25-30 = -5. Abbiamo raggiunto la nostra soglia, quindi scegliamo l'attacco con un'azione con la spada.

In questo sistema, un personaggio con scarsa intelligenza non sceglierà la mossa migliore. E un personaggio con alta intelligenza sceglierà spesso la mossa migliore. (In questo esempio, un personaggio con un'intelligenza perfetta sceglie la mossa migliore il 50% delle volte.)

L'aggiunta di un meccanismo di base al numero casuale aumenterà la possibilità di selezionare mosse migliori.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.