正確に何を尋ねようとしているのかわかりません。初期状態と最終状態といくつかのルールを簡単に取り、そこに到達するためのパス/選択肢を決定できるコードを作成できるようにしたいと考えています。
たとえば、スタークラフトのようなゲームを考えてみてください。工場を建設するには、兵舎と司令センターがすでに建設されている必要があります。もし何も持っていなくて工場が欲しいなら、「司令センター」→「兵舎」→「工場」と言うかもしれません。それぞれのことには時間とリソースが必要であり、パスで注意して考慮する必要があります。工場を 5 分にしたい場合は、10 分にしたい場合よりも選択肢が少なくなります。
また、エンジンは利用可能なリソースを計算し、それらを効果的に利用できる必要があります。これらの 3 つの建物には、合計で 600 のミネラルが必要になる可能性がありますが、エンジンは、200 になるときにコマンド センターを計画する必要があります (またはコストがかかります)。
これは最終的に、10 海兵 @ 5 分、歩兵の武器のアップグレードは 6:30、30 海兵は 10 分、工場 @ 11 などと同様の要件になります。
では、このようなことをするにはどうすればよいでしょうか。私が最初に考えたのは、何らかの手続き型言語を使用して、すべての決定をゼロから行うことでした。システムと分岐をシミュレートし、さまざまな選択を行うことができました。最終的に、いくつかの選択はすぐに目標を達成することを不可能にします (もし私が 20 の補給所を建設したとしても、その工場を時間通りに作れない可能性があります.)
それでは、関数型言語はこのために設計されたものではないと思いましたか? プロローグを書こうとしましたが、時間や距離の計算などに問題がありました。そして、「計画」を返す最良の方法がわかりません。
私は書くことができると思っていました:
depends_on(factory, barracks)
depends_on(barracks, command_center)
builds_from(marine, barracks)
build_time(command_center, 60)
build_time(barracks, 45)
build_time(factory, 30)
minerals(command_center, 400)
...
build(X) :-
depends_on(X, Y),
build_time(X, T),
minerals(X, M),
...
ここで私は混乱します。この関数とクエリを構築して、必要なものに近いものを取得する方法がわかりません。建設中に鉱物が収集される速度や、追加の金で他の可能な経路をどうにかして説明する必要があります. 10 分間に 1 人の海兵隊員だけが必要な場合は、10 分で 1 人の海兵隊員で終了する方法がたくさんあるため、エンジンに多くの計画を生成してもらいたいと思います (あまりにも多くの後にそれをカットするかもしれません。プロローグでそれをどのように行うかわかりません)。 )。
この道を進む方法についてのアドバイス、または他のオプションについてのアドバイスを探しています。ハノイの塔や AI の祖先の例よりも役立つものを見つけることができなかったので、プロローグを使用して実際のことを行う方法を説明するいくつかの優れた記事でさえ素晴らしいでしょう. そして、どうにかしてこれらのルールを便利な方法で設定できる場合、ハノイのすべての塔の例のように標準出力に書き込む以外に、プロローグが思いついた(クエリを解決する方法)「計画」を取得する方法はありますか?それともそれが好ましい方法ですか?
私の他の質問は、私のメイン コードは ruby (および潜在的に他の言語) であり、prolog と通信するためのオプションは、ruby 内から私の prolog プログラムを呼び出すこと、prolog 内から仮想ファイル システムにアクセスすること、またはある種のデータベース構造 (可能性は低い) です。 )。私は SWI-Prolog atm を使用しています。これを Ruby で手続き的に行う方がよいでしょうか、それとも prolog や haskall のような関数型言語でこれを構築する方が、統合に余分な労力をかける価値があるでしょうか?
これが不明確な場合は申し訳ありません。お役に立てれば幸いです。不明確な点については、もう一度言い直します。