Tout comme vous devriez utiliser StringBuilder pour la concaténation de chaînes en C # et Java, il existe une technique similaire pour ajouter des variables dans un modèle mathématique.
Je vais le résumer dans un tableau.
paquet | Comment écrire | Oui Non |
---|---|---|
sum | × | |
PuLP | lpSum | ○ |
PuLP | lpDot | ○ |
GUROBI | quicksum | ○ |
lpSum et quicksum sont des calculs totaux et lpDot est un calcul de produit interne. L'équivalent de lpDot (a, b) dans GUROBI peut être fait avec quicksum (i * j pour i, j dans zip (a, b)).
Ceux avec "○" sont dans l'ordre linéaire, mais ceux avec "x" sont dans l'ordre carré.
Vérifions avec PuLP.
python3
from pulp import LpVariable, value
for i in [1000, 2000, 5000]:
v = [LpVariable('v%d'%i) for i in range(i)]
print(i)
%timeit lpSum(v)
%timeit sum(v)
>>>
1000
1000 loops, best of 3: 1.44 ms per loop
1 loop, best of 3: 403 ms per loop
2000
100 loops, best of 3: 2.89 ms per loop
1 loop, best of 3: 1.58 s per loop
5000
100 loops, best of 3: 7.11 ms per loop
1 loop, best of 3: 10 s per loop
c'est tout
-Dessin graphique
python3
import matplotlib.pyplot as plt
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()
ax1.plot([0,1000,2000,5000], [0,1.44,2.89,7.11], label='lpSum')
ax2.plot([0,1000,2000,5000], [0,403,1580,10000], label='sum', color='red')
ax1.legend(loc='center left')
ax2.legend(loc='center right');