Bitboard

Ein bitboard ist eine Datenstruktur, die allgemein in Computersystemen dieses Spiel Brettspiele verwendet ist.

Ein bitboard, der häufig für boardgames wie Schach, Kontrolleure und othello verwendet ist, ist eine Spezialisierung der bitset Datenstruktur, wo jedes Bit eine Spielposition oder Staat vertritt, der für die Optimierung der Geschwindigkeit und/oder des Gedächtnisses oder des Plattengebrauches in Massenberechnungen entworfen ist. Bit in demselben bitboard beziehen sich auf einander in den Regeln des Spiels, das häufig eine Spielposition, wenn genommen, zusammen bildet. Andere bitboards werden als Masken allgemein verwendet, um Abfragen nach Positionen umzugestalten oder auf sie zu antworten. Das "Spiel" kann jedes spielähnliche System sein, wo Information in einer strukturierten Form mit "Regeln" dicht gepackt ist, die betreffen, wie sich die individuellen Einheiten oder Stücke beziehen.

Kurze Beschreibung

Bitboards werden in vielen der besten Schachspielen-Programme in der Welt verwendet. Sie helfen den Programmen, Schachpositionen mit wenigen Zentraleinheitsinstruktionen zu analysieren und eine massive Zahl von Positionen im Gedächtnis effizient zu halten.

Bitboards sind interessant, weil sie dem Computer erlauben, auf einige Fragen über den Spielstaat mit einer logischer Operation zu antworten. Zum Beispiel, wenn ein Schachprogramm wissen will, ob der weiße Spieler irgendwelche Pfänder im Zentrum des Ausschusses hat (Zentrum vier Quadrate), kann es gerade einen bitboard für die Pfänder des Spielers mit einem für das Zentrum des Ausschusses vergleichen, der einen logischen UND Operation verwendet. Wenn es keine Zentrum-Pfänder dann gibt, wird das Ergebnis Null sein.

Anfragenergebnisse können auch mit bitboards vertreten werden. Zum Beispiel, die Abfrage "Wie sind die Quadrate zwischen X und Y?" kann als ein bitboard vertreten werden. Diese Anfragenergebnisse werden allgemein vorberechnet, so dass ein Programm einfach ein Anfragenergebnis mit einer Speicherlast wiederbekommen kann.

Jedoch, infolge der massiven Kompression und Verschlüsselung, bitboard Programme sind für Softwareentwickler nicht leicht, entweder zu schreiben oder die Fehler zu beseitigen.

Geschichte

Die bitboard Methode, für ein Brettspiel zu halten, scheint, Mitte der 1950er Jahre von Arthur Samuel erfunden worden zu sein, und wurde in seinem Kontrolleur-Programm verwendet. Die Methode wurde 1959 als "Einige Studien im Maschinenlernen mit dem Spiel von Kontrolleuren" in IBM Journal der Forschung und Entwicklung veröffentlicht.

Für das mehr komplizierte Spiel des Schachs scheint es, dass die Methode später von der Mannschaft von Kaissa in der Sowjetunion gegen Ende der 1960er Jahre unabhängig wieder entdeckt wurde, obwohl nicht öffentlich dokumentiert, und wieder durch die Autoren des amerikanischen Nordwestlichen Universitätsprogramms "Schach" am Anfang der 1970er Jahre, und 1977 in der "Schachsachkenntnis im Mann und der Maschine" dokumentiert hat.

Beschreibung für alle Spiele oder Anwendungen

Bitboard- oder Bit-Feld ist ein Format, das eine ganze Gruppe von zusammenhängenden boolean Variablen in dieselbe ganze Zahl voll stopft, normalerweise Positionen auf einem Brettspiel vertretend. Jedes Bit ist eine Position, und wenn das Bit positiv ist, ist ein Eigentum dieser Position wahr. Im Schach, zum Beispiel, würde es einen bitboard für schwarze Ritter geben. Es würde 64 Bit geben, wo jedes Bit ein Schachquadrat vertritt. Ein anderer bitboard könnte ein unveränderliches Darstellen des Zentrums vier Quadrate des Ausschusses sein. Indem wir die zwei Zahlen mit einem bitwise logischen UND Instruktion vergleichen, bekommen wir ein Drittel bitboard, der die schwarzen Ritter auf dem Zentrum vier Quadrate vertritt, falls etwa. Dieses Format ist allgemein mehr Zentraleinheit und Gedächtnis, das freundlich ist als andere.

Allgemeine technische Vorteile und Nachteile

Verarbeiter-Gebrauch

Pros

Der Vorteil der bitboard Darstellung besteht darin, dass sie die wesentlichen logischen bitwise Operationen ausnutzt, die auf fast allen Zentraleinheiten verfügbar sind, die in einem Zyklus vollenden und voller pipelined und versteckt usw. sind. Fast alle Zentraleinheiten haben UND, ODER, NOCH, und XOR. Viele Zentraleinheiten haben zusätzliche Bit-Instruktionen, wie Entdeckung des "ersten" Bit, die bitboard Operationen noch effizienter machen. Wenn sie Instruktionen nicht haben, können weithin bekannte Algorithmen einige "magische" Transformationen durchführen, die diese schnell tun.

Außerdem haben moderne Zentraleinheiten Instruktionsrohrleitungen dass Warteschlange-Instruktionen für die Ausführung. Ein Verarbeiter mit vielfachen Ausführungseinheiten kann mehr als eine Instruktion pro Zyklus durchführen, wenn mehr als eine Instruktion in der Rohrleitung verfügbar ist. Das Ausbreiten (der Gebrauch von conditionals wie wenn) macht es härter für den Verarbeiter, seine Rohrleitung (En) zu füllen, weil die Zentraleinheit nicht erzählen kann, was es im Voraus tun muss. Zu viel Ausbreiten macht die Rohrleitung weniger wirksam und vermindert potenziell die Anzahl von Instruktionen, die der Verarbeiter pro Zyklus durchführen kann. Viele bitboard Operationen verlangen weniger conditionals und vergrößern deshalb pipelining und machen wirksamen Gebrauch von vielfachen Ausführungseinheiten auf vielen Zentraleinheiten.

Zentraleinheiten haben wenig Breite, zu der sie entworfen werden und bitwise Operationen in einem Zyklus in dieser Breite ausführen können. Also, auf 64 Bit oder mehr Zentraleinheit können 64-Bit-Operationen in einer Instruktion vorkommen. Es kann Unterstützung für höher geben oder Breite-Instruktionen senken. Viele 32-Bit-Zentraleinheiten können ungefähr 64 Bit Instruktionen haben, und diejenigen können mehr als einen Zyklus nehmen oder sonst im Vergleich zu ihren 32-Bit-Instruktionen behindert werden.

Wenn der bitboard größer ist als die Breite des Befehlssatzes, dann wird ein Leistungserfolg das Ergebnis sein. So ein Programm mit 64 Bit würde bitboards schneller auf einem echten 64-Bit-Verarbeiter laufen als auf einem 32-Bit-Verarbeiter.

Lernt

Einige Abfragen sind dabei, länger zu nehmen, als sie mit vielleicht der Reihe würden, so werden bitboards allgemein in Verbindung mit Reihe-Ausschüssen in Schachprogrammen verwendet.

Speichergebrauch

Pros

Bitboards sind äußerst kompakt. Da nur ein sehr kleine Betrag des Gedächtnisses erforderlich ist, eine Position oder eine Maske zu vertreten, können mehr Positionen ihren Weg in Register, volles geheimes Geschwindigkeitslager, geheimes Lager des Niveaus 2 usw. finden. Auf diese Weise übersetzt Kompaktheit in die bessere Leistung (auf den meisten Maschinen). Auch auf einigen Maschinen könnte das bedeuten, dass mehr Positionen im Hauptgedächtnis vor dem Gehen zur Platte versorgt werden können.

Lernt

Für einige Spiele, einen passenden bitboard Motor schreibend, verlangt einen schönen Betrag des Quellcodes, der länger sein wird als die aufrichtige Durchführung. Für beschränkte Geräte (wie Mobiltelefone) mit einer begrenzten Zahl von Registern oder geheimem Verarbeiter-Instruktionslager kann das ein Problem verursachen. Für lebensgroße Computer kann es geheimes Lager Fräulein zwischen Niveau ein und Niveau zwei geheimes Lager verursachen. Das ist ein potenzielles Problem — nicht ein Hauptnachteil. Die meisten Maschinen werden genug geheimes Instruktionslager haben, so dass das nicht ein Problem ist.

Schach bitboards

Standard

Das erste Bit vertritt gewöhnlich das Quadrat a1 (das niedrigere linke Quadrat), und das 64. Bit vertritt das Quadrat h8 (das diagonal entgegengesetzte Quadrat).

Es gibt zwölf Typen von Stücken, und jeder Typ bekommt seinen eigenen bitboard. Schwarze Pfänder bekommen einen Vorstands-, weiße Pfänder usw. Zusammen können diese zwölf Ausschüsse eine Position vertreten. Etwas triviale Information muss auch anderswohin verfolgt werden; der Programmierer kann boolean Variablen dafür verwenden, ob jede Seite unter Kontrolle ist, kann usw. rochieren.

Konstanten sind wahrscheinlich, wie WHITE_SQUARES, BLACK_SQUARES, FILE_A, RANK_4 usw. verfügbar. Interessantere könnten ZENTRUM, ECKEN, CASTLE_SQUARES usw. einschließen.

Beispiele von Variablen würden WHITE_ATTACKING, ATTACKED_BY_PAWN, WHITE_PASSED_PAWN usw. sein.

Rotieren gelassen

"Rotieren gelassene" bitboards werden gewöhnlich in Programmen dieser Gebrauch bitboards verwendet. Rotieren gelassene bitboards machen bestimmte Operationen effizienter. Während Motoren genannt werden einfach, "hat bitboard Motoren rotieren gelassen," ist das eine falsche Bezeichnung, weil rotieren gelassene Vorstands-zusätzlich zu normalen Ausschüssen verwendet werden, die diese hybrider Standard/rotieren lassen bitboard Motoren machen.

Diese bitboards lassen die bitboard Positionen durch 90 Grade, 45 Grade und/oder 315 Grade rotieren. Ein typischer bitboard wird ein Byte pro Reihe des Schachbrettes haben. Mit diesem bitboard ist es leicht, Saatkrähe-Angriffe über eine Reihe mit einem Tisch zu bestimmen, der durch das besetzte Quadrat und die besetzten Positionen in der Reihe mit einem Inhaltsverzeichnis versehen ist (weil Saatkrähe Halt am ersten besetzten Quadrat angreift). Durch das Drehen des bitboard 90 Grade können Saatkrähe-Angriffe über eine Datei derselbe Weg untersucht werden. Das Hinzufügen bitboards hat 45 Grade rotieren gelassen, und 315 Grade erzeugt bitboards, in dem die Diagonalen leicht sind zu untersuchen. Die Königin kann untersucht werden, indem sie Saatkrähe und Bischof-Angriffe verbindet. Rotieren gelassene bitboards scheinen, getrennt und (im Wesentlichen) gleichzeitig von den Entwicklern von DarkThought und Schlauen Programmen entwickelt worden zu sein.

Magie

Magische Bewegung bitboard Generation ist eine neue und schnelle Alternative zur rotieren gelassenen Bewegung bitboard Generatoren. Diese sind auch mehr vielseitig als rotieren gelassene Bewegung bitboard Generatoren, weil der Generator unabhängig von jeder Position verwendet werden kann. Die Grundidee besteht darin, dass Sie ein Multiplizieren, richtige Verschiebung hashing Funktion verwenden können, eine Bewegungsdatenbank mit einem Inhaltsverzeichnis zu versehen, die so klein sein kann wie 1.5K. Eine Beschleunigung wird gewonnen, weil nicht rotieren gelassener bitboards aktualisiert werden muss, und weil die lookups mit dem geheimem Lager freundlicher sind.

Anderer bitboards

Viele andere Spiele außer dem Schachvorteil bitboards.

  • Darin Stehen Vier In Verbindung, sie berücksichtigen sehr effiziente Prüfung vier Konsekutivscheiben durch gerade zwei shift+and Operationen pro Richtung.
  • Im Spiel von Conway des Lebens sind sie eine mögliche Alternative zur Reihe.
  • Othello/Reversi (sieh den Artikel Reversi).

Siehe auch

Links

Kontrolleure

Schach

Artikel

Codebeispiele

  • Der Autor des Motors von Frenzee hatte einige Quellbeispiele angeschlagen.

Verbindung, die nicht bitte arbeitet, aktualisieren Sie

Durchführungen

Offene Quelle
  • Beowulf Unix, Linux, Windows. Rotieren gelassener bitboards.
  • Schlau Sieh den Artikel Crafty. Geschrieben in geradem C. Rotieren gelassener bitboards in den alten Versionen, jetzt Gebrauch-Magie bitboards.
  • GNU-Schach sieht den GNU-Schachartikel.
  • Stockfisch UCI Schachmotor, der in Elo bezüglich 2010 an die zweite Stelle rückt
  • Graue Sache C ++, rotieren gelassen bitboards.
  • KnightCap GPL. ELO 2300.
  • Pepito C. Bitboard, durch Carlos del Cacho. Windows und Dualzahlen von Linux sowie verfügbare Quelle.
  • Simontacci Rotieren gelassener bitboards.
Geschlossene Quelle

Othello


Löwe-Schutzvorrichtung / IBM PCjr
Impressum & Datenschutz