3

あなたが与えられた場合:

  1. 優れたシャッフル アルゴリズム (ランダム性の優れたソースと、結果にバイアスをかける一般的な落とし穴の影響を受けないシャッフル方法)
  2. シャッフルされたデッキを取り、プレイ シーケンスによってWINNABLE(D)デッキが勝てる場合は True を返し、必然的に負けた場合は False を返す魔法の関数。D

次に、(1)で開始デッキの大規模なセットを生成し、次に(2)で勝てるセットにそれらをフィルタリングすることにより、「十分に分散された」勝てるソリティア取引のセットを生成することが可能になります。可能性をランダムに生成し、それらから選択するこの方法は、微妙な選択バイアスが結果に忍び寄るのを避けようとするとき、常に良い出発点です。

これに関する問題は、(2) が難しく (ゲームによっては NP 困難かもしれません)、その近似値でさえ計算コストが高いことです (iPad を使用している場合など)。ただし、勝利位置から開始し、ゲームを開始点に戻すためにランダムな「動きを止める」などの安価なアルゴリズムは、定量化または回避が非常に困難な特定のデッキ シャッフルに偏っている可能性があります。

このような勝てるゲームを生成する分野で興味深いアルゴリズムや研究はありますか?

4

2 に答える 2

-3

うーん、私はソリティアについてあまり知りませんが、これは私が問題に取り組む方法です. 私の疑似コードを参照してください。

//「カード」オブジェクトを作成したと仮定します。

Generate a List<Cards> deck;// A list populated with every card in deck that you can use in Solitaire with the number of each card you can use in Solitaire.
Generate a List<Cards> table;
while(deck.size()>0){//This is the real code.
     table.add(deck.remove((int)(Math.random()*deck.size())));
}
//And done. You know have a perfectly shuffled list of Cards in table.
//Now divide the list up however you want.

パート2はわかりません。

于 2013-09-17T23:59:32.533 に答える