既知のキューを持つマッチゲームを最適化するアルゴリズム
Flowerzと呼ばれるゲームのソルバーをC#.NETで記述しようとしています。参考までに、MSNで再生できます。ここ:http : //zone.msn.com/gameplayer/gameplayer.aspx?game=flowerz。私は楽しみのためにそれを書いているのであり、どんな種類の割り当てや仕事に関連するもののためでもありません。このため、唯一の制限は私のコンピューター(8 GBのRAMを搭載したIntel i7コア)です。私に関する限り、他の場所で実行する必要はありません。 つまり、そのルールは次のようになります。 色とりどりの花でいっぱいの列があります。その長さは任意です キューは影響を受けません キューはレベルの開始時に生成されます 花は1つまたは2つの色を持っています。 2つの色がある場合、外側の色と内側の色があります。2色の場合、外側の色がマッチングに使用されます。 一致する場合、外側の色は消え、花は内側の花と同じ色の単一色の花になります。 ゲームの目標は、同じ色の3つ(またはそれ以上)のマッチを作成することです 単色の花がマッチの一部である場合、それは競技場から削除され、空のスペースが作成されます 単色の花と2色の花の外側の色を一致させることができます。この場合、単色の花は消え、2色の花の外側の色は消え、内側の色は残ります キューが空であるときは、ラウンドを獲得し、少なくとも1つの空のスペースが余っています カスケード一致が可能です。カスケードは、3つ(またはそれ以上)の外側の花が消え、その内側の色が3(またはそれ以上)の花の別のチェーンを形成するときです。 競技場は常に7x7です フィールドのいくつかのスペースは岩で覆われています あなたは岩の上に花を置くことはできません キューにはスペードを含めることもできます。スペードを使用して、配置した花を空いているスペースに移動できます。 スペードを使用する必要がありますが、実際には花を動かす必要はありません。花を元の場所から直接戻すことは完全に合法です。 キューには、色付きの蝶を含めることもできます。花にこの蝶を使うと、花は蝶の色になります 2つの色を持つ花に蝶を適用すると、花は1つの色、つまり蝶の色のみを取得します。 あなたは空のスペースやすでにこの色を持っている花に蝶を無駄にすることができます フィールドをクリアしてもゲームに勝つことはできません ソルバーの目標は単純です。できるだけ多くの余ったスペースをフィールドに残して、キューを空にする方法を見つけます。基本的に、AIがゲームをプレイします。ソルバーの出力は、見つかった移動のリストです。私はスコアには興味がありませんが、できるだけ長く生き残るために、可能な限り多くのオープンスペースを残す動きに興味があります。 言うまでもなく、キューが大きくなるほど検索スペースは急速に大きくなるため、ブルートフォースは問題外です。キューは15から始まり、2、3レベルごとに5ずつ増えます。そしてもちろん、最初の花を(0,0)に配置し、2番目の花を(0,1)に配置することは、特に最初の花を(1,0)に配置し、2番目の花を(0,0)に配置することとは異なります。フィールドには、以前のラウンドからの花がすでに生息しています。そのような単純な決定は、それを作るかどうかの違いを作ることができます。 私が持っている質問は次のとおりです。 これはどのような問題ですか?(巡回セールスマン、ナップザック、またはその他の組み合わせの問題を考えてください)。これを知っていると、私のGoogle風味が少し良くなる可能性があります。 どのようなアルゴリズムで良い結果をすばやく得ることができますか? 後者について:最初に、独自のヒューリスティックアルゴリズムを記述しようとしました(基本的に:キューを知っている場合、どうすれば解決できますか?)。 私は遺伝的アルゴリズムを使用することを考えていました(少なくともそれを使用する方法を知っているため...)が、ボードのバイナリ表現を決定する際にいくつかの問題があります。次に、クロスオーバーの問題がありますが、これは、順序付けされたクロスオーバー演算子または同様のタイプの操作で解決できます。 私の推測では、ソルバーは常にボード構成とそれが空にしようとしているキューを知っている必要があります。 ニューラルネットワークやファジーロジックシステムなどの他のヒューリスティックアルゴリズムをいくつか知っていますが、どれが最も適切であるか、または当面のタスクにより適した他のものがあるかどうかを知る経験がありません。