수리 모델에서 변수의 합

이게 뭐야



최적화 수리 모델 작성시 변수의 합을 작성하는 방법



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로 확인해 봅시다.

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');
    

    좋은 웹페이지 즐겨찾기