0

私は、ソリティアゲームを可能な限り最高のスコアで解決するプログラムを設計しています。ゲームは次のポイントシステムで採点されます。

10 points for moving Aces to top
9 points for moving 2s to top
8 points for moving 3s to top
7 points for moving 4s to top
6 points for moving 5s to top
5 points for moving 6s to top
4 points for moving 7s to top
3 points for moving 8s to top
2 points for moving 9s to top
1 points for moving 10s or face-cards to top
2 points for freeing a "downcard" (face-down card on the table)
2 points for moving a card from the deck to the table
-2 points deducted for moving a card from the top to the table
-20 points deducted for flipping over the deck
Putting a card back to the top after moving it from the top to the table does not give double points.

デッキからのカードは一度に1枚ずつ裏返され、プレイヤーはデッキを無制限に裏返すことができます(ただし、-20ポイントの控除は引き続き適用されます)。

Windowsソリティアゲーム用のクロンダイク戦略ガイドのようなさまざまな戦略ガイドを見つけましたが、これらのガイドは、テーブルカードが知られていない実際のソリティアゲーム用です。

私は、デッキが配られる前にデッキの知識を持っている、私が「フェイスアップ」ソリティアゲームと呼んでいるものを解決するためのアルゴリズムを作成しようとしています。編集:以下の回答で与えられた論文から、このゲームは「思慮深いソリティア」と呼ばれているようです。

これまでのところ、私の考えは次のとおりです。すべての可能な動きが試されてスコアリングされる、ある種のブルートフォーシング。各列を個別に調べて、可能な限り「最良の」移動を試みる単純なアルゴリズム。そして最後に、パスファインディングに似たある種のアルゴリズムで、各動きがスコアリングされ、最適な「パス」が検出されます。

ブルートフォーシングの問題は、移動を無限に繰り返すことができるため、(文字通り)永遠にかかることです。単純なアルゴリズムでは、2つの列を再配置して、すべてのハートとクラブ(たとえば)を配置して、1つのハートの8つを解放するなどのトリッキーなことはできませんでした。私が見ることができることから、パスファインディングは機能しますが、その種の実装がどのように機能するかについては迷っています。

4

2 に答える 2

4

次の論文が参考になるかもしれません (これは研究チームによって既に行われているようです)。

ソリティアをリアルタイムで検索:

ソリティア: マン vs. マシン

于 2011-01-31T00:42:30.430 に答える
1

最初に試すのは単純な固定ステップ ルックアヘッド アルゴリズムです。このアルゴリズムでは、各ステップで可能なすべてのステップを分析し、n総合スコアが最も高いアルゴリズムを選択します。

同じ一連の疑似乱数パックで のさまざまな値をn試して、それを増やすことでスコアがどのように向上するか (もしあったとしても) を確認してください。

これが妥当な結果をもたらす場合、次のステップは、評価プロセスで使用できる特定の位置にポイントを割り当てることです。(たとえば、「ダウンカード」エースのパイルの一番上からの距離を差し引くことができます。)

次のステップは、最初に一定数のステップを先読みしてから、ムーブ ツリーの有望なリーフのみをさらに展開する、適応探索です。(基本は剪定です。)

などなど、いろいろやってみると楽しそうなので楽しんでください。

しかし、他のすべてが失敗した場合は、コーディング コンテストを開催してください。:)

于 2011-01-31T00:42:53.007 に答える