[PYTHON] Lösen des N Queen-Problems mit Kombinationsoptimierung

Was ist das N Queen Problem?

Platziere N Königinnen auf dem N x N Brett. In diesem Moment, Kein Stück sollte sich in einer Position befinden, in der es von einem anderen Stück aufgenommen werden kann.

Dieses Problem kann auch mit Kombinationsoptimierung gelöst werden.

Formulierung

Zielfunktion Keine
Variablen $ x_j \ in \ {0, 1 \} ~ ~ \ forall j \ in jeder Zelle $ Gibt an, ob sie in diese Zelle eingefügt werden sollen td>
Einschränkungen $ \ sum_ {j \ in jeder Zelle ~~~~~} {\ {x_j | Vertikal ist i Spalten \}} = 1 ~ ~ \ forall i \ in \ {0, \ cdots, N-1 \} $ Eine pro Spalte weniger -1 \} $ Eine pro Zeile
$ \ sum_ {j \ in jeder Zelle ~~~~~} {\ {x_j | Vertikal + horizontal i \}} \ le 1 ~ ~ \ forall i \ in \ {0, \ cdots , 2 N-2 \} $ Eine oder weniger Diagonale
$ \ sum_ {j \ in jeder Zelle ~~~~~} {\ {x_j | Vertikal-horizontal i-N + 1 \}} \ le 1 ~ ~ \ forall i \ in \ { 0, \ cdots, 2 N-2 \} $ Eine oder weniger Diagonale

Versuchen Sie mit Python zu lösen

Formulieren und lösen wir es.

python3


%matplotlib inline
import pandas as pd, matplotlib.pyplot as plt
from itertools import product
from ortoolpy import addvar
from pulp import *
def NQueen(N):
    r = range(N)
    m = LpProblem()
    a = pd.DataFrame([(i, j, addvar(cat=LpBinary))
        for i, j in product(r, r)], columns=['Vertikal', 'Seite', 'x'])
    for i in r:
        m += lpSum(a[a.Vertikal== i].x) == 1
        m += lpSum(a[a.Seite== i].x) == 1
    for i in range(2*N-1):
        m += lpSum(a[a.Vertikal+ a.Seite== i].x) <= 1
        m += lpSum(a[a.Vertikal- a.Seite== i-N+1].x) <= 1
    %time m.solve()
    return a.x.apply(value).reshape(N, -1)
for N in [8, 16, 32, 64, 128]:
    plt.imshow(NQueen(N), cmap='gray', interpolation='none')
    plt.show()
>>>
CPU times: user 4 ms, sys: 4 ms, total: 8 ms
Wall time: 27.5 ms

CPU times: user 16 ms, sys: 4 ms, total: 20 ms
Wall time: 84.4 ms

CPU times: user 48 ms, sys: 4 ms, total: 52 ms
Wall time: 272 ms

CPU times: user 236 ms, sys: 0 ns, total: 236 ms
Wall time: 1.88 s

CPU times: user 956 ms, sys: 20 ms, total: 976 ms
Wall time: 11.3 s

image

das ist alles

Recommended Posts

Lösen des N Queen-Problems mit Kombinationsoptimierung
Lösen Sie ein 4-Farben-Problem mit Kombinationsoptimierung
Bereiten Sie die Straße mit Kombinationsoptimierung
Spieltheorie mit Kombinationsoptimierung lösen
Lösen von Planungsproblemen für Krankenschwestern mit Kombinationsoptimierung
Lösung des Planungsproblems der Krankenschwester (Schichtoptimierung) mit einem genetischen Algorithmus
Versuchen Sie, das N Queen-Problem mit SA von PyQUBO zu lösen
Lösen von Rucksackproblemen mit den OP-Tools von Google - Üben der Grundlagen von Kombinationsoptimierungsproblemen
Lösen Sie das Python-Rucksackproblem mit dem Greedy-Algorithmus
Lösen des Irisproblems mit scikit-learn ver1.0 (logistische Regression)
Gruppieren von Spielen mit Kombinationsoptimierung
Kombinationsoptimierung mit Quantenglühen
Maximieren Sie den Restaurantverkauf durch kombinierte Optimierung
Sehen Sie sich Wale mit Kombinationsoptimierung an
Die Leistungsfähigkeit von Kombinationsoptimierungslösern
C Sprache 8 Königin Problem lösen 3 Muster
Kombinationsoptimierung - Typisches Problem - Problem mit der Transportroute (Lieferoptimierung)
Lösen wir das Portfolio mit kontinuierlicher Optimierung
Lassen Sie uns Bücher mit Kombinationsoptimierung flach stapeln
Lösen Sie das Problem des Handlungsreisenden mit OR-Tools
Lösung des Problems des Handlungsreisenden mit dem genetischen Algorithmus (GA) und seiner Bibliothek (vcopt)
Versuchen Sie, das Fizzbuzz-Problem mit Keras zu lösen
Die Hand von "Millijan" durch Kombinationsoptimierung finden
Lassen Sie uns den Datumsverlauf durch Kombinationsoptimierung festlegen
Minimieren Sie die Anzahl der Polierungen, indem Sie die Kombination optimieren
Beurteilung des Endes von Mahjong durch Kombinationsoptimierung
Lösen des Lorenz 96-Modells mit Julia und Python
Ich habe versucht, das Problem der Optimierung der Platzierung virtueller Maschinen (einfache Version) mit blueqat zu lösen
Verwenden Sie die Kombinationsoptimierung
Kombinationsoptimierung - Typisches Problem - Problem bei der Platzierung der Einrichtung ohne Kapazitätsbeschränkung
Lösen des Transportroutenproblems (VRP) Gemischte Ganzzahlplanung
Versuchen Sie, das Problem der Zuweisung von Schulungsärzten mit Python zu lösen
○○ Probleme im Fachbereich Mathematik mit Optimierung lösen
Das 14. Referenzproblem beim Offline-Schreiben in Echtzeit mit Python
Ich habe versucht, das Problem mit Python Vol.1 zu lösen