私は、ソリティアゲームを可能な限り最高のスコアで解決するプログラムを設計しています。ゲームは次のポイントシステムで採点されます。
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つを解放するなどのトリッキーなことはできませんでした。私が見ることができることから、パスファインディングは機能しますが、その種の実装がどのように機能するかについては迷っています。