2017-01-24 3 views
1

처리중인 데이터가 설명서의 데이터만큼 간단하지 않습니다. 내 변수는 기본적으로 데이터 입력 파일에 따라 다르므로 아래의 간단한 예제를 사용하여 내가 성취하려는 것을 설명합니다.제약 조건 추가 CPLEX Python API

x1 + x2 + x3 = 1 
x4 + x5 + x6 + x7 =1 
x8 + x9 = 1 

나는 반복적으로 루프를 사용하여 생각하고는 c.linear_constraints.add() 함수를 호출 : 나는 다음과 같은 제약이있다. 이 일을하는 더 좋은 방법이 있습니까?

답변

1

일반적으로 선형 제약 조건을 한 번에 하나씩 생성하지 않고 배치를 작성하면 성능이 향상됩니다.

import cplex 
c = cplex.Cplex() 
c.variables.add(names=["x{0}".format(i+1) for i in range(9)]) 
c.linear_constraints.add(lin_expr=[[[0, 1, 2], [1.0, 1.0, 1.0]], 
            [[3, 4, 5, 6], [1.0, 1.0, 1.0, 1.0]], 
            [[7, 8], [1.0, 1.0]]], 
         rhs=[1.0, 1.0, 1.0], 
         names=["c{0}".format(i+1) for i in range(3)]) 
c.write("example.lp") 

이 다음 LP 파일을 생성합니다 : (위의 예제를 사용하여) 예를 들어, 다음을 수행하는 것이 좋습니다 그래서

Minimize 
obj: 
Subject To 
c1: x1 + x2 + x3 = 1 
c2: x4 + x5 + x6 + x7 = 1 
c3: x8 + x9 = 1 
End 

을, 당신의 입력 파일에 읽기 좋을 것이다, 일부 데이터 구조 (목록 또는 기타)에 제약 정보를 저장 한 다음 끝에 c.linear_constraints.add (또는 입력 파일이 매우 큰 경우 모든 X 제약 조건)을 한 번 호출하십시오.

+0

감사합니다. 인덱스를 미리 생성하고 단일'c.linear_constraints.add()'fuction에 맞 춥니 다. –