So wie Sie StringBuilder für die Verkettung von Zeichenfolgen in C # und Java verwenden sollten, gibt es eine ähnliche Technik zum Hinzufügen von Variablen in einem mathematischen Modell.
Ich werde es in einer Tabelle zusammenfassen.
Paket | Wie schreibt man | Ja Nein |
---|---|---|
sum | × | |
PuLP | lpSum | ○ |
PuLP | lpDot | ○ |
GUROBI | quicksum | ○ |
lpSum und Quicksum sind Gesamtberechnungen, und lpDot ist die interne Produktberechnung. Das Äquivalent von lpDot (a, b) in GUROBI kann mit Quicksumme (i * j für i, j in zip (a, b)) erfolgen.
Diejenigen mit "O" sind in der linearen Reihenfolge, aber diejenigen mit "×" sind in der quadratischen Reihenfolge.
Lassen Sie uns mit PuLP überprüfen.
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
das ist alles
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');