2014-10-02 3 views
0

최적의 솔루션을 찾은 후에 (Java 인터페이스 사용) Gurobi를 다시 호출하려고합니다.최적의 솔루션을 구로비 콜백

배경 : (1) (아주) 좋은 해결책을 찾은 다음 (2) 문제에 게으른 제약 조건을 추가해야하는 접근 방식을 연구 중입니다. 합리적인 새로운 지연 제약을 식별하는 것이 제 경우에는 좋은 해결책을 요구하기 때문에 먼저 좋은 해결책을 찾아야합니다.

Gurobi가 MIP, MIPSOL 등으로 콜백하기 때문에 일반적으로 문제가되지 않습니다. 그런 다음 현재 솔루션의 차이를 확인하고 다음 지연 연결을 추가할지 결정할 수 있습니다.

그러나 아주 좋은 해결책을 찾으면 Gurobi는 때로는 최적의 솔루션을 찾습니다 (예 : 노드 절단 후). 이 경우 추가 LIPY 제약 조건을 추가 할 수있는 추가 MIP, MIPSOL 또는 다른 유용한 콜백이 없습니다.

나는 이미 MIPNODE_STATUS를 사용하여 컷오프를 식별 할 수 있음을 알게되었습니다. 그러나 나는 아직이 단절이 현재의 솔루션이 최적이라고 입증되는지 확인하는 방법을 찾지 못했습니다.

이 경우를 식별하고 여전히 지연 제한 조건을 추가하는 사람은 누구입니까?

답변

0

한 가지 방법은 optimize()- 메서드가 완료된 후 모델이 최적인지, 지연 제한이 추가되었는지 확인하는 것입니다. 이 경우, 지연 제한 조건을 추가하고 optimize()을 다시 호출하면됩니다.

이 경우 두 번째 최적화는 첫 번째 최적화로 시작됩니다. 나는 그런 상황에서 묶여있는 행동이 어떻게 작용하는지 잘 모릅니다.

일반적으로 게으른 제약 조건을 "손으로"추가하는 방법은 가능한 솔루션이이를 위반할 경우 자동으로 추가되기 때문에 약간 이상하게 보입니다. 지금까지하지 않았다면 처음에 Lazy value이 1이되도록 추가하려고 할 수 있으므로주의해서 모델로 가져갑니다.