수리 모델에서 변수의 합
이게 뭐야
최적화 수리 모델 작성시 변수의 합을 작성하는 방법
C# 이나 Java 에 있어서, 캐릭터 라인의 연결로 StringBuilder 를 사용해야 하는 것과 같이, 수리 모델의 변수의 가산에서도, 같은 테크닉이 있습니다.
표에 정리합니다.
패키지
쓰기
가능 여부
sum
×
PuLP
lpSum
○
PuLP
lpDot
○
글로일
quicksum
○
lpSum, quicksum은 총 계산이고 lpDot은 내적 계산입니다.
GUROBI 에서 lpDot(a,b) 상당한 것은 quicksum(i*j for i,j in zip(a,b)) 로 할 수 있습니다.
가부가 "○"의 것은 선형 오더입니다만, "×"의 것은 제곱의 오더가 됩니다.
확인
PuLP로 확인해 봅시다.
python3from 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
이상
참고
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
이상
참고
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');
Reference
이 문제에 관하여(수리 모델에서 변수의 합), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/SaitoTsutomu/items/6701841122acc3130a29텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)