どのようなプログラミング言語で通信できるようにAIエンジンをどのようにコーディングしますか?


8

2人用のiPhoneボードゲームを開発しました。コンピュータプレーヤー(AI)は、ローカル(ゲームコード内)またはサーバー上でリモートで実行できます。2番目のケースでは、クライアントコードとサーバーコードの両方がLuaでコーディングされています。サーバーでは、実際のAIコードは、TCPソケットコードおよびコルーチンコード(接続しているクライアントごとにAIの個別のインスタンスを生成します)から分離されています。

AIコードをさらに分離して、その部分を選択した言語で誰でもコード化できるモジュールにしたいのです。これどうやってするの?Lua TCPソケット/コルーチンコードとAIモジュール間の通信を可能にする技術/テクノロジーは何ですか?


swig.orgは ...頭に浮かぶ
ヤリKomppa

swigは他の言語のc / c ++です。Luaから他の言語へは、別のルートが必要です。
David Young

回答:


8

ソケットベースのメッセージングスキームを使用して、任意の言語がAIと対話できるようにすることができます。バイナリベースのメッセージ、xml、テキストなどを使用できます。メッセージ形式とは何か、送受信するメッセージを明確に定義するだけです。

この手法は、軽度から中程度の通信処理に比較的適しています。もちろん、それに伴う待ち時間のペナルティはありますが、ゲームはボードゲームスタイルであるため、リアルタイムで実行する必要はありません。


すでにソケットを使用して、AIをAIサーバーからiOSクライアントに移動しています。すべてルアにあります。たとえば(サーバー上で)PythonでコーディングされたAIルーチンが(サーバー上で)Luaソケットルーチンと通信する方法を知りたいです。たとえば、Python AIは移動をLuaソケットルーチンに送信します。このルーチンは、TCPソケットを使用して移動をiOSクライアントに中継します。
TokyoDan 2016年

以下で回答しますが、ソケット間通信は、同じコンピューター上の2つのプロセスまたはプログラム間の通信に使用できます。インターネットを介して通信する2つのプログラムと同じ方法で。ただし、そのすべてのTCP / IP処理は必要ありません。
デビッドヤング

0

どの言語Xについても、相互運用機能の有無を知ることはできません。相互運用機能を提供する言語はありません。最も信頼できるのはCスタイルです。これは(ほぼ確実に)OSが使用しているものですが、これは言語が実際にそれを公開していることを意味するものではありません。

おそらく最も独立しているのは、OSが提供する名前付きパイプを使用して、XMLメッセージなどを送信することです。ただし、これは少し極端なカプセル化スキームであり、オーサリング言語のカプセル化には至っていません。


パイプは、何かをすばやく簡単にテストしたい場合に特に便利なアプローチです。ただし、スケーラビリティはそれほど高くなく、直接ソケット間通信よりもはるかに低速です。
デビッドヤング

多分私は何かが欠けています。私はこれが初めてです。あるコンピュータからネット上のどこか別のコンピュータに情報を取得するためにソケットが使用されていると思いました。ソケットは、同じコンピューター上で実行されている2つのプログラム/プロセス/コルーチン間の通信にも使用できますか?
TokyoDan 2016年

うん!基本的にlocalhostソケットを介して通信しており、実際にはイーサネットカードの外部にルーティングされません。ソケット通信を使用すると、同じコンピューター上の別のプログラムまたは別のコンピューター上の別のプログラムと通信することができます。まったく同じように処理されます。
デビッドヤング

ありがとう。これが可能であっても、非Lua AIルーチンはソケット通信ルーチンをコーディングする必要があります。これから逃げ出したいです。非Lua AIに「P1をX Yに移動」などの文字列をサーバーのLuaソケットコードに送信させたいだけです。Luaソケットコードは、文字列をiOSクライアントに中継します。
TokyoDan

その場合は、パイプを直接使用してみてください。サーバー側のLuaに、Lua以外のAIプログラムである子プロセスを生成させます。InおよびOutパイプを介して子プロセスと通信できます。 lua-users.org/wiki/ExtensionProposal
デビッドヤング
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.