2016-10-09 2 views
0

CPLEX Python API를 사용하여 일련의 LP 문제를 해결하고 있습니다. 많은 문제가 본질적으로 동일하므로 손으로 매개 변수를 모두 저장하십시오. 대부분의 경우 이전 문제의 해결책으로 따뜻한 시작을 사용하고 싶습니다. 함수를 cpx.start.set_start(col_status, row_status, col_primal, row_primal, col_dual, row_dual)으로 호출하면 cpx = cplex.Cplex()이됩니다.CPLEX는 최적의 LP 솔루션을 찾았지만 기본 오류를 반환하지 않습니다.

이 기능은 here에 설명되어 있습니다. 두 개의 인수, col_statusrow_statuscpx.solution.basis.get_col_basis()cpx.solution.basis.get_row_basis()을 호출하여 얻습니다. 그러나

, optimal을 반환하고 빈 목록과 따뜻한 시작 함수를 호출 할 수 있습니다 this post 한 항에있어서, 모두 cpx.solution.get_values()cpx.solution.get_dual_values() ...

지금 cpx.solution.basis.get_basis() 반환

CPLEX Error 1262: No basis exists.를 호출하면 얻을 수있는 cpx.solution.status[cpx.solution.get_status()]에도 불구하고 다음과 같이 열과 행 기준 상태.

lastsolution = cpx.solution.get_values() 
cpx.start.set_start(col_status=[], row_status=[], 
        col_primal=lastsolution, row_primal=[], 
        col_dual=[], row_dual=[]) 

그러나 이것은 실제로 CPLEX 반복을 몇 번 더 만듭니다. 왜 더 많은 것이 불명확하지만, 전반적인 목표는 분명히 적게는 것입니다.

버전 정보 파이썬 2.7.12 CPLEX 12.6.3

+0

http://filedropper.com과 같은 파일 공유 사이트에서 모델을 (이상적으로 SAV 형식으로) 공유 할 수있는 기회가 있습니까? 즉,'cpx.solve()'를 호출 한 후'cpx.solution.basis.get_basis()'를 호출 할 때 "CPLEX Error 1262"를 얻는 모델입니다. 또한 대화식으로 해당 동작을 재현 할 수 있습니까? – rkersh

+0

현재 모델을 공유하는 것은 옵션이 아닙니다. 또한 모델이 매우 큽니다. 또한 필자는 오류를 재생산하기 위해 대화 형 코드에 수백 줄의 중복 코드를 작성하고 디버깅 할 의도가 없습니다. 죄송합니다. – Constantine

답변

0

난 당신이 CPXERR_NO_BASIS을 얻고있는 이유를 모르겠어요. 내 의견보기.

row_primal, col_dualrow_dual에 대해서도 값을 입력하는 것이 좋습니다. 예를 들어 :

cpx2.start.set_start(col_status=[], 
        row_status=[], 
        col_primal=cpx.solution.get_values(), 
        row_primal=cpx.solution.get_linear_slacks(), 
        col_dual=cpx.solution.get_reduced_costs(), 
        row_dual=cpx.solution.get_dual_values()) 

내가 (혼자 col_primal을 지정할 때 결정적 진드기의 수는 실제로 증가)는 CPLEX 예제와 함께 제공되는 afiro.mps 모델을 사용하여 설명하는 동작을 재현 할 수 있었다. 그러나 위와 같은 작업을 수행 할 때 도움이되었습니다 (디 틱 틱의 수가 향상되고 반복 횟수가 0이되었습니다).

마지막으로, set_start을 사용하면 항상 도움이된다는 보장은 없다고 생각합니다. 어떤 경우에는 나쁜 생각 일 수도 있습니다. 나는 이것에 대한 언급이 없다.

+0

위의 제안을 구현했지만 반복 횟수를 줄이지는 못했습니다. 심지어 매개 변수를 변경하지 않고 똑같은 문제를 해결하려고 시도해도 솔버는 여전히 완전한 반복 세트를 통과했습니다. – Constantine