Mit welchen Techniken kann man alle Teile auf einem Brett halten? Es ist wie ein N-Queen-Problem
Ist es eine Kombination von n-Königin
Mit welchen Techniken kann man alle Teile auf einem Brett halten? Es ist wie ein N-Queen-Problem
Ist es eine Kombination von n-Königin
Antworten:
So bearbeiten Sie die Frage: Wenn Sie die Teile in zufälliger Reihenfolge erhalten und keine Informationen über zukünftige Teile haben, können Sie die Teile so anordnen, dass sie den geringsten Umfang haben. Wenn ich zum Beispiel in der ersten Runde eine Königin erhalten würde, würde ich sie in eine der vier Ecken legen. Einige weitere Regeln wären, Ritter nahe beieinander zu halten und Bauern übereinander zu stapeln. Alle diese Strategien sind ein bisschen offensichtlich, aber es ist schwierig, eine konsistente Strategie zu verwenden, da es so viele mögliche Kombinationen von Teilen gibt.
Dies scheint mir eher eine Programmierfrage als eine Schachfrage zu sein, aber es ist trotzdem interessant! Nachdem ich ein wenig nachgedacht habe, würde ich hypthesisieren, dass der beste Weg, um dieses Problem anzugehen, darin besteht, die Ritter als Basis zu verwenden. Es ist bekannt, dass die maximale Anzahl von Rittern, die auf ein Brett passen, 32 beträgt (einfach auf alle Felder derselben Farbe legen). Daher ist es logisch, dies als Ausgangsposition zu haben, da dies die maximale Belegung ist, die Sie mit einem haben können Einzelstück. Diese Strategie erstreckt sich auf eine N x N-Karte.
Danach würde ich Bauern verwenden, da ihre Angriffsstärke auf Vorwärtsdiagonalen von einem Quadrat beschränkt ist. Sie können jede zweite Spalte belegen (keine Zeilen, da dies nach herkömmlichen Regeln auf 2, 4 und 6 beschränkt wäre), und dies fügt N / 4 mehr belegte Quadrate für eine NxN-Karte hinzu. Dies verallgemeinert sich auf eine Gesamtzahl der besetzten Quadrate auf N / 2 + N / 4 oder einfach auf 3N / 4 insgesamt besetzte Quadrate.
Dies ist das Ergebnis von ca. 5 Minuten Überlegung, sodass mein Algorithmus möglicherweise fehlerhaft ist. Ich hoffe das hilft bei der Beantwortung Ihrer Frage!
Ich würde denken, dass bei einer zufälligen Auswahl von Stücken die grundlegende Strategie darin besteht, sie so auf das Brett zu legen, dass sie so wenig Felder wie möglich angreifen und keine Rangliste oder Datei blockieren, die nicht bereits blockiert wurde, wann immer dies möglich ist. dh Ritter in den Ecken, sich über kurze Strecken bewegende Teile wie der König und der Ritter auf demselben Rang oder derselben Akte und Bischöfe auf demselben Rang oder derselben Akte wie andere Teile. Im Allgemeinen ähnelt die Auswahl eines Quadrats für das neue Stück einer Königsjagd. Wenn Sie versuchen, den König festzunageln, möchten Sie die Anzahl der Felder, die er sicher besetzen kann, so weit wie möglich reduzieren (ohne sie um eins zu reduzieren). Hier möchten Sie, dass jedes platzierte Stück die Anzahl der Felder, die noch von keinem Stück angegriffen werden, so gering wie möglich hält.
Da die Problemdefinition kürzlich aktualisiert wurde, gehe ich davon aus, dass Sie mit einer leeren NxN-Karte beginnen und ein zufälliges Stück erhalten und gebeten werden, es zu platzieren. Wenn Sie fertig sind, erhalten Sie ein weiteres zufälliges Stück, bis kein Stück mehr platziert werden kann.
Für eine menschliche Strategie wäre es eine gute Faustregel, eine (gültige) Position zu wählen, die die Anzahl der noch offenen Quadrate minimiert, die durch das neue Stück verweigert werden. Auf hoher Ebene gibt es zwei Hauptkomponenten:
Für eine Programmierstrategie müssen wir uns das Problem noch einmal ansehen. Wie oben angegeben, handelt es sich nicht wirklich um ein Programmierproblem, da unser Erfolg davon abhängt, die bestmögliche Strategie zu finden (was wir offensichtlich nicht getan haben). Traditionelle Programmierung wird in diesem Sinne nicht wirklich helfen, da die Regeln des Problems dem Computer die perfekte Kenntnis darüber verweigern, welche Teile kommen. Dies macht es unmöglich, die traditionellen Ansätze des Brute-Forcing oder Backtracking (die normalerweise zur Lösung von 8 / N-Queens- Problemen verwendet werden) anzuwenden.
Man könnte jedoch verschiedene KI-Techniken einsetzen, um eine optimale Strategie zu finden. Im Wesentlichen würde dies darauf hinauslaufen, einen Weg zu finden, eine Strategie in einer Art Datenstruktur darzustellen. Dies ist eigentlich der schwierige Teil und könnte extrem schwierig werden. Sie müssten wahrscheinlich eine domänenspezifische Sprache erstellen, die Regeln wie "Wählen Sie die Spalte ganz rechts aus, in der sich noch kein Ritter befindet" oder was auch immer zulässt. Dann würden Sie im Wesentlichen eine Art Optimierungsalgorithmus auswählen (Zufallssuche, genetische Algorithmen, Partikelschwärme usw.), um ein besonders gutes Regelwerk zu finden, das den Rest, den Sie bisher gefunden haben, zu übertreffen scheint. Es besteht eine gute Chance, dass es so schrecklich verwickelt wird, dass wir nie verstehen könnten, wie und warum es so gut funktioniert, aber es könnte die schlagen, die wir haben.
Die zwei Hauptpunkte sind:
Als Beispiel werde ich eine kurze Studie veröffentlichen, die ich über Ritter gemacht habe. Es ist ein bisschen albern, da wir bereits wissen, dass wir 32 Ritter in ein 8x8-Brett legen können, indem wir sie alle auf die gleiche Farbe bringen, aber ich habe es trotzdem getan sehen, wie wenige Ritter angeordnet werden sollten:
(Beachten Sie, wie Punkt 2 bestimmt, welche Anordnung besser ist, wenn wir ein Unentschieden haben.)
Außerdem habe ich zwei nützliche Links gefunden:
Halten Sie die Teile an den Seiten außerhalb der Mitte.