Como você codificaria um mecanismo de IA para permitir a comunicação em qualquer linguagem de programação?


8

Eu desenvolvi um jogo de tabuleiro para dois jogadores no iPhone. Os jogadores de computador (AI) podem ser locais (no código do jogo) ou remotos em execução em um servidor. No segundo caso, o código do cliente e do servidor é codificado em Lua. No servidor, o código do AI real é separado do código do soquete TCP e do código da rotina (que gera uma instância separada do AI para cada cliente que está se conectando).

Quero poder isolar ainda mais o código de IA para que essa parte possa ser um módulo codificado por qualquer pessoa no idioma de sua escolha. Como posso fazer isso? Quais técnicas / tecnologias permitiriam a comunicação entre o código soquete / corotina Lua TCP e o módulo AI?


swig.org vem à mente ..
Jari Komppa

swig é c / c ++ para outros idiomas. Lua para outros idiomas precisa de uma rota diferente.
David Young

Respostas:


8

Um esquema de mensagens baseado em soquete pode ser usado para permitir que qualquer linguagem arbitrária interaja com a IA. Você pode usar mensagens binárias, xml, texto etc. Apenas defina claramente qual é o formato da mensagem e quais mensagens você enviará e receberá.

Essa técnica funciona relativamente bem para manipulação de comunicação leve a modesta. Existe uma penalidade de latência associada a ele, é claro, mas como o jogo é um estilo de jogo de tabuleiro, ele não precisa ser executado em tempo real.


Já estou usando soquetes para mover a AI do servidor da AI para o cliente iOS. Tudo está em Lua. Quero saber como uma rotina de IA, codificada em Python, por exemplo (no servidor) pode se comunicar com a rotina de soquete Lua (no servidor). Por exemplo, o Python AI envia sua movimentação para a rotina de soquete Lua, que então usa o soquete TCP para retransmitir a movimentação para o cliente iOS.
TokyoDan

Respondida abaixo, mas a comunicação socket a socket pode ser usada para se comunicar entre dois processos ou programas no mesmo computador. Da mesma maneira que dois programas se comunicando pela Internet. Exceto que você não precisa de toda essa manipulação de TCP / IP.
David Young

0

Para qualquer idioma X, você não pode saber qual recurso de interoperabilidade ele possui ou não - nenhum idioma deve fornecer nenhum recurso de interoperação. O mais confiável é o estilo C, pois é (quase certamente) o que seu sistema operacional usa, embora isso não signifique que o idioma o exponha.

Talvez o mais independente esteja usando um pipe nomeado fornecido pelo sistema operacional e enviando, digamos, mensagens XML. No entanto, esse é um pouco extremo - a maioria dos esquemas de encapsulamento não encapsulam a linguagem de autoria.


Os tubos são uma abordagem útil, especialmente se você deseja testar algo rápido e sujo. Embora não seja muito escalável e muito mais lento que a comunicação direta de soquete a soquete.
David Young

Talvez esteja faltando alguma coisa. Eu sou novo nisso. Eu pensei que soquetes eram usados ​​para obter informações de um computador para outro computador em algum lugar da rede. Os soquetes também podem ser usados ​​para comunicação entre dois programas / processos / corotinas em execução no mesmo computador?
TokyoDan

Sim! você está basicamente se comunicando através de um soquete de host local que na verdade não é roteado para fora da placa Ethernet. Com a comunicação por soquete, você pode estar conversando com outro programa no mesmo computador ou outro programa em um computador diferente. É tratado exatamente da mesma maneira.
David Young

Obrigado. Mesmo se isso for possível, a rotina não-Lua AI teria que codificar rotinas de comunicação de soquete. Eu quero me afastar disso. Eu só quero que o AI não Lua envie uma string como "Mover P1 para X Y" para o meu código de soquete Lua no servidor. O código do soquete Lua retransmitirá a sequência para o cliente iOS.
TokyoDan

Você pode tentar usar o Pipes diretamente então. Deixe que o servidor, Lua, gere um processo filho, que é seu programa não-Lua AI. Você pode se comunicar com o processo filho por meio dos canais In e Out. lua-users.org/wiki/ExtensionProposal
David Young
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.