Come codificheresti un motore AI per consentire la comunicazione in qualsiasi linguaggio di programmazione?


8

Ho sviluppato un gioco da tavolo per iPhone per due giocatori. I giocatori di computer (AI) possono essere locali (nel codice di gioco) o remoti in esecuzione su un server. Nel secondo caso, sia il codice client che quello server sono codificati in Lua. Sul server l'attuale codice AI è separato dal codice socket TCP e dal codice coroutine (che genera un'istanza separata di AI per ciascun client di connessione).

Voglio essere in grado di isolare ulteriormente il codice AI in modo che quella parte possa essere un modulo codificato da chiunque nella loro lingua preferita. Come posso fare questo? Quali tecniche / tecnologie consentirebbero la comunicazione tra il socket Lua TCP / codice coroutine e il modulo AI?


swig.org mi viene in mente ..
Jari Komppa,

swig è c / c ++ in altre lingue. Lua per altre lingue ha bisogno di un percorso diverso.
David Young,

Risposte:


8

È possibile utilizzare uno schema di messaggistica basato su socket per consentire a qualsiasi linguaggio arbitrario di interagire con l'IA. Puoi usare messaggi binari, xml, testo, ecc. Definisci chiaramente qual è il formato del messaggio e quali messaggi invierai e riceverai.

Questa tecnica funziona relativamente bene per la gestione della comunicazione da leggera a modesta. Ovviamente è associata una penalità di latenza, ma poiché il tuo gioco è uno stile di gioco da tavolo non deve essere eseguito in tempo reale.


Sto già utilizzando socket per ottenere il passaggio dell'IA dal server AI al client iOS. Tutto è a Lua. Voglio sapere come una routine AI, codificata in Python, ad esempio (sul server) potrebbe comunicare con la routine socket Lua (sul server). Ad esempio, l'IA di Python invia il suo spostamento alla routine del socket Lua che quindi utilizza il socket TCP per inoltrare lo spostamento al client iOS.
Tokyo,

Di seguito è possibile rispondere, ma la comunicazione da socket a socket può essere utilizzata per comunicare tra due processi o programmi sullo stesso computer. Come due programmi che comunicano su Internet. Solo che non hai bisogno di tutta quella gestione TCP / IP.
David Young,

0

Per qualsiasi lingua X, non puoi sapere quale funzione di interoperabilità ha o non ha - nessuna lingua dovrebbe fornire alcuna funzionalità di interoperabilità. Il più affidabile è in stile C, poiché è (quasi certamente) ciò che il tuo sistema operativo utilizza, anche se questo non significa che il linguaggio lo esponga effettivamente.

Forse il più indipendente sarebbe usare una pipa denominata fornita dal sistema operativo e inviare tramite diciamo messaggi XML. Tuttavia, questo è un po 'estremo: la maggior parte degli schemi di incapsulamento smette di incapsulare il linguaggio di creazione.


I tubi sono un approccio utile soprattutto se vuoi qualcosa da testare in modo rapido e sporco. Tuttavia, non è molto scalabile e molto più lento della comunicazione diretta da socket a socket.
David Young,

Forse mi manca qualcosa. Sono nuovo di questo. Pensavo che le prese fossero usate per ottenere informazioni da un computer a un altro computer da qualche parte in rete. I socket possono essere utilizzati anche per la comunicazione tra due programmi / processi / coroutine in esecuzione sullo stesso computer?
Tokyo,

Sì! stai fondamentalmente comunicando tramite un socket localhost che in realtà non instrada al di fuori della scheda Ethernet. Con la comunicazione socket potresti parlare con un altro programma sullo stesso computer o un altro programma su un altro computer. È gestito esattamente lo stesso.
David Young,

Grazie. Anche se ciò è possibile, la routine AI non Lua dovrebbe codificare le routine di comunicazione dei socket. Voglio allontanarmi da questo. Voglio solo che l'intelligenza artificiale non Lua invii una stringa come "Sposta P1 su X Y" sul mio codice socket Lua sul server. Il codice socket Lua inoltrerà la stringa al client iOS.
Tokyo,

Allora potresti provare a usare direttamente Pipes. Lascia che Lua lato server generi un processo figlio che è il tuo programma AI non Lua. È possibile comunicare con il processo figlio tramite le relative pipe In e Out. lua-users.org/wiki/ExtensionProposal
David Young
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.