2012-05-22 2 views
24

선형 프로그래밍 모델을 만들어야합니다.선형 프로그래밍?

6x + 4y <= 24 
x + 2y <= 6 
-x + y <= 1 
y <= 2 

내가 이러한 불평등에 의해 기술 영역을 찾아야하고, 그래프에 그늘을뿐만 아니라, 경계 라인의 정점을 추적 : 저는 여기에 (예를 들어)를 사용하고있어 불평등은 이 영역의 경계 선을 다른 색상으로 그립니다. 내가 찾는 것에 대한 예는 아래의 그래프를 참조하십시오.

image of the points of intersection.

저는 파이썬 3.2, numpy 및 matplotlib를 사용하고 있습니다. 파이썬에서 선형 프로그래밍을위한 더 좋은 모듈이 있습니까?

+1

1 단계는 불평등 시스템을 행렬 형식으로 변환합니다. –

+1

@izomorphius 위키 백과에 따르면 선형 프로그래밍은 수학적 최적화입니다. http://en.wikipedia.org/wiki/Linear_programming – XORcist

+0

@ möter 동의 - 내 의견을 삭제합니다. 실수는 Op가 아니라 내 것이다. –

답변

40

업데이트 : 대답은 지난 사년에서 다소 구식이되었다, 여기에 업데이트입니다. 당신은 많은 옵션이 있습니다

  • 당신이 에없는 경우는 파이썬이 그 때하는 모델링 langage에서이 작업을 수행 개인적으로 Any good tools to solve integer programs on linux?

  • 내가 볼 훨씬 더 쉽게 하는 것입니다 Gurobi 파이썬 API를 통해이 일을 사용하십시오. 상업용 폐쇄 소스 제품이지만 학술 연구는 무료입니다.

  • SciPy는 선형 프로그래밍 : scipy.optimize.linprog을 제공합니다. (나는이 일을 해본 적이 있다.)

  • PuLP 사용하면 MPSLP files 다음 가 명령 줄 인터페이스를 통해 GLPK, 코인 CLP/CBC, CPLEX, 또는 XPRESS로 해결 만들 수 있습니다. 이 방법은 장점이 있으며 단점이 있습니다.

  • 분명히 CVXOPTPython interface to GLPK을 제공하며, 나는 을 알지 못했습니다. 나는 지금 GLPK을 8 년 동안 사용해 왔으며 GLPK를 강력히 추천합니다. examples and tutorial of CVXOPT 정말 멋지다!

  • 다른 가능성은 위키 피 디아 GLPK/Python에서 찾을 수 있습니다. 이것들 중 많은 것들이 GLPK에 반드시 으로 표시되어있는 것은 아닙니다.

+4

+1 "올바른 도구 사용". – djechlin

+0

PuLP, GLPK, CPLEX 또는 Gurobi를위한 멋진 파이썬 인터페이스를 사용하십시오. –

+2

익명 downvotes는 아무도 도움이되지 않습니다. 답이 무엇이 잘못 되었습니까? – Ali

17

Python의 볼록 최적화 문제를 해결하기 위해 cvxopt 패키지를 권하고 싶습니다. 선형 프로그램을위한 파이썬 코드의 간단한 예는 cvxopt의 문서 에 있습니다.

3

그래프가 선형 프로그램을 해결하는 데 사용되는 유일한 시간은 숙제 문제입니다. 다른 모든 경우 선형 선형 문제는 행렬 선형 대수를 통해 해결됩니다.

Python의 경우 일부 순수 Python 라이브러리가 있지만 대부분의 사람들은 Python 바인딩이있는 원시 라이브러리를 사용합니다. 선형 프로그래밍을위한 다양한 무료 및 상업 라이브러리가 있습니다. 자세한 목록은 Wikipedia의 Linear Programming 또는 OR/MS Today의 Linear Programming Software Survey을 참조하십시오.

면책 조항 : 저는 현재 Gurobi Optimization에서 근무했으며 이전에는 CPLEX를 제공 한 ILOG에서 근무했습니다.

+6

숙제와 일 사이에 학습에 대한 열정도 있습니다 - 제가 쓴 첫 번째 문장은 제자리에 없다고 생각합니다 ... – siemanko

+0

선형 프로그래밍 문제 중 가장 빠른 것은 어느 것입니까? – Royi

0

PuLP 파이썬 패키지를 사용하는 것이 좋습니다. 그것은 좋은 인터페이스를 가지고 있으며 당신은 LP를 해결하기 위해 다양한 유형의 알고리즘을 사용할 수 있습니다.

0

lpsolve는 나에게 가장 쉽습니다. 별도의 솔버를 설치할 필요가 없습니다. 패키지와 함께 제공됩니다.

2

선형 프로그래밍 문제를 해결하려면 Simplex 알고리즘을 사용하는 SciPy에서 scipy.optimize.linprog 모듈을 사용할 수 있습니다.

0

다른 답변은 해결사 목록을 제공하는 데 도움이되었습니다. 그러나 PuLP만이 LP 모델을 공식화하는 Python 라이브러리로 언급되었습니다.

다른 훌륭한 옵션은 Pyomo입니다. PuLP와 마찬가지로 문제를 해결사에게 보내고 솔루션을 다시 파이썬으로 읽을 수 있습니다. 솔버 매개 변수를 조작 할 수도 있습니다. 클래스 메이트와 나는 2015 년에 PuLP와 Pyomo의 성능을 비교해 보았고 Pyomo가 PuLP보다 동일한 문제에 대해 .LP 파일을 몇 시간 빨리 생성 할 수 있다는 것을 알았습니다.

관련 문제