回答:
質問の編集に対処する にはランダムな順序でピースを受け取っていて、将来のピースに関する情報がない場合、ピースを配置する方法は、ピースに最小限のスコープを与えることです。たとえば、最初のターンにクイーンを受け取るとしたら、それを4つのコーナーの1つに配置します。さらにいくつかのルールは、騎士を互いに近づけ、ポーンを積み重ねることです。これらの戦略はすべて少し明白ですが、ピースの組み合わせが非常に多いため、一貫した戦略を使用することは困難です。
これはチェスの問題よりもプログラミングの問題のように思えますが、それでも興味深いです!少し考えた後、この問題に取り組む最善の方法は、騎士をベースラインとして使用することだと思います。ボードに収めることができる騎士の最大数は32であることはよく知られています(同じ色のすべての正方形に配置するだけです)。したがって、これを開始位置として持つことは、これが個々の作品。この戦略は、N x Nボードにも適用されます。
その後、ポーンを使用します。これは、ポーンの攻撃力が範囲内の1スクエアの前方対角線に限定されているためです。それらは他のすべての列を占めることができ(これは行ではなく、従来のルールに従えば2、4、6に制限されるため)、これによりNxNボードの占有された正方形がN / 4増えます。これは、占有された正方形の総数からN / 2 + N / 4、または単に3N / 4の占有された正方形に一般化されます。
これは約5分の検討結果であり、私のアルゴリズムに欠陥がある可能性があります。これがあなたの質問への回答に役立つことを願っています!
ピースをランダムに選択する場合の基本的な戦略は、可能な限り数平方を攻撃し、可能な限りいつでも妨害されていないランクやファイルを妨害しないようにボードに配置することだと思います。つまり、角にいる騎士、同じランクまたはファイルにあるキングとナイトのような短距離の移動ピース、および他のピースと同じランクまたはファイルにあるビショップ。一般に、新しいピースの正方形を選択する場合、それはキングハントに似ています。キングをピンで留めようとするとき、彼が安全に占めることができる正方形の数をできるだけ減らしたいです(減らすことなく)。ここでは、各ピースを配置して、まだどのピースからも攻撃されていない正方形の数をできるだけ少なくする必要があります。
問題の定義が最近更新されたため、空のNxNボードから始めて、ランダムなピースが与えられ、配置するように求められたと想定しています。完了すると、これ以上配置できなくなるまで、別のランダムなピースが与えられます。
以下のために人間の戦略、私は親指の良いルールは、新しい作品で拒否まだ開い正方形の数を最小限に抑える(有効)の位置を選ぶことであろうと思います。これには、高レベルで2つの主要なコンポーネントがあります。
プログラミング戦略については、問題をもう一度見直す必要があります。上で述べたように、私たちの成功は可能な限り最良の戦略を見つけることにかかっているため、これは実際にはプログラミングの問題ではありません(明らかに私たちは行っていません)。従来のプログラミングは、この意味では実際には役立ちません。問題のルールが、コンピュータがどのような要素が来るかについての完全な知識を否定しているからです。これにより、ブルートフォースまたはバックトラッキングの伝統的なアプローチ(通常、8 / N-クイーンズ問題を解決するために使用される)を採用することが不可能になります。
ただし、最適な戦略を模索するために、さまざまなAI手法を使用することができます。本質的に、これはある種のデータ構造で戦略を表す方法を見つけることに要約されます。これは実際には難しい部分であり、非常にトリッキーになる可能性があります。おそらく、「騎士がまだいない一番右の列を選択する」などのルールを許可する、ある種のドメイン固有の言語を作成する必要があります。次に、基本的に、ある種の最適化アルゴリズム(ランダム検索、遺伝的アルゴリズム、パーティクルスウォームなど)を選択して、これまでに見つかった他のすべてを打ち負かすような、特に優れたルールのセットを見つけます。それがひどく複雑で、どのようにそしてなぜそれがうまく機能するのかを理解することができないほどの可能性がありますが、私たちのものを打ち負かすかもしれません
2つの主なポイントは次のとおりです。
例として、私が騎士に対して行った簡単な調査を投稿します。すべてを同じ色に配置するだけで8x8ボードに32騎士を配置できることはすでにわかっているので、それは少しばかげています。配置する騎士の数を確認してください。
(ネクタイがある場合、ポイント#2がどの配置がより良いかを決定する方法に注意してください)
また、私が見つけた2つの便利なリンクは次のとおりです。