ビットボードのマジックナンバーを見つける


9

私はC ++チェスエンジンを書いていて、スライドピースの動きを生成するためのリトルエンディアンランクファイルマッピングビットボードのマジックナンバーを探しています。

ライバルのチェスのウェブサイトはマジックナンバーを提供しますが、同じボードマッピングについては提供しません。

チェスプログラミングWikiは、これまでのところ最高のマジックナンバーのいくつかを提供していますが、完全ではありません。

最後に4つのことを探しています。

  • 各正方形の占有マスク
  • 各四角のマジックナンバー
  • 各正方形の魔法のシ​​フト
  • 各正方形のデータベース配列を移動します

したがって、次のコードを使用して、(たとえば)C3のルークの動きを見つけることができます。

bbBlockers = bbAllPieces & occupancyMaskRook[C3]

databaseIndex = (int)((bbBlockers * magicNumberRook[C3]) >> rookMagicShifts[C3])

bbMoveSquares = magicMovesRook[C3][databaseIndex] & ~bbFriendlyPieces

私はこの質問がより適切になり、programmers.stackexchange.comまたはstackoverflow.comで答えられると思います。
Pavan Nadig

1
あんまり。これはまだここで答えられます。ところで、プログラマーは高レベルの抽象化にもっと焦点を合わせています。stackoverflow.comのほうがよかったでしょう。
SmallChess

@PeteBecker正解です、私はそれを変更しました
Romain

回答:


6

これはチェスプログラミングでよく知られている問題です。Pradyumna Kannanによって生成された数値の使用を検討する必要があります。Kannan博士は、オープンソースのマジックナンバーを親切に作成してくれました。それはCraftyと私の所有するものを含む他のいくつかのチェスエンジンで使用されています。

グーグル「Crafty magic number」でもっと読むことができます。

こちらで zipファイルを用意しまし。これは、SmallChessチェスエンジンアプリで使用されているファイルと同じです。ドキュメントをお読みください。基本的に、あなたが呼び出す必要がありますRmagic(正方形、占有)ルックスとのためにBmagic(四角、占有)司教のために。それらをクイーンマスクにXORできます。


ありがとうございます。このコードをチェスエンジンで自由に使用/変更できますか?
ロメイン、

ライセンスの制限はありません。ご自由にお使いください。それをしたのは私ではなく、関南博士の貢献でした。それが役に立ったら私の答えを受け入れてください!
SmallChess

こんにちは、MagicMoves.zipファイルをGoogleDriveにアップロードできますか?smallchessではダウンロードできません(エラーが発生しました)。ありがとう。
123iamking

@ 123iamkingリンクはまだ機能しています。削除するつもりはありません。
SmallChess

@SmallChess-削除について質問しません。Googleドライブにミラーを提供できますか?ありがとう。
123iamking
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.