Entra

View Full Version : [Java] Creare una semplice IA


maro89
04-05-2011, 14:56
Salve,

per scopi puramente personali ho creato un semplice gioco di forza 4 in java e ora lo vorrei ampliare aggiungendoci una semplice IA per giocare anche in singolo ma non saprei da dove partire.

Ho abbastanza conoscenze di java ma pensare a come creare un IA che sembri un minimo intelligente non mi viene proprio se non creando un marea di if,else ecc :muro:

qualcuno mi può dare un consiglio :help: ?

Gin&&Tonic
04-05-2011, 16:17
secondo me tutti gli If/else che hai in testa li devi usare.

Io ancora non ho studiato "intelligenza artificiale" ma credo , e sottolineo credo, bisogni programmare l'intelligenza del programma come un normale metodo che risolvi qualcosa.

Magari crei un elenco di mosse , come se fossero degli automi , e per ogni automa dici al tuo programma cosa deve fare.

Questo è ciò che immagino.

isee
04-05-2011, 16:52
secondo me tutti gli If/else che hai in testa li devi usare.



si, in un gioco che possiede IA vengono scritti ,se non tutti, la maggior parte dei casi possibili che si possono verificare all'istante x (cioè nel tuo caso, alla mossa x). renditi conto che , ti faccio l'esempio degli scacchi, il numero di mosse possibili cresce in base a dove ti trovi sulla scacchiera, quanti pezzi hai, cosa puoi mangiare, cosa puoi far mangiare, quante mosse ti rimangono in previsione di un piano particolare (gli scacchi prevedono tattiche standard modificabili durante il gioco), ecc...
ovviamente a te è più facile. quindi , arrivato alla mossa x ti conviene switchare tra varie opportunità che saranno quelle che tu vorrai associare all'intelligenza artificiale. cioè, se vuoi che sia difensiva, fai difendere, ecc...

e-commerce84
04-05-2011, 17:05
Premetto che ho conoscienze molto molto ma moltooo didattiche di IA e che non ho mai fatto nulla in pratica...

Credo che il sistema standard per risolvere questo tipo di problemi sia l'algoritmo MinMax che è proprio un algoritmo usato nella teoria dei giochi in cui sono presenti solo 2 giocatori che giocano a turno (scacchi, tris, forza 4, etcetc)

In pratica da quello che ricordo l'algoritmo è come se si calcolasse l'intero albero delle possibili mosse dell'avversario e scegliesse sempre la migliore (qualcosa del genere, se leggi troverai sicuramente info più dettagliate ma ti devi buttare su quello).

I problemi sono 2:

1) Il primo è puramente pratico, finchè si parla del gioco del tris calcolare e memorizzare l'albero di tutte le possibili mosse è poca cosa...se si parla di una partita a scacchi o di altri giochi complessi l'albero diventa troppo grande...in pratica non hai memoria dove allocarlo o comunque ci vuole un fottio di tempo per calcolarlo tutto...quindi sostanzialmente in certi casi lo si calcola fino ad una certa profondità e poi ci si ferma (e questo è un bene, perchè un giocatore che gioca con l'algoritmo Min Max NON POTRà MAI PERDERE, AL PIù PUò PAREGGIARE QUALORA ANCHE L'AVVERSARIO USASSE LO STESSO ALGORITMO...il che renderebbe un tantinello fustrante il tuo gioco per un giocatore)

2) Se l'albero per il tuo gioco è interamente calcolabile o comunque anche calcolandolo fino ad una certa altezza accade che le possibilità di vincita per un giocatore umano sono infime, in genere in questi casi si inserisce che ad ogni mossa (o ad ogni tot mosse del giocatore virtuale) è possibile introdurre un errore (molto banalmente potresti fargli fare una mossa a caso o comunque una mossa non proprio a caso ma che non sia la migliore possibile), in modo da ampliare le possibilità di vittoria del giocatore umano

Spero di esserti stato utile in qualche modo...fammi sapere come va avanti

Ciao
Andrea

maro89
04-05-2011, 18:38
Grazie mille per i vostri commenti,

sicuramente proverò tutti e 2 i metodi e vi faro sapere!