Simplex Method 구현에 대한 최고의 책?


14

LP 작업을 위해 SM을 구현하는 데 관심이 있지만 가능한 함정에 대해 들었습니다. Cormen의 책에 따르면 순진한 구현이 기하 급수적으로 작동하도록 입력 데이터를 가질 수 있다고합니다. 또한 순진한 구현으로 인해 일종의 데이터가 반복 될 수 있다고 들었습니다.

SM의 실제 구현에 대한 뉘앙스를 설명하는 책 / 종이 / 소스가 있습니까?

미리 감사드립니다.


답변:


13

CPLEX의 "아버지"인 Bixby의 논문을 강력히 추천합니다. (개정 된) 심플 렉스 알고리즘의 측면을 구현하는 것뿐만 아니라 Robert E. Bixby , 실제 선형 프로그램 해결 : 10 년 이상의 진행 , 운영 연구 (50) 2002, 3-15 .


12

CLRS는 P가 아닙니다. CLRS는 실제로 "잘 작동"하지만 알고리즘이 기하 급수적으로 실행되도록하는 일부 입력이 있다고 말합니다. 이것은 구현이 아니라 알고리즘과 밀접한 관련이 있습니다. 알고리즘을 정확히 구현하는 방법과는 별도로이 문제에 직면하게됩니다. 그러나 LP는 P입니다. 이것은 1979 년 Khachian에 의해 증명되었지만 그의 타원체 알고리즘은 실용적이지 않습니다. 오늘날 내부 포인트 방법이 널리 사용됩니다. 첫 번째는 1984 년 Karmarkar에 의해 발견되었습니다.

실제 구현에 관심이 있다면 다음을 살펴보십시오.

학업 용으로 무료로 제공되는 GUROBI는 현재 사용 가능한 최고의 최적화 프로그램입니다 (순차 및 공유 메모리 병렬 버전 모두).

http://www.gurobi.com

GLPK 라이브러리 :

http://www.gnu.org/software/glpk/

이 프로젝트는 다음을위한 구현을 제공하는 오픈 소스 프로젝트입니다.

  • 원시 및 이중 심플 렉스 방법
  • 초기 이중 내부 포인트 방법
  • 분기 및 절단 방법
  • GNU MathProg 번역기
  • 응용 프로그램 인터페이스 (API)
  • 독립형 LP / MIP 솔버

12
과연. 이것이 운동의 요점이 아닌 한, 스스로 심플 렉스를 구현하지 않는 것이 좋습니다. 당신이 그것을 사용하려면 선반 밖에서 방법이 훨씬 좋습니다. 또한 CPLEX는 귀하에게 적합한 경우 학업에 무료로 사용할 수 있습니다.
Suresh Venkat

1
LP의 분산 형 (MPI와 같은) 오픈 소스 구현이 있습니까?
Tomek Tarczynski

3
@Tomek LP는 P- 완료되어 효율적인 병렬 처리가 불가능합니다.
Marcus Ritt

@Tomek : Simphony는 현재 PVM 메시지 전달 프로토콜이 지원하는 모든 환경에서 실행되는 분산 버전을 제공합니다 (MPI는 아직 지원되지 않음). OpenMP 호환 컴파일러를 사용하여 공유 메모리 아키텍처를 위해 동일한 소스 코드를 컴파일 할 수도 있습니다. branchandcut.org 및 강력한 COIN-OR 웹 사이트를 참조하십시오 : coin-or.org
Massimo Cafaro

9
CPLEX는 아마도 현재 사용 가능한 LP의 가장 좋은 구현 일 것입니다 (따라서 사람들이 그렇게 많은 비용을 지불하는 이유). 널리 사용되는 모든 구현은 사용자가 프로그래밍하는 것보다 실질적으로 더 잘 수행됩니다. 여기에는 Mathematical, Maple 및 MATLAB 패키지가 포함됩니다. 상당히 좋은 무료 구현을 포함하여 많은 구현이 있습니다 (QSopt는 상업적 목적으로 사용하지 않을 경우 무료입니다). 그래서 직접 프로그래밍하면 학습 경험에 가치가 있습니다.
피터 쇼어

9

Vanderbei의 Linear Programming 은 여러 가지 하위 수준의 세부 사항을 다룹니다 . 그러나 다른 답변 / 설명에서 제안한 것처럼 LP 솔버를 구현하는 것은 어렵고 고맙습니다. 기성품 솔버는 아마도 갈 길입니다 ... (일부 오픈 소스 LP 솔버도 있습니다 ...)


6

때때로 기하 급수적으로 행동하는 것은 순진한 구현이 아닙니다. 사실, 모든 알려진 결정 론적 규칙과 무작위 규칙에는 초 다항식 최악의 경우가 있다고 생각합니다. 이 최악의 동작을 생성하는 알려진 입력은 대부분 구조화되어 있으며 관련 질문이 있습니다.

심플 렉스 알고리즘에 대한 병리학 적 인스턴스의 구조

그러나 실제로 SM은 잘 작동합니다. 이것은 약간 교란 된 입력으로 기본적으로 최악의 경우 분석 인 스무딩 분석 을 도입하여 공식화되었습니다 . 이 분석에서 SM은 폴리 타임, 즉 모든 입력 (병리학 적 입력조차도)에 대해 알고리즘이 잘 수행 할 수 있도록 약간의 섭동이 있습니다. 이 통찰력은 폴리 타임에서 수행 되는 무작위 알고리즘 으로 변환되었습니다 . 그러나 내가 이해하는 한이 알고리즘이 '진정한'단순 알고리즘인지 여부에 대해서는 여전히 논쟁의 여지가 있습니다. 표준 패키지 가이 라인을 따라 무언가를 구현하는지 여부도 알지 못하지만 검색 결과 5 세 이상인 것으로 인해 검색하면 일부 구현을 찾을 수 있어야합니다.


1

Luenberger, Ye, Linear and Nonlinear Programming, 3rd ed를 확인할 수 있습니다. 그것은 매우 포괄적 인 것처럼 보이지만 귀하의 질문에 완전히 대답하는지 여부를 아직 충분히 말하지 않았습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.