답변:
오픈 소스를 원한다면 COIN의 CBC 코드를 사용해보십시오 (지점 및 가격 프레임 워크 또는 SYMPHONY와 같은 다른 MILP 솔버도 있습니다).
Gurobi와 CPLEX는 상당히 빠르며 2011 년 또는 2012 년 INFORMS 회의에서 Gurobi는 CPLEX보다 빠릅니다 (성능 지표는 물론 문제에 따라 다릅니다). 논문에서 해결 된 MILP에서 Gurobi는 CBC보다 약 15-100 배 더 빠르며 CPLEX는 Gurobi와 거의 비슷하지만 매우 느리지 만 (12-80 배 더 빠름).
최악의 성능은 실제로 기하 급수적이지만 실행 시간은 문제 구조에 따라 크게 달라집니다. 특별한 구조를 활용하지 않는 한 (수많은 더 작은 문제로 분해 될 수있는 확률 론적 프로그램 인 경우가 아니라면) 수백만 개의 변수로 MILP를 해결할 수는 없을 것 같지만 수천 개의 분 안에 변수. (물론 이러한 문제를 해결하는 데 1 시간 이상 걸릴 수도 있습니다.)
Brian Borchers가 지적한 것처럼 CPLEX와 Gurobi는 일부 연구원들에게 무료 라이센스를 제공하고 있습니다.이 두 소프트웨어 패키지 중 하나는 범용 MILP 솔버로 사용하는 것이 가장 좋습니다.
혼합 정수 선형 프로그래밍 문제는 선형 프로그래밍 문제보다 해결하기가 훨씬 어렵습니다. 계산 복잡성 측면에서 LP를 다항식 시간으로 해결할 수 있으며 MILP를 해결하는 것은 NP-Hard 문제입니다. MILP 해결을위한 알려진 알고리즘은 기하 급수적으로 최악의 복잡성을가집니다.
SCIP (학업 용 무료), CPLEX (상업용이지만 학술 용 라이센스 옵션이 있음) 및 GUROBI (학업 용 라이센스 옵션과 함께 상용)를 포함하여 볼 수있는 혼합 정수 선형 프로그래밍을위한 다른 소프트웨어 패키지가 있습니다. 이러한 패키지 중 일부는 문제에서 GLPK보다 훨씬 빠를 수 있지만 비슷한 크기의 LP를 해결할 때 MILP를 해결하는 데 거의 빠를 것으로 기대하지는 않습니다.
여러 가지 솔버를 시도하려면 Julia의 JuMP 모델링 프레임 워크 를 사용해보십시오. 모델을 JuMP 모델로 작성한 다음 한 줄의 코드로 솔버를 전환 할 수 있습니다. 예를 들어 MILP 문제의 경우 Bonmin, Cbc, Couenne, CPLEX, GLPK, Gurobi 및 MOSEK 솔버 중에서 선택할 수 있습니다. 이 때문에 JuMP로 작성하면 Geoff가 언급 한 모든 솔버를 시도하고 많은 코드를 작성하지 않고도 작동하는 것을 볼 수 있습니다. 자신의 개인 테스트는 문제에 가장 빠른 알고리즘이 무엇인지에 대한 최고의 지식 소스가 될 것입니다.
@code_llvm
접착제 코드가 본질적으로 아무것도 아닌지 확인하기 위해 실제로 어셈블리 코드를 확인하기 위해 확인할 수 있습니다 (Julia는 함수 포인터와 C / Fortran과 동일한 비트 배열을 순진하게 사용하기 때문입니다).
다른 사람들의 제안에 따라 많은 프로젝트에 (상업용) GAMS 를 사용했습니다. 매우 간단합니다. 당신이해야 할 일은 문제의 수학 공식을 배치하는 것입니다. 변수, 제약, 목적 함수 및 모든 입력 데이터를 선택합니다. 그런 다음 모든 경우에 대해 다양한 솔버 (최적화 프로그램)를 제공합니다. 경우에 따라 더 정교한 솔버를 추가합니다.
확실히, EASY 는 살펴볼 가치가 있습니다. 오픈 소스 프레임 워크.
"빠른"이라는 용어는 매우 모호합니다! 좀 더 구체적이어야합니다. 반복 횟수면에서 빠릅니까? 평가 횟수? 경과 시간? 이것들의 조합?
그러나 소프트웨어를 찾지 않고 문제를 해결하려는 경우 평판과 성능이 매우 뛰어난 오픈 소스 최적화 프로그램 인 글로벌 최적화 도구 NSGA-II를 사용하는 것이 좋습니다.
자세한 정보를 제공 한 경우 정확하게 안내해 드릴 수 있습니다.