[PYTHON] Gruppierung nach Kombinationsoptimierung

Problem

Es gibt 26 Gruppen, die jeweils aus folgenden Personen bestehen.

python3


import numpy as np
n = 26 #Anzahl der Gruppen
np.random.seed(11)
a = np.random.randint(10, 20, n) #Anzahl der Personen pro Gruppe
for i in range(n):
    print('Gruppe%2d %d Menschen'%(i, a[i]))
>>>
Gruppe 0 19 Personen
Gruppe 1 10 Personen
Gruppe 2 11 Personen
Gruppe 3 17 Personen
Gruppe 4 11 Personen
Gruppe 5 17 Personen
Gruppe 6 12 Personen
Gruppe 7 18 Personen
Gruppe 8 10 Personen
Gruppe 9 10 Personen
Gruppe 10 14 Personen
Gruppe 11 12 Personen
Gruppe 12 11 Personen
Gruppe 13 15 Personen
Gruppe 14 15 Personen
Gruppe 15 17 Personen
Gruppe 16 14 Personen
Gruppe 17 11 Personen
Gruppe 18 18 Personen
Gruppe 19 18 Personen
Gruppe 20 11 Personen
Gruppe 21 13 Personen
Gruppe 22 16 Personen
Gruppe 23 12 Personen
Gruppe 24 12 Personen
Gruppe 25 10 Personen

――26 Teilen Sie die Gruppe in 6 Räume (0, 1, 2, 3, 4, 5). (Mehrere Gruppen in einem Raum)

Wo soll ich die Gruppe aufteilen?

Versuchen Sie mit Python zu lösen

Formulieren und lösen Sie ein Problem der Kombinationsoptimierung.

python3


from pulp import *
limit = 63 #Raumkapazität
m = LpProblem() #Mathematisches Modell
#Anzahl der Räume bis zu dieser Gruppe
x = [LpVariable('x%d'%i, lowBound=a[i], upBound=limit) for i in range(n)]
#Gibt an, ob der Raum in vordere und hintere Gruppen unterteilt werden soll
y = [LpVariable('y%d'%i, cat=LpBinary) for i in range(n-1)]
m += lpSum(x) #Zielfunktion
m += lpSum(y) <= 6-1 #Anzahl der Räume=6 oder weniger(Die Pause ist 6-1)
for i in range(n-1):
    m += x[i+1] >= x[i] + a[i+1] - limit * y[i] #Fügen Sie die Anzahl der Personen im selben Raum hinzu
m.solve() #Lösung
print(LpStatus[m.status])
print([int(value(x[i])) for i in range(n) if i==n-1 or value(y[i])])
>>>
Optimal
[57, 58, 57, 61, 58, 63]

――Wenn die Dispersion das Minimum ist, wird sie nichtlinear und schwer zu lösen.

Ich habe mich auf CodeIQ bezogen. [Im täglichen Leben verborgene Optimierungsprobleme] Algorithmus, der die Prüflinge so gleichmäßig wie möglich dem Prüfungsort zuordnet

das ist alles

Recommended Posts

Gruppierung nach Kombinationsoptimierung
Gruppieren von Spielen mit Kombinationsoptimierung
Lösen von "Würfeln in Würfeln" mit Kombinationsoptimierung
Bestimmen Sie das aufgezeichnete Programm durch Kombinationsoptimierung
Teilen Sie sich durch Kombinationsoptimierung in Teams auf
Über Menüs durch Kombinationsoptimierung nachdenken
Verwenden Sie die Kombinationsoptimierung
Siegermethode für Pferderennen durch Kombinationsoptimierung
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
Durch Kombinationsoptimierung in Teams aufteilen (durchschnittliche Abweichung minimieren)
Durch Kombinationsoptimierung (Backmethode) in Teams aufteilen
Sternumfrage mit Kombinationsoptimierung
Kombinationsoptimierung mit Quantenglühen
Lassen Sie uns die Vorlesung der PyCon JP 2016 durch Kombinationsoptimierung entscheiden
Lassen Sie uns die Position der Feuerwehr durch Kombinationsoptimierung bestimmen
Lösen Sie ein 4-Farben-Problem mit Kombinationsoptimierung
Sehen Sie sich Wale mit Kombinationsoptimierung an
Bereiten Sie die Straße mit Kombinationsoptimierung
Die Leistungsfähigkeit von Kombinationsoptimierungslösern
Denken Sie an Transformation Janken durch Optimierung
Versuchsplanungsmethode und Kombinationsoptimierung
SVM-Optimierung durch aktive Set-Methode
Spieltheorie mit Kombinationsoptimierung lösen
Kombinationsoptimierungstechniken in Rätseln
Erklärung des Produktionsoptimierungsmodells durch Python
Lösen von Planungsproblemen für Krankenschwestern mit Kombinationsoptimierung
Finden der Route von Patrouillenbooten durch Optimieren