問題タブ [bitboard]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
525 参照

clojure - ビットボードへのレイ攻撃

64ビットのロングビットボード表現のインデックスを指定して、レイアタックを計算しようとしています。

ルーク攻撃(ファイルまたはランクに沿ったストレート)は十分に簡単です。ただし、上記のコードの問題は、斜めのビショップ攻撃の可能性が次のようになることです。

ピースがボードの端から外れた場合、どのように説明すればよいですか?ビッグエンディアンマッピング(A8 = 0、H1 = 63)を使用しています。

0 投票する
1 に答える
768 参照

c++ - メンバー以外の開始関数と終了関数を使用して、範囲ベースの書き込みはできません

ビットボードを使用するコードを書いています。ビットボードのすべてのビットを反復することは非常に一般的なアクションであるため、いくつかの反復子クラスを作成し、c++0x の範囲ベースのループを使用することにしました。beginただし、g++ (バージョン 4.6.3) は、 orに一致する関数がないことを教えてくれますend

私のコード:

エラー:

ループを次の行に置き換えると、正常にfor (auto it=begin(num);it!=end(num);++it) std::cout<<*it<<std::endl; 動作します。

私の間違いは何ですか?

0 投票する
2 に答える
5546 参照

c# - チェス盤の表現-エンジン

私はC#で自分のチェスエンジンに取り組んでいます。実際、ムーブジェネレーターでバグを検索していますが、実際のチェスシステムが遅すぎることに気付きました(perft(6)では21分でも)。これが私のGithubリポジトリです

ピースの単純な階層と、ピースのリストを実装するボードクラスを使用しています。このプロジェクトのオブジェクト指向の性質のため、ボードを表すために多次元マトリックスを使用しないことを選択しました。これは、各ピースが内部に独自の位置を持っているためです。問題は、ボードからピースを取得するために、その位置を知っていると、O(n)が必要になることです。ここで、nは現在ボード上にあるピースの数です。

移動ジェネレーターでは、空のボードを想定してすべての可能な移動を取得し、静的クラスでそれらをチェックします(ピースはボードの状態を気にする必要がないため)。チェスプログラミングWikiを含むいくつかのサイトにアクセスしました。ボードの表現にはさまざまな種類があるのを見ましたが、実際の状態では、どれが最適か(パフォーマンスとシンプルさ)がわかりません。私はこれがすべてだと思います、私はあなたが私を助けてくれることを願っています:)

私のプロジェクトに関するアドバイスを歓迎します;)ありがとうございます。

これが私のボードクラスです:

0 投票する
2 に答える
14445 参照

c - ビットボードのビットが 1 つだけ 1 に設定されているかどうかをテストする

私はビットボードを持っていて、C で 1 に設定されたビットが 1 つしかないかどうかをチェックしたいと考えています。

関数を書くアイデアはありますint only_one_bit_set_to_one (bboard b)か?

0 投票する
2 に答える
1649 参照

php - ビット値を反復処理する方法は?

ビットボードシステムでチェス盤を作りたいです。12個のビットボードから始めて、テーブル(チェス盤)を表示したいのですが、ループ/反復中にピースを描画する必要があります。

すべてのビット値をループするにはどうすればよいですか?私は次のようなことを考えていました:for(i = 0; i <64; i ++)テーブルの描画/配列の構築/空の正方形の描画

これらは、ゲームを開始するための私の価値観です。

一部の人々は私に尋ねました:なぜビットボードアプローチ?回答:ビットボードについて

チェス、チェッカー、オセロなどのボードゲームでよく使用されるビットボードは、ビットセットデータ構造の特殊化であり、各ビットはゲームの位置または状態を表し、大量計算での速度やメモリまたはディスクの使用を最適化するように設計されています。同じビットボード内のビットは、ゲームのルールで相互に関連しており、一緒に使用するとゲームの位置を形成することがよくあります。他のビットボードは、位置に関するクエリを変換または回答するためのマスクとして一般的に使用されます。「ゲーム」は、情報が構造化された形式で密に詰め込まれ、個々のユニットまたはピースがどのように関連するかに影響を与える「ルール」を備えたゲームのようなシステムです。

0 投票する
9 に答える
2842 参照

c++ - 64ビットの数値から特定の行/列/対角線を「分離」します

OK、64ビットの数値を考えてみましょう。そのビットは8x8のテーブルを形成しています。

例えば

0 1 1 0 1 0 1 0 0 1 1 0 1 0 1 1 0 1 1 1 1 0 1 0 0 1 1 0 1 0 1 0 1 1 1 0 1 0 1 0 0 1 1 0 1 0 1 0 0 1 1 0 1 1 1 0 0 1 1 0 1 0 1 0

として書かれた

さて、たとえば列d00100000)(またはその問題の任意の行/対角線)などを分離したい場合はどうなりますか?

これはできますか?もしそうなら、どのように?


ヒント :

  • (a)ここでの私の主な目的は、最初は言及されていませんが、生の速度です。「検索」機能は1秒間に数百万回実行されているため、私は最速のアルゴリズムを探しています。

  • (b)これは私が意味するものに近づくものです:https ://www.chessprogramming.org/Kindergarten_Bitboards

0 投票する
4 に答える
1658 参照

java - 戦略ボードゲームAIの効率的なボード表現

ビットボードの表現は、64ポジション未満の唖然としたチェスのような戦略ゲームでも同じくらい効果的でしょうか、それとも、より単純な配列ベースのメールボックスの実装がより実用的でしょうか?

私たちの学校のAIクラスでは、教授がボードゲームを作成するコンテストが毎年開催されており、ゲームをプレイするAIを作成するために4週間の猶予があります。通常、駒は同様のルールを持つチェスの駒のサブセットであり、小さいボードで再生されます。つまり、8x5、7x7などです。チェスの一般的な64ビットと比較して、40ビットのみを使用する方法はまったくわかりません。

私の唯一の問題は、私がCまたはC ++にあまり精通しておらず、Javaでプログラムを実装する方が快適だということです。ビットボード表現を実装できるビット操作に対するJavaでの十分なサポートはありますか?これにより効率が向上する場合は、複雑さを追加する価値がありますか?学習曲線は急すぎますか?

私の計画は、時間に応じて、ABプルーニング、クイエッセンス検索、転置テーブル、キラームーブなどでNegamax検索を使用することです。このような短時間で競争力のあるAIを作成するための他のヒントはありますか?

0 投票する
1 に答える
293 参照

hex - チェスのビットボード人口

一部のビットボード チェス エンジンでは、駒のビットボードは次のように初期化されます。

これらの部分がそれぞれの16進数値を取得する方法を誰か説明してもらえますか?

0 投票する
2 に答える
398 参照

c - コネクト5ゲームでビットボード?

コネクト 5 ゲームでビットボードを使用できるかどうかを教えてください。コネクト 4 ゲームの例はたくさん見ましたが、ボードが 15x15 や 19x19 などの非常に大きい場合は何もありませんでした。ボードを 64 ビットで表現する方法がわかりません。

助けてくれてありがとう

0 投票する
1 に答える
1062 参照

move - 移動用のビットボード マスクの生成

チェスプログラミングでビットボード表現がどのように機能するかを理解しようとしていますが、詳細に関する有用な情報が見つかりません (または、正しく翻訳できません^^)。私の質問は、すべての部分ですべての位置に移動するためのマスクを自動的に生成する方法です。私は、各ピースタイプがこの位置から移動できるすべてのフィールドを定義しているマトリックスを想定しています(wP、bP、K、R、N、Bの配列[5] [64])。たとえば、Rook on position below の場合、許可される位置は次のとおりです。

各ピースタイプとステップできるすべてのタイルに対してこのようなものを作成する必要があると思いますが、配列に手動でハードコードする必要がありますか、またはこのプロセスを自動化し、プログラムの実行後に事前計算する可能性がありますか?