[PYTHON] Versuchsplanungsmethode und Kombinationsoptimierung

Dies ist der Artikel zum dritten Tag von Algorithm Advent Calendar 2015.

Einführung

Wir werden eine kurze Einführung in die experimentelle Planungsmethode und einen Ansatz durch Kombinationsoptimierung als deren Entwicklung einführen.

Hintergrund

Als Beispiel für den Fall "Ein Sensor von 10.000 Yen wird an den Punkten A und B platziert, und ein Sensor von 30.000 Yen wird an Punkt C platziert".

der Begriff

Verwenden Sie die folgenden Begriffe.

—— Faktor: Das zu untersuchende Thema, für das Sie das Niveau bestimmen möchten. Dieses Mal ist es ein Kandidat für die Sensorplatzierung. --Level: Möglicher Wert des Faktors. Dieses Mal gibt es drei Arten von Sensorkosten: 0,000 Yen, 10.000 Yen und 30.000 Yen.

Diesmal wird davon ausgegangen, dass keine Interaktion stattfindet.

So ermitteln Sie die Anzahl der Fälle mithilfe der experimentellen Planungsmethode.

Abgesehen von der Hintergrundgeschichte werde ich als allgemeine Theorie ein Beispiel mit 3 Arten von Faktoren und 3 Arten von Ebenen zeigen. Einfach ausgedrückt, Sie benötigen $ 3 ^ 3 = 27 $ so viele Fälle.

Bei der experimentellen Planungsmethode kann die Anzahl der Fälle basierend auf dem lateinischen Quadrat (siehe unten) erstellt werden.

1 2 3
2 3 1
3 1 2

Wenn Sie das lateinische Quadrat verwenden, können Sie es in 9 Fällen wie folgt effizient ausführen. Diese 9 Fälle umfassen alle Kombinationen von Faktoren und Ebenen, und die Anzahl aller Faktoren und Ebenen ist gleich.

9 Fälle ausgewählt (Stufe für jeden Faktor)

Da jedes der 9 Quadrate im lateinischen Quadrat dem Fall entspricht, betrachten Sie die Zeilennummer als Faktor 1, die Spaltennummer als Faktor 2 und die Quadratnummer als Faktor 3.

Nachteile der Versuchsplanung

Die experimentelle Planungsmethode weist die folgenden Nachteile auf.

Denken durch Kombinationsoptimierung

Bei der experimentellen Planungsmethode wurde nach Sicherstellung einer bestimmten Anzahl von Faktoren / Ebenen die Anzahl der Fälle so gering wie möglich gewählt. Sie können sich dasselbe als Optimierungsproblem vorstellen. Geben Sie insbesondere die Mindestanzahl von Fällen an, die jede Ebene jedes Faktors enthalten, und ermitteln Sie die Methode zur Auswahl von Fällen durch gemischte Ganzzahloptimierung.

Formulierung

Zielfunktion \sum_i{v_i} Erforderliche Anzahl von Fällen
Einschränkungen \sum_i{\\{C_{ij} v_i | C_{ij} = k\\}} \ge N \forall j \lt 3, \forall k \in \\{0, 1, 3\\} Es muss mindestens die Mindestanzahl von Fällen für jeden Faktor und jede Ebene geben
Variable v_i \in \\{0, 1\\} \forall i \Gesamtzahl der Fälle Gibt an, ob für jeden Fall ausgewählt werden soll

$ C_ {ij} $ repräsentiert die $ j $ -te Ebene im $ i $ -ten Fall, und $ N $ repräsentiert die Mindestanzahl.

Mit Python kann es wie folgt berechnet werden. (Es wird angenommen, dass die variablen Fälle die Gesamtzahl der Fälle mit Anschaffungskosten von 50.000 Yen oder weniger enthalten.)

python


from pulp import *
r = [0, 1, 3] #Niveau
for N in [20, 40, 60, 120]: #Mindestanzahl
    m = LpProblem()
    v = [LpVariable('v%d'%i, cat=LpBinary) for i in range(len(cases))]
    m += lpSum(v)
    for j in range(len(cases[0])):
        for k in r:
            m += lpSum(v[i] for i in range(len(cases)) if cases[i][j] == k) >= N
    m.solve()
    print(N, LpStatus[m.status], value(m.objective)) #Mindestanzahl, Status, Anzahl der Fälle

Ergebnis

Vergleichen wir es mit dem Fall der Zufallsstichprobe. Die minimale Anzahl von Zufallsstichproben ist ein ungefährer Wert, der in der Simulation erhalten wird. Sie können sehen, dass der Fall mithilfe der Kombinationsoptimierung effizient ausgewählt werden kann.

Mindestanzahl Kombinationsoptimierung Stichproben
20 400 Fälle 3200 Fall
40 800 Fälle 5700 Fall
60 1200 Fälle 7900 Fall
120 2400 Fall 14400 Fall

Recommended Posts

Versuchsplanungsmethode und Kombinationsoptimierung
Die Leistungsfähigkeit von Kombinationsoptimierungslösern
Trennung von Design und Daten in matplotlib
Verwenden Sie die Kombinationsoptimierung
Kombinationsoptimierung - typisches Problem-Set-Split-Problem
Die Hand von "Millijan" durch Kombinationsoptimierung finden
Minimieren Sie die Anzahl der Polierungen, indem Sie die Kombination optimieren
Beurteilung des Endes von Mahjong durch Kombinationsoptimierung
Gruppierung nach Kombinationsoptimierung
Lassen Sie uns die Position der Feuerwehr durch Kombinationsoptimierung bestimmen
Mechanismus von Pyenv und Virtualenv
Vor- und Nachbearbeitung von Pytest
Sternumfrage mit Kombinationsoptimierung
Konsistenz des Scikit-Learn-API-Designs
Kombination von rekursiv und Generator
Gruppieren von Spielen mit Kombinationsoptimierung
Kombination von anyenv und direnv
Erklärung und Implementierung von SocialFoceModel
Differenzierung der Sortierung und Verallgemeinerung der Sortierung
Koexistenz von Pyenv und Autojump
Verwendung und Integration von "Shodan"
Das Problem der Lügner und der Ehrlichkeit
Maschinelles Lernen und mathematische Optimierung
Auftreten und Auflösung von tensorflow.python.framework.errors_impl.FailedPreconditionError
Vergleich von Apex und Lamvery
Quellinstallation und Installation von Python
Einführung und Tipps von mlflow.Tracking
Lösen von Rucksackproblemen mit den OP-Tools von Google - Üben der Grundlagen von Kombinationsoptimierungsproblemen