Lorsqu'il est appliqué au problème de planification d'évacuation, il devient comme suit.
En général, avec les solveurs d'optimisation mathématique, on peut dire ce qui suit.
Allons vérifier.
python
import numpy as np, pandas as pd, matplotlib.pyplot as plt
from pulp import *
nombre d'objets= 1000
nombre d'utilisateurs= 100
np.random.seed(1)
a = pd.DataFrame(np.random.rand(nombre d'objets,nombre d'utilisateurs),
index=['Produit%d'%i for i in range(Produit数)],
columns=['Utilisateur%d'%j for j in range(Utilisateur数)])
a['Var'] = [LpVariable('v%d'%i, lowBound=0) for i in range(nombre d'objets)]
th> | User 0 th> | User 1 th> | User 2 th> | User 3 th> | Utilisateur 4 th> | ... th> | User 99 th> tr> |
---|---|---|---|---|---|---|---|
Produit 0 th> | 0,417022 td> | 0,720324 td> | 0,000114 td> | 0,302333 td> | 0,146756 td> td> | ... td> | 0,186260 td> tr> |
... | ... | ... | ... | ... | ... | ... | ... |
Produit 999 th> | 0,950176 td> | 0,556653 td> | 0,915606 td> | 0,641566 td> | 0,390008 td> td> | 0,485991 td> | 0,604310 td> tr> |
Pour 1000 articles. Supposons que 100 utilisateurs aient différents sens du coût. Supposons que vous choisissiez la moitié des 1000 produits pour les problèmes suivants.
Regardons le temps de calcul tout en modifiant le nombre de produits.
python
it = [100, 200, 500, 1000] #Liste des numéros de produits
tm = []
for n in it:
b = a[:n]
#Problème minisum
m1 = LpProblem() #Problème de minimisation(mini)
m1 += lpDot(b.T[:-1].sum(), b.Var) #total(Sam)
m1 += lpSum(b.Var) <= int(n * 0.5)
m1.solve()
#Problème Minimax
m2 = LpProblem() #Problème de minimisation(mini)
y = LpVariable('y', lowBound=0)
# y >= max(Valeur de l'utilisateur j)
for j in range(nombre d'utilisateurs): m2 += y >= lpDot(b.ix[:, j], b.Var)
m2 += y #total(Max)
m2 += lpSum(b.Var) <= int(n * 0.5)
m2.solve()
tm.append((m1.solutionTime, m2.solutionTime))
plt.plot(it, tm)
plt.legend(['Problème minisum','Problème Minimax'], loc='upper left')
plt.show()
Le problème Minimax prend beaucoup plus de temps que le problème Minisum.
Dans certains cas, il peut être plus rapide de résoudre en deux étapes, telles que Comment résoudre le problème d'emballage du bac.
c'est tout
Recommended Posts