파이썬을위한 고품질 비선형 프로그래밍 솔버가 있습니까?


77

볼록하지 않은 전역 최적화 문제를 해결해야 할 몇 가지 문제가 있습니다. 현재 MATLAB의 Optimization Toolbox (특히 fmincon()algorithm = 사용 'sqp')를 사용하고 있습니다. 그러나 내 코드의 대부분은 Python이며 Python에서도 최적화를하고 싶습니다. 파이썬 바인딩과 경쟁 할 수있는 NLP 솔버가 fmincon()있습니까? 반드시

  • 비선형 평등과 불평등 제약을 다룰 수있다
  • 사용자가 Jacobian을 제공하도록 요구하지 않습니다.

그것이 글로벌 최적을 보장하지 않는다면 괜찮습니다 ( fmincon()그렇지 않습니다). 나는 도전적인 문제, 심지어보다 조금 느린 경우에도 로컬 최적으로 강력하게 수렴되는 것을 찾고 있습니다 fmincon().

OpenOpt를 통해 사용할 수있는 솔버 중 몇 가지를 시도했으며 MATLAB보다 열등한 것으로 나타났습니다 fmincon/sqp.

강조하기 위해 나는 이미 다루기 쉬운 공식과 좋은 솔버를 가지고 있습니다. 저의 목표는보다 효율적인 워크 플로우를 위해 언어를 변경하는 것입니다.

Geoff는 문제의 일부 특성이 관련 될 수 있다고 지적합니다. 그들은:

  • 10-400 결정 변수
  • 4-100 다항식 등식 제약 (다항식 범위는 1에서 약 8까지)
  • 의사 결정 변수 수의 약 2 배에 해당하는 여러 합리적인 불평등 제약 조건
  • 목적 함수는 결정 변수 중 하나입니다

불평등 제약의 자 코비안 (Jacobian)과 마찬가지로 평등 제약의 자 코비안은 밀도가 높다.


2
데이비드, 이것은 불행히도 완전히 다른 질문입니다.) 지역 최소와 세계의 차이는 잠재적 인 무한한 박사 학위의 주제이며, 무료 자유식 정리 (No Free Lunch Theorem)에 의해 하나의 일반적인 세계 최적화 문제에 대해 좋은 해결책은 다음과 같습니다. 아마 다른 사람에게는 나쁘다. 나는 (? 볼록 근사가 존재 하는가 혼합 정수 형태가 있습니까?) 당신이 배합 옵션을 고려하여 시작하는 것이 좋습니다 수
아론 Ahmadia에게

데이비드, 아론은 좋은 지적을한다. 볼록하지 않은 NLP의 수치 솔루션을 얻는 데있어서 공식화는 반드시 핵심이며, 좋은 솔루션을 신속하게 얻을 수 있습니다. 다른 공식을 고려한 다음 해당 공식의 구조를 사용하여 솔버 선택을 안내하는 것이 좋습니다. 문제를 유발할 수있는 모든 구조 (예 : 희소성, 다단계 확률 적 프로그래밍, 제한 조건을 사용한 컷 생성)를 활용하는 솔버를 사용하는 것이 좋은 솔루션을 얻는 데 중요합니다.
Geoff Oxberry

@DavidKetcheson : 사용하고자하는 공식이 있으므로, 공식의 특성에 대해 적어도 언급 할 수 있습니까? 라그랑 지아의 야곱은 밀도가 높거나 희박합니까? 대략 몇 개의 변수가 있습니까? 귀하의 문제에 적합하지 않은 솔루션 방법을 구현하는 소프트웨어를 추천하는 것은 좋지 않습니다. 이것이 사람들이 처음부터 공식에 대해 이야기하는 유일한 이유입니다.
제프 옥스 베리

coopr는 ASL을 사용 ipopt 바인딩을 제공 : ipopt을
denfromufa

답변:


32

fmincon()앞서 언급했듯이 전역 최적이 발견되었는지 여부를 고려하지 않고 극소값을 찾으려고하는 비선형 최적화에서 잘 알려진 몇 가지 전략을 사용합니다. 이것으로 괜찮다면 질문을 올바르게 표현했다고 생각합니다 (비선형 최적화).

내가 일반적인 비선형 최적화를 위해 알고있는 가장 좋은 패키지는 IPOPT [1]입니다. 분명히 Matthew Xu는 IPOPT에 대한 일련의 Python 바인딩을 유지 하므로 시작할 수 있습니다.

[1] : Andreas Wachter는 개인적인 친구이므로 약간 편견이있을 수 있습니다.


Andreas는 훌륭한 작업을 수행하지만 솔버에는 Jacobian 행렬 정보 (또는 최소한 Jacobian 행렬의 희소성 정보)도 필요합니다. 야곱 행렬을 필요로하지 않는 솔버를 원할 때, 야곱 행렬을 분석적으로 제공 할 필요가없는 (또는 유한 차분 계산으로 충분할) 솔버가 필요하다는 의미입니까? Jacobian 행렬 정보가 전혀 필요하지 않은 솔버 (미분없는 최적화 방법으로 제한)
Geoff Oxberry

잘 잡았습니다. 나는 전자를 의미한다. 질문을 업데이트했습니다.
David Ketcheson

나는 마지막으로 사용하여 내 문제에 IPOPT을 적용 할 수 있었다 sage.openopt.org을 . 대단해!
David Ketcheson

4
오늘 (2017)에는 Python trough Pyomo 에서 IPOPT를 사용할 수도 있습니다 . jacobian과 hessian에 대한 대수 모델링 언어와 자동 diff가 제공됩니다.
Antonello

@Antonello 수정 된 링크는 pyomo.org
Moonwalker

37

혼합 정수 및 비 볼록 문제의 전역 최적화를 수행하는 실험실에서 일하고 있습니다. 오픈 소스 최적화 솔버에 대한 나의 경험은 더 나은 솔루션은 일반적으로 컴파일 된 언어로 작성되며 상용 최적화 패키지와 비교할 때 좋지 않습니다.

Aron이 말했듯이 문제를 명시적인 방정식 시스템으로 공식화하고 무료 솔버가 필요한 경우 IPOPT가 가장 좋습니다. 다른 무료 솔버는 COIN-OR 웹 사이트 에서 찾을 수 있습니다 . 내 지식으로는 비선형 솔버에는 개발자가 제공 한 파이썬 바인딩이 없습니다. 찾은 모든 바인딩은 타사입니다. 좋은 솔루션을 얻으려면 적절한 확률 론적 글로벌 최적화 휴리스틱 스 또는 분기 및 바인딩과 같은 결정 론적 글로벌 최적화 알고리즘에서 찾은 비선형, 볼록 솔버를 래핑해야합니다. 또는 Bonmin 또는 Couenne을 사용할 수 있습니다. 둘 다 최첨단 솔버 인 BARON 과 비교하여 서비스가 잘 수행되는 결정적 비 볼록 최적화 솔버입니다 .

상용 최적화 솔버를 구입할 수있는 경우 여러 비선형 최적화 솔버가 포함 된 GAMS 모델링 언어를 고려할 수 있습니다 . 솔버 CONOPT, SNOPT 및 BARON에 대한 인터페이스가 특히 언급됩니다. (CONOPT와 SNOPT는 볼록 솔버입니다.) 과거에 사용한 kludgey 솔루션은 GAMS 파일에 Fortran (또는 Matlab) 언어 바인딩을 사용하여 GAMS 파일을 작성하고 Fortran (또는 Matlab)에서 GAMS를 호출하여 최적화 문제의 해결책. GAMS에는 Python 언어 바인딩이 있으며 문제가있는 경우 도움을 줄 수있는 매우 반응이 빠른 지원 직원이 있습니다. (면책 조항 : GAMS와 제휴 관계는 없지만 실험실에서 GAMS 라이센스를 소유하고 있습니다.) 상용 솔버보다 더 나쁘지 않아야합니다.fmincon; 사실, 그들이 훨씬 나아지지 않으면 놀랄 것입니다. 문제의 크기가 충분히 작은 경우 GAMS 평가판을 웹 사이트에서 다운로드 할 수 있으므로 GAMS 라이센스 및 솔버를위한 라이센스를 구매하지 않아도됩니다. 그렇지 않으면 GAMS 라이센스와 함께 구매할 솔버를 결정할 수 있습니다. BARON에는 혼합 정수 선형 프로그래밍 솔버가 필요하며 CPLEX 및 GUROBI는 2 개의 최고의 혼합 정수 선형 프로그래밍 솔버에 대한 라이센스가 학계에 무료이므로 GAMS 인터페이스를 구입하는 것만으로도 벗어날 수 있습니다 인터페이스와 솔버 라이센스보다 훨씬 많은 돈을 절약 할 수 있습니다.

위에서 언급 한 결정 론적 비 볼록 최적화 솔버에 대해 모델을 명시적인 방정식 세트로 공식화 할 수 있어야합니다. 그렇지 않으면 볼록하지 않은 최적화 알고리즘이 작동하지 않습니다. 모든 알고리즘이 분기 분석 방식의 알고리즘에 대한 볼록 완화를 구성하기 위해 기호 분석에 의존하기 때문입니다.

UPDATE : 하나의 생각 처음에 나에게 발생하지 않았다 당신은 또한 고급 최적화 (대한 툴킷 부를 수있는 것이 었습니다 TAO )와 PETSc 사용 tao4pypetsc4py을 PETSc와 쉽게 병렬화의 잠재적 추가 혜택을 것, 그리고 활용에 익숙 그리고 ACTS 도구.

업데이트 # 2 : 언급 한 추가 정보를 바탕으로 순차 2 차 프로그래밍 (SQP) 방법이 최선의 방법입니다. SQP 방법은 일반적으로 내부 포인트 방법보다 더 강력한 것으로 간주되지만 밀도가 높은 선형 솔기가 필요하다는 단점이 있습니다. 속도보다 견고성에 더 신경을 쓰므로 SQP가 최선의 방법이 될 것입니다. 파이썬으로 작성된 SQP 솔버를 찾을 수 없습니다 (그리고이 기술 보고서 에서 Argonne의 Sven Leyffer도 마찬가지였습니다 ). SciPy 및 OpenOpt와 같은 패키지로 구현 된 알고리즘에는 일부 SQP 알고리즘의 기본 골격이 구현되어 있지만 고급 코드가 수렴 문제를 극복하기 위해 사용하는 특수 휴리스틱이 없습니다. NLopt를 시도해 볼 수 있습니다, Steven Johnson이 MIT에서 작성했습니다. 내가 아는 평판이 없기 때문에 나는 그것에 대한 높은 희망을 가지고 있지 않지만 Steven Johnson은 좋은 소프트웨어를 작성하는 훌륭한 사람입니다 (결국 그는 FFTW를 공동 작성했습니다). SQP 버전을 구현합니다. 좋은 소프트웨어라면 알려주세요.

TAO가 제한된 최적화 솔버의 방식으로 무언가를 갖기를 희망했지만 그렇지 않았습니다. 당신은 확실히 그들이 쌓아 올린 것을 사용할 수 있습니다. 그들은 거기에 많은 구성 요소가 있습니다. 당신이 지적했듯이, 그렇게하는 것이 훨씬 더 많은 일이 될 것입니다. 만약 당신이 그런 종류의 문제에 직면한다면, 당신은 TAO 개발자 일 것입니다.

추가 정보를 사용하면 Python에서 GAMS를 호출하거나 (옵션 일 경우) IPOPT Python 인터페이스를 패치하려고 할 때 더 나은 결과를 얻을 수 있습니다. IPOPT는 내부 포인트 방법을 사용하므로 강력하지는 않지만 Andreas의 내부 포인트 방법 구현은 Matlab의 SQP 구현보다 훨씬 우수 할 수 있습니다.이 경우 견고성을 희생하지 않을 수 있습니다. 확실하게 알기 위해 몇 가지 사례 연구를 실행해야합니다.

당신은 이미 합리적인 불평등 제약 조건을 다항식 불평등 제약 조건으로 재조정하는 요령을 알고 있습니다 (그것은 당신의 책에 있습니다). 이것이 BARON 및 다른 비 볼록 솔버에 도움이되는 이유는 용어 해석을 사용하여 솔버 수렴을 개선하고 속도를 높이기위한 컷으로 사용할 수있는 추가 유효 불평등을 생성 할 수 있기 때문입니다.

GAMS Python 바인딩 및 IPOPT에 대한 Python 인터페이스를 제외하면 대답은 아닙니다. 아직 Python을위한 고품질 비선형 프로그래밍 솔버가 없습니다. 아마도 @Dominique는 NLPy로 그것을 바꿀 것입니다.

업데이트 # 3 : 파이썬 기반 솔버를 찾을 때 더 많은 찌르기가 PyGMO를 낳았 는데 , 이는 P ++로 C ++ 기반의 글로벌 다 객관적 최적화 솔버 인 PaGMO에 대한 파이썬 바인딩 세트입니다. 다목적 최적화를 위해 만들어졌지만 단일 객관적인 비선형 프로그래밍에 사용할 수 있으며 다른 솔버 중에서도 IPOPT 및 SNOPT에 대한 Python 인터페이스가 있습니다. 유럽 ​​우주국 (European Space Agency) 내에서 개발 되었기 때문에 그 뒤에 커뮤니티가 있기를 바랍니다. 또한 비교적 최근에 릴리스되었습니다 (2011 년 11 월 24 일).


PaGMO는 GPL 라이센스입니다
denfromufa

14

APM Python

업데이트 : 방금 출시 한 새로운 GEKKO 패키지 를 참조하십시오 .

APM Python 은 APOPT, BPOPT, IPOPT 및 기타 솔버에 대한 인터페이스가있는 무료 최적화 도구 상자입니다. 솔버에 첫 번째 (Jacobian) 및 두 번째 (Hessian) 정보를 제공하고 결과를 볼 수있는 선택적 웹 인터페이스를 제공합니다. APM Python 클라이언트는 pip와 함께 설치됩니다.

 pip install APMonitor

다음을 사용하여 Python 스크립트에 설치할 수도 있습니다.

try:
    from APMonitor.apm import *
except:
    # Automatically install APMonitor
    import pip
    pip.main(['install','APMonitor'])
    from APMonitor.apm import *

몇 가지 벤치 마크 테스트를 수행 한 결과 APOPT (액티브 세트 방법)와 IPOPT (인테리어 포인트 방법)를 결합하면 많은 벤치 마크 문제를 해결할 수 있습니다. 다운로드 zip 파일에는 여러 가지 예제 문제점이 포함되어 있습니다. 아마 당신이 시작하고 싶었던 것은 Hock Schittkowski # 71 문제입니다. 가장 간단한 예이며 제한된 최적화 문제를 해결하는 방법을 보여줍니다.

Python / MATLAB에 대한 브라우저 인터페이스와 API가 있습니다. API to Python은 apmonitor.com 홈페이지에서 다운로드 할 수있는 단일 스크립트 (apm.py)입니다. 스크립트가 Python 코드에로드되면 다음과 같은 문제를 해결할 수 있습니다.

  • 비선형 방정식
  • 혼합 정수 비선형 프로그래밍
  • 미분 및 대수 방정식
  • 최소 제곱 모델 피팅
  • 수평선 이동 예측
  • 비선형 모델 예측 제어
  • 기타

새로운 사용자를 위해 APM Python 소프트웨어에는 사용자가 질문을 게시 할 수있는 Google 그룹스 포럼이 있습니다. 운영 연구 및 엔지니어링에서 최적화 문제를 보여주는 웹 세미나가 있습니다.

아래는 최적화 문제 (hs71.apm)의 예입니다.

Model
  Variables
    x[1] = 1, >=1, <=5
    x[2] = 5, >=1, <=5
    x[3] = 5, >=1, <=5
    x[4] = 1, >=1, <=5
  End Variables

  Equations
    x[1] * x[2] * x[3] * x[4] > 25
    x[1]^2 + x[2]^2 + x[3]^2 + x[4]^2 = 40

    minimize  x[1] * x[4] * (x[1]+x[2]+x[3]) + x[3]
  End Equations
End Model

최적화 문제는 다음 Python 스크립트로 해결됩니다.

from APMonitor.apm import *
server = 'http://byu.apmonitor.com'

# Application name
app = 'eqn'

# Clear previous application
apm(server,app,'clear all')

# Load model file
apm_load(server,app,'hs71.apm')

# Option to select solver (1=APOPT, 2=BPOPT, 3=IPOPT)
apm_option(server,app,'nlc.solver',3)

# Solve on APM server
solver_output = apm(server,app,'solve')

# Display solver output
print(solver_output)

# Retrieve results
results = apm_sol(server,app)

# Display results
print('--- Results of the Optimization Problem ---')
print(results)

# Display Results in Web Viewer 
url = apm_var(server,app)
print("Opened Web Viewer: " + url)

APM Python은 최적화를위한 무료 웹 서비스입니다. 원격 서버에서 최적화 문제가 해결되고 결과가 로컬 Python 스크립트로 반환됩니다. 인터넷 연결이 필요하지 않도록 APMonitor 로컬 서버도 다운로드 할 수 있습니다 ( 다운로드 서버 ). 최근 MATLAB과 Python 모두에 대한 병렬 처리 지원을 추가했습니다. Python 모듈은 Python 2.7 또는 Python 3+와 호환됩니다.


2
John, APM Python을 무료로 사용할 수 있지만 패키지에 로컬로 사용하는 솔버가 포함되어 있는지 또는 계산을 수행하기 위해 AP 모니터 웹 사이트에 연결해야하는지 여부를 알 수는 없습니다. 어느 쪽이 궁금합니다.
Aron Ahmadia

3
Aron, MATLAB 또는 Python 스크립트는 최적화 문제를 해결하기 위해 APM 서버에 인터넷 연결이 필요합니다. 이것은 많은 장점과 단점이 있습니다. 긍정적 인 측면에서, 최적화를위한 웹 서비스는 플랫폼 간 호환성, 일부 상용 솔버에 대한 무료 액세스 및 사용자에게 투명한 소프트웨어 업그레이드를 허용합니다. 단점은 APM이 일부 오픈 소스 대안만큼 유연하지는 않지만 최적화 응용 프로그램을위한 턴키 솔루션을 선호하는 산업 사용자를 위해 설계되었습니다.
John Hedengren

@JohnHedengren 저는 MATLAB에서 다른 라이브러리를 사용하여 최적화 문제 자체를 구성하는 특정 사전 계산을 가지고 있습니다. 특히 제약 조건에는 이러한 외부 호출이 포함됩니다. APM이 여전히이 목적에 적합하다고 생각하십니까?
gpavanb

일반적인 용어는 블랙 박스 최적화라고 생각합니다.
gpavanb

@gpavanb APMonitor 패키지는 모델링 언어로 방정식을 작성해야합니다. 외부 코드를로드하는 한 가지 옵션은 잔차를 제공하고 최소한 분석적인 1 차 도함수를 제공하는 객체를 만드는 것입니다. 우리는 일반적으로 다음과 같은 속도로 F90에서 이러한 객체를 코딩합니다. apmonitor.com/wiki/index.php/Main/Objects APMonitor가 블랙 박스 최적화 응용 프로그램에 가장 적합한 옵션이라고 생각하지 않습니다.
John Hedengren

7

이것이 귀하의 질문에 완전히 대답하는 것은 아니지만, NLPy라는 비선형 프로그래밍을위한 Python 패키지를 작성합니다. 최신 버전은 https://github.com/dpo/nlpy 에서 검색 할 수 있습니다.

NLPy는 연구 등급이며 IPOPT와 같은 노련한 코드만큼 강력하지는 않습니다. 더욱이 그들은 현재 야곱 인을 요구합니다. 그러나 NLPy의 요점은 연구자가 필요에 따라 맞춤형 솔버를 조립하는 데 필요한 도구를 제공하는 것입니다. 어쨌든 시도해 보면 오프라인에서 귀하의 의견을 듣고 싶습니다. 관련 패키지 https://github.com/dpo/pykrylovhttps://github.com/dpo/pyorder가 유용 할 수도 있습니다 . 현재 NLPy의 문서는 확실히 부족하다. 다른 두 사람은 합리적이어야합니다.


7

pyomo 는 python에서 최적화하기위한 완전한 GAMS / AMPL 유사 모델링 환경입니다. 그것은 매우 강력하고 AMPL에 의해 지원되는 모든 솔버에 대한 인터페이스를 가지고 있으며 Jacobians 등을 자동으로 생성합니다. 그러나 '가상 파이썬 환경'에서 실행되기 때문에 기존 코드에 연결하는 것이 쉽지 않을 수 있습니다.


5

GEKKO 파이썬

최근 GEKKO Python 패키지를 출시했습니다 (2018).활성 세트 및 내부 포인트 방법이있는 IPOPT, APOPT, BPOPT, MINOS 및 SNOPT와 같은 솔버를 사용한 비선형 프로그래밍 용. 이러한 솔버를 사용할 때의 문제 중 하나는 일반적으로 최소한 1 차 파생 상품 및 선택적으로 2 차 파생 상품을 제공해야한다는 것입니다. 다른 답변에서 언급했듯이이를 수행 할 수있는 멋진 모델링 언어가 몇 가지 있습니다. GEKKO는 방정식을 바이트 코드로 컴파일하여 속도 측면에서 Fortran 또는 C ++로 모델을 작성한 것과 같습니다. 자동 미분은 기울기 기반 솔버에 희소 형태의 1 차 및 2 차 미분을 제공합니다. 최적의 제어 문제를 위해 GEKKO를 설계했지만 fmincon과 유사한 문제를 해결할 수도 있습니다. 다음은 평등 및 불평등 제약 조건이있는 비선형 프로그래밍 문제의 간단한 예입니다. 너 먼저'

pip install gekko

호크 Schittkowski 문제 # 71은 목적 함수, 부등식 제한 평등 제약, 및 상부 및 하부 경계를 가지는 네 개의 변수의 예로서 아래와 같다.

from gekko import GEKKO
m = GEKKO() # Initialize gekko
# Initialize variables
x1 = m.Var(value=1,lb=1,ub=5)
x2 = m.Var(value=5,lb=1,ub=5)
x3 = m.Var(value=5,lb=1,ub=5)
x4 = m.Var(value=1,lb=1,ub=5)
# Equations
m.Equation(x1*x2*x3*x4>=25)
m.Equation(x1**2+x2**2+x3**2+x4**2==40)
m.Obj(x1*x4*(x1+x2+x3)+x3) # Objective
m.options.IMODE = 3 # Steady state optimization
m.solve() # Solve
print('Results')
print('x1: ' + str(x1.value))
print('x2: ' + str(x2.value))
print('x3: ' + str(x3.value))
print('x4: ' + str(x4.value))    

GEKKO는 모든 플랫폼 (Windows, MacOS, Linux, ARM 프로세서) 및 Python 2.7 및 3+에서 작동합니다. "remote = False"옵션을 설정하면 인터넷에 연결하지 않고도 완전 로컬 옵션을 사용할 수 있습니다. 로컬 옵션은 현재 Windows에서만 사용할 수 있으며 인터넷, 인터넷없이 로컬에서 실행하기 위해 Linux, MacOS, ARM 프로세서와 같은 다른 버전에서 작업하고 있습니다. 로컬 버전에는 라이센스가 필요없는 무료 솔버 만 포함됩니다. 기본적으로 문제는 솔루션이 계산되어 Python으로 반환되는 공용 서버로 전송됩니다.

이 질문은 특히 파이썬에서 비선형 프로그래밍을 해결하는 것에 관한 것이지만, GEKKO가 해결할 수있는 몇 가지 다른 유형의 문제와 학습 최적화를위한 몇 가지 리소스도 강조하겠습니다. GEKKO는 또한 혼합 정수 및 미분 대수 방정식을 해결하고 고급 제어 (DMC, RMPCT 등과 유사)를 위해 미리 프로그래밍 된 여러 개체를 가지고 있습니다. 작동 모드에는 데이터 조정, 실시간 최적화, 동적 시뮬레이션 및 비선형 예측 제어가 포함됩니다.

최적화 ( 디자인 최적화동적 최적화 ) 에 대한 두 가지 과정을 가르치고 온라인으로 과정 자료를 게시했습니다. 동적 최적화 과정은 매년 1 월부터 제공되며 GEKKO Python 패키지 (및 MATLAB)를 과정에 사용합니다. GEKKO는 APMonitor Optimization Suite의 확장이지만 Python과 모델링 및 솔루션 시각화를 직접 통합했습니다. APMonitor 및 GEKKO 참조 는이 패키지로 해결할 수있는 응용 프로그램 유형의 샘플을 제공합니다. GEKKO는 National Science Foundation Research Grant # 1547110에 따라 개발되었습니다 .


소프트웨어가 게시물에 언급 된 특정 요구 사항을 어떻게 처리하는지 설명하기 위해 답변을 편집 할 수 있습니까? 그렇지 않으면 이것은 질문에 대한 답변이 아닌 담요 광고 게시물처럼 보입니다 (그리고 닫힐 것입니다).
Christian Clason

기독교인, 나는 그 질문에 더 구체적으로 답변을 편집했습니다. GEKKO 및 온라인 과정에 대한 추가 정보를 끝까지 옮겼지만 필요한 경우 제거 할 수 있습니다.
John Hedengren

4

1
고맙지 만, 그것은 내가 시도한 것입니다 (OpenOpt를 통해 추가 인터페이스를 제공합니다). fmincon / sqp보다 결코 나 았으며 후자가 성공한 많은 경우에 실패했습니다.
David Ketcheson

1
업데이트 : SciPy에서 직접 시도했습니다. fmincon이 몇 초 안에 지속적으로 전역 최적을 찾을 수있는 문제에서도 실패합니다.
David Ketcheson

4

PyGMO 에는 동일한 인터페이스를 제공하는 여러 솔버가 포함되어 있습니다. 코드를 컴파일하고 타사 코드를 독립적으로 다운로드 / 설치하는 경우 IPOPT 및 scipy slsqp가 포함됩니다.

보너스로, 솔버의 병행 사용은 군도 클래스를 통해 정말 쉽게 (멀티 스타트)됩니다!


3

Stephen Boyd의 볼록 최적화 소프트웨어 주위에 Python 래퍼 인 cvxmod 가 있습니다 . Sage 패키지 의 일부입니다 .


그러나 OP는 볼록하지 않은 최적화 문제에 대해 묻고 있습니다.
Alejandro

1
OP는 비 볼록 최적화 문제를 요구하고 있지만, 지금까지 언급 한 모든 솔버는 추가적인 메타 휴리스틱 (멀티 스타트 또는 결정 론적, 목적 함수와 제약 조건의 완화가 필요한 비선형, 볼록 최적화 솔버) 또는 분기 및 경계와 유사한 알고리즘 (예 : 분기 및 경계, 분기 및 컷, 분기 및 축소). 이 답변은 12 월 11 일에 언급 된 다른 것보다 나쁘지 않습니다.
Geoff Oxberry

제프, 볼록하지 않은 문제에 cvxmod를 어떻게 적용 할 수 있습니까?
David Ketcheson

나는 소프트웨어를 사용하지 않았지만 이론 상으로는 다른 볼록 솔버와 마찬가지로 fmincon (볼록 솔버)을 사용하는 것과 마찬가지로 로컬에서 최적의 솔루션을 찾는 데 사용합니다. 이를 사용하는 한 가지 방법은 다중 시작입니다. 볼록 솔버의 초기 추측으로 사용할 점 목록을 생성하십시오. 추측으로 사용 된 각 포인트에 대해 솔버가 반환 한 솔루션을 기록합니다. 반환 된 모든 솔루션에 대한 최소 목적 함수 값에 해당하는 점은 전체 최적 값에 가장 근접한 것입니다.
Geoff Oxberry

1
@Geoff : 예, 멀티 스타트를 사용하고 있습니다. CVXMOD는 훈련 된 볼록 프로그래밍 측면에서 표현할 수있는 문제 만 받아들입니다. 일반적인 비선형 프로그래밍 문제는 불가능합니다. 당신이 말했듯이, 나는 내 문제와 비슷한 연속적인 볼록한 이완을 찾을 수 있지만 여기서의 전체 목표는 내가 적은 일을하는 것입니다.
David Ketcheson


3






2014b 릴리즈부터는 이제 Matlab에서 직접 지원됩니다. mathworks.de/help/matlab/matlab-engine-for-python.html
Christian Clason 2013

@Christian Clason, 그것은 numpy-to-Matlab을 전혀하지 않는 것 같습니다. python-matlab-bridge처럼. (나는 그것을 사용하지 않았습니다.)
49 분

직접적이지 않지만 (맞춤형 matlab 배열 클래스가있는 것 같습니다), 그와 numpy 사이를 변환하는 방법이 있습니다. 물론 데이터 복사로 인해 약간의 오버 헤드가 있지만 OP가 언급 한 문제 크기에 대해서는 문제가되지 않습니다. (그냥 옵션을 지적 줄 알았는데 그것을 자신을 사용하지 않았습니다.)
기독교 Clason


2

CMA-ES는 어떻습니까? 그것은 파이썬 바인딩을 가지고 있으며 볼록하지 않은 비선형 최적화 문제에 매우 적합하며 꽤 많이 사용했습니다 : https://www.lri.fr/~hansen/cmaesintro.html

핍을 통한 설치 :

pip install cma

웹 사이트의 샘플 코드는 다음과 같습니다.

import cma
help(cma)  # "this" help message, use cma? in ipython
help(cma.fmin)
help(cma.CMAEvolutionStrategy)
help(cma.CMAOptions)
cma.CMAOptions('tol')  # display 'tolerance' termination options
cma.CMAOptions('verb') # display verbosity options
res = cma.fmin(cma.Fcts.tablet, 15 * [1], 1)
res[0]  # best evaluated solution
res[5]  # mean solution, presumably better with noise

이 옵티마이 저는 OP가 요구하는 것과는 거리가 멀다. 예를 들어 CMA-ES를 사용하여 동등성 또는 부등식 제약 조건을 처리하는 방법은 명확하지 않습니다.
아르

1

MATLAB은 JIT 컴파일러를 가지고 있지만 CPython은 아직 (적어도 pypy가 완전히 지원할 때까지) 그렇지 않습니다. 상용 제품보다 우수한 무료 솔버를 원하는 것 같습니다 fmincon. 너무 많지 않습니까?

상업용 NLP 솔버 중 IIRC는 snopt만이 Python API를 제공했습니다.

어떤 OpenOpt 솔버를 사용해 보셨습니까? 볼록하지 않은 작업에 얼마나 많은 변수와 제약이 있습니까?

OpenOpt Sage 서버 에 설치하지 않고 OpenOpt / Funcdesigner API를 통해 IPOPT를 시도 할 수 있습니다 ( "세이지에서 파이썬으로 전환"그림에주의하십시오).

10300(x0.1)2+10300(y0.2)2(x,y)=(1,1)


2
주의 깊게 읽으면 fmincon과 비슷한 견고성을 가진 것을 요구하고 있습니다. 더 나을 필요는 없으며 느려질 수도 있습니다.
David Ketcheson


1

여기서 Google Ceres 솔버는 실제로 많은 프로젝트에서 사용되는 매우 강력한 비선형 최적화 프로그램이라는 점을 언급하는 것이 좋습니다.

파이썬 래퍼도 있습니다 : https://github.com/rll/cyres


Levenbeg-Marquardt 아닌가요? 이는 좋은 반면, 지금까지 영업 이익이 원하는 것을에서입니다
데니스

ceres는 정말 좋은 솔버이지만 등식 제약 조건을 전혀 지원하지 않으며 (현재 버전 1.12 기준) 매개 변수의 상한 / 하한으로 불평등 제약 조건 만 지원합니다.
orzechow

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