Python用の高品質な非線形プログラミングソルバーはありますか?


77

解決すべきいくつかの挑戦的な非凸のグローバル最適化問題があります。現在、MATLABのOptimization Toolbox(特にfmincon()algorithm ='sqp'を使用)を使用していますが、これは非常に効果的です。ただし、私のコードのほとんどはPythonで作成されているため、Pythonでも最適化を行いたいと考えています。競合できるPythonバインディングを備えたNLPソルバーはありfmincon()ますか?ちがいない

  • 非線形等式および不等式の制約を処理できる
  • ユーザーがヤコビアンを提供する必要はありません。

グローバルな最適化を保証していなくても構いません(保証fmincon()しません)。私は、困難な問題や、それよりもわずかに遅い場合でも、ローカル最適にロバストに収束するものを探していfmincon()ます。

OpenOptで利用できるソルバーをいくつか試しましたが、MATLABのソルバーより劣っていfmincon/sqpます。

強調するために、私はすでに扱いやすい定式化と優れたソルバーを持っています。私の目標は、ワークフローをより合理化するために、単に言語を変更することです。

Geoffは、問題のいくつかの特性が関連している可能性があると指摘しています。彼らです:

  • 10-400の決定変数
  • 4〜100の多項式等式制約(1〜8の範囲の多項式次数)
  • 決定変数の数の約2倍に等しい合理的な不等式制約の数
  • 目的関数は決定変数の1つです

不等式制約のヤコビアンと同様に、等式制約のヤコビアンは密です。


2
デイビッド、これは残念ながら完全に異なる質問です:)極小とグローバルの違いは潜在的な無限数のPhDの主題であり、フリーランチ定理によれば、1つの一般的なグローバル最適化問題に適したソルバーは別の人にとっては間違いなく悪い。定式化オプションを検討することから始めることをお勧めします(混合整数形式はありますか?凸近似は存在しますか?)
Aron Ahmadia

デビッド、アロンは良い点を指摘しています。すぐに良い解を得るのは言うまでもなく、非凸NLPの数値解を得るという点では、定式化は間違いなく重要です。代わりの定式化を検討し、それらの定式化の構造を使用してソルバーの選択をガイドする価値があるかもしれません。問題で誘発する可能性のある構造(スパース性、マルチステージの確率的プログラミング、制約を使用したカットの生成など)を活用するソルバーを使用することが、優れたソリューションを得るための鍵となります。
ジェフオックスベリー

@DavidKetcheson:使用したい製剤があるので、少なくともその製剤の特性についてコメントしていただけますか?ラグランジアンのヤコビアンは密か疎ですか?およそいくつの変数がありますか?あなたの問題に適していない解決方法を実装するソフトウェアを推奨することは私たちにとって良くありません。それが人々が最初に製剤について話している唯一の理由です。
ジェフオックスベリー

cooprは、asl:ipopt
denfromufa

回答:


32

fmincon()、あなたが言ったように、非線形最適化でよく知られているいくつかの戦略を採用し、グローバルな最適化が見つかったかどうかをあまり考慮せずにローカルな最小値を見つけようとします。これで問題なければ、質問を正しく表現したと思います(非線形最適化)。

一般的な非線形最適化のために私が知っている最高のパッケージはIPOPT [1]です。どうやらMatthew XuがIPOPTへのPythonバインディングのセットを維持しているので、これはどこかで開始するかもしれません。

[1]:Andreas Wachterは個人的な友人なので、少し偏見があるかもしれません。


アンドレアスは良い仕事をしますが、彼のソルバーはヤコビ行列情報(または少なくとも、ヤコビ行列のスパース性情報)も必要とします。ヤコビアンマトリックスを必要としないソルバーが必要だと言うとき、ヤコビアンマトリックスを解析的に提供する必要がない(つまり、有限差分計算で十分な)ソルバーが必要ですか?ヤコビ行列情報をまったく必要としないソルバー(これは、微分のない最適化手法に制限されます)?
ジェフオックスベリー

良いキャッチ。私は前者を意味します。質問を更新しました。
デビッドケッチャソン

sage.openopt.orgを使用して、問題にIPOPTを適用できました。それは素晴らしい!
デビッドケッチャソン

4
今日(2017)、PythonトラフPyomoで IPOPTを使用することもできます。ヤコビアンとヘシアンの代数モデリング言語と自動差分を取得します。
アントネッロ

@Antonello修正されたリンクはpyomo.org
Moonwalker

37

私は、混合整数問題と非凸問題のグローバルな最適化を行うラボで働いています。オープンソースの最適化ソルバーでの私の経験では、優れたものは通常コンパイルされた言語で書かれており、市販の最適化パッケージに比べて貧弱です。

Aronが言ったように、問題を明示的な方程式系として定式化でき、無料のソルバーが必要な場合、最善の策はおそらくIPOPTでしょう。他の無料のソルバーは、COIN-OR Webサイトで見つけることができます。私の知る限り、非線形ソルバーには開発者が提供するPythonバインディングがありません。見つけたバインディングはすべてサードパーティになります。良い解を得るには、適切な確率的グローバル最適化ヒューリスティック、または分岐限定などの決定論的グローバル最適化アルゴリズムで見つかった非線形凸ソルバーをラップする必要があります。あるいは、BonminまたはCouenneを使用することもできます。どちらも確定的な非凸最適化ソルバーであり、最先端のソルバーであるBARONと比較して十分なパフォーマンスを発揮します。

市販の最適化ソルバーを購入できる場合は、いくつかの非線形最適化ソルバーを含むGAMSモデリング言語を検討することを検討してください。特に言及されているのは、ソルバーCONOPT、SNOPT、およびBARONへのインターフェースです。(CONOPTとSNOPTは凸ソルバーです。)私が過去に使用した賢明な解決策は、GAMSへのFortran(またはMatlab)言語バインディングを使用してGAMSファイルを記述し、Fortran(またはMatlab)からGAMSを呼び出して最適化問題の解決。GAMSにはPython言語バインディングがあり、非常に反応の良いサポートスタッフが問題があれば助けてくれます。(免責事項:私はGAMSに所属していませんが、私のラボはGAMSライセンスを所有しています。)商用ソルバーは、fmincon; 実際、それらがそれほど良くなければ驚くでしょう。問題のサイズが十分に小さい場合、GAMSの評価版がWebサイトからダウンロードされる可能性があるため、GAMSライセンスとソルバーへのライセンスを購入する必要さえありません。それ以外の場合は、GAMSライセンスと併せて購入するソルバーを決定する必要があります。BARONには混合整数線形計画法ソルバーが必要であり、2つの最高の混合整数線形計画法ソルバーCPLEXとGUROBIのライセンスは学者には無料であるため、GAMSインターフェイスを購入するだけで済むことは注目に値しますインターフェイスとソルバーのライセンスよりも、かなりのお金を節約できます。

この点は繰り返します。前述の決定論的な非凸最適化ソルバーの場合、モデルを明示的な方程式のセットとして定式化できる必要があります。そうしないと、非凸最適化アルゴリズムは機能しません。これらはすべて、シンボリック分析に依存して、分枝限定アルゴリズムの凸緩和を構築するためです。

UPDATE:最初に私に起こっていなかった一つの考えはあなたにも高度な最適化(のためのツールキットを呼び出すということでしたTAO)とPETScを使用してtao4pypetsc4pyを簡単に並列化の潜在的な付加的な利点を有することになる、とPETScに精通して活用およびACTSツール。

更新#2:あなたが言及した追加情報に基づいて、逐次二次計画法(SQP)メソッドが最善の策です。SQP法は一般に内点法よりも堅牢であると考えられていますが、密な線形解を必要とするという欠点があります。速度よりも堅牢性を重視するため、SQPが最善の策です。Pythonで書かれた優れたSQPソルバーを見つけることはできません(このテクニカルレポートでは、アルゴンヌのSven Leyfferも見つかりませんでした)。SciPyやOpenOptのようなパッケージに実装されているアルゴリズムには、いくつかのSQPアルゴリズムの基本的なスケルトンが実装されているが、より高度なコードが収束の問題を克服するために使用する特殊なヒューリスティックがないと推測しています。NLoptを試すことができます、MITのSteven Johnsonによって書かれました。私はそれを知っているという評判がないので、私はそれに対して大きな希望を持っていませんが、スティーブン・ジョンソンは良いソフトウェアを書く素晴らしい人です(結局、彼はFFTWを共同で書きました)。SQPのバージョンを実装します。良いソフトウェアであれば、私に知らせてください。

TAOが制約付き最適化ソルバーの方法で何かを持っていることを望んでいましたが、そうではありません。あなたは確かにそれらを構築するために持っているものを使用することができます; それらには多くのコンポーネントがあります。しかし、あなたが指摘したように、あなたがそれを行うのははるかに多くの仕事になるでしょう、そしてあなたがそのようなトラブルに行くなら、あなたはTAO開発者であるかもしれません。

その追加情報を使用すると、PythonからGAMSを呼び出す(それがオプションである場合)か、IPOPT Pythonインターフェイスにパッチを適用しようとすると、より良い結果が得られる可能性が高くなります。IPOPTは内点法を使用するため、それほど堅牢ではありませんが、多分Andreasの内点法の実装は、MatlabのSQPの実装よりもかなり優れている可能性があります。確実に知るために、いくつかのケーススタディを実行する必要があります。

有理不等式の制約を多項式不等式の制約として再定式化するトリックはすでにご存知です(これは本の中にあります)。これがBARONおよびその他の非凸ソルバーに役立つ理由は、用語解析を使用して、ソルバーの収束を改善および高速化するためのカットとして使用できる追加の有効な不等式を生成できるためです。

GAMS PythonバインディングとIPOPTへのPythonインターフェイスを除き、答えはノーです。Python用の高品質な非線形プログラミングソルバーはまだありません。たぶん@DominiqueはNLPyでそれを変えるでしょう。

更新#3:Pythonベースのソルバーを見つけるためのより多くの野生の突き刺しは、C ++ベースのグローバル多目的最適化ソルバーであるPaGMOへのPythonバインディングのセットであるPyGMOをもたらしました。多目的最適化のために作成されましたが、単一目的の非線形プログラミングにも使用でき、他のソルバーの中でもIPOPTおよびSNOPTへのPythonインターフェイスを備えています。それは欧州宇宙機関内で開発されたので、うまくいけばその背後にコミュニティがあります。また、比較的最近リリースされました(2011年11月24日)。


PaGMOがライセンスGPLであることに注意してください
denfromufa

14

APM Python

更新:リリースしたばかりの新しいGEKKOパッケージを参照してください。

APM Pythonは、APOPT、BPOPT、IPOPT、およびその他のソルバーへのインターフェースを備えた無料の最適化ツールボックスです。ソルバーに最初の情報(ヤコビアン)と2番目の情報(ヘシアン)を提供し、結果を表示するためのオプションのWebインターフェイスを提供します。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があります。PythonのAPIは、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は、最適化のための無料のWebサービスです。最適化の問題はリモートサーバーで解決され、結果はローカルPythonスクリプトに返されます。インターネット接続が必要ないように、APMonitorローカルサーバーもダウンロードできますダウンロードサーバー)。最近、MATLABとPythonの両方の並列処理サポートを追加しました。Pythonモジュールは、Python 2.7またはPython 3+と互換性があります。


2
ジョン、私はAPM Pythonが無料で利用できることを知っていますが、ローカルで使用するソルバーが含まれているか、計算を行うためにAPモニターWebサイトへの接続が必要かどうか、パッケージを見てもわかりません。どちらに興味がありますか。
アロンアーマディア

3
Aron、MATLABまたはPythonスクリプトは、最適化の問題を解決するためにAPMサーバーへのインターネット接続を必要とします。これには多くの長所と短所があります。プラス面として、最適化のためのWebサービスにより、クロスプラットフォームの互換性、一部の商用ソルバーへの無料アクセス、およびユーザーに透過的なソフトウェアアップグレードが可能になります。欠点として、APMはいくつかのオープンソースの選択肢ほど柔軟ではありませんが、最適化アプリケーションにターンキーソリューションを好む産業ユーザー向けに設計されています。
ジョンヘデングレン

@JohnHedengren MATLABで別のライブラリを使用して最適化問題自体を構築する特定の事前計算があります。特に、制約にはこれらの外部呼び出しが含まれます。APMはまだこの目的に適していると思いますか?
gpavanb

私はそれの一般的な用語はブラックボックス最適化だと思います。
gpavanb

@gpavanb APMonitorパッケージでは、モデリング言語で記述された方程式が必要です。外部コードをロードする1つのオプションは、残差と少なくとも分析的な一次導関数を提供するオブジェクトを作成することです。通常、これらのオブジェクトはF90でコーディングします(apmonitor.com/wiki/index.php/Main/Objectsなど)。これらのオブジェクト は、ブラックボックス最適化を備えたアプリケーションにはAPMonitorが最適な選択肢ではないと思います。
ジョンヘデングレン

7

これはあなたの質問に完全に答えているわけではありませんが、NLPyという名前の非線形プログラミング用のPythonパッケージを作成しています。最新バージョンはhttps://github.com/dpo/nlpyから取得できます

NLPyは研究グレードであり、含まれるソルバーはIPOPTのようなより熟練したコードほど堅牢ではないことを強調しなければなりません。さらに、現在、ヤコビアンの提供が必要です。とはいえ、NLPyのポイントは、研究者が必要に応じてカスタムソルバーを組み立てるために必要なツールを提供することです。とにかく、あなたがそれを試してみたら、私はあなたのコメントをオフラインで聞くことに興味があるでしょう。関連パッケージhttps://github.com/dpo/pykrylovおよびhttps://github.com/dpo/pyorderも役立つ場合があります。現在、NLPyのドキュメントは間違いなく不足しています。他の2つは合理的なはずです。


7

pyomoは、Pythonで最適化するための完全なGAMS / AMPLのようなモデリング環境です。非常に強力で、AMPLでサポートされているすべてのソルバーへのインターフェイスがあり、ヤコビアンなどを自動的に生成します。ただし、「仮想python環境」で実行されるため、既存のコードにリンクするのは簡単ではない場合があります。


5

GEKKO Python

GEKKO Pythonパッケージを最近リリースしました(2018)アクティブセットおよび内点法によるIPOPT、APOPT、BPOPT、MINOS、SNOPTなどのソルバーを使用した非線形プログラミングの場合。これらのソルバーを使用する際の問題の1つは、通常、少なくとも1次導関数とオプションで2次導関数を提供する必要があることです。他の回答で述べたように、これを行うことができるいくつかの素晴らしいモデリング言語があります。GEKKOは方程式をバイトコードにコンパイルするため、速度の点でFortranやC ++でモデルを作成したようになります。自動微分は、勾配ベースのソルバーにスパース形式で1次および2次導関数を提供します。最適な制御問題のためにGEKKOを設計しましたが、fminconに似た問題も解決できます。以下は、等式および不等式の制約がある非線形プログラミング問題の簡単な例です。まず、あなた

pip install gekko

ホックSchittkowskiの問題#71は、目的関数、不等式制約、等式制約、及び上限と下限との4つの変数の例として、以下に示します。

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に返されます。

この質問は、特にPythonでの非線形プログラミングの解決に関するものですが、GEKKOが解決できる他のいくつかのタイプの問題と、最適化を学習するためのリソースもいくつか取り上げます。GEKKOはまた、混合整数および微分代数方程式を解き、高度な制御(DMC、RMPCTなどに類似)のために事前にプログラムされたオブジェクトをいくつか持っています。動作モードには、データ調整、リアルタイム最適化、動的シミュレーション、および非線形予測制御が含まれます。

最適化に関する2つのコース(設計最適化動的最適化)を教え、コース資料をオンラインで投稿しました。動的最適化コースは毎年1月に開始され、GEKKO Pythonパッケージ(およびMATLAB)をコースに使用します。GEKKOはAPMonitor Optimization Suiteの拡張機能ですが、Python内でモデリングとソリューションの視覚化を直接統合しています。APMonitorおよびGEKKOリファレンスは、このパッケージで解決できるアプリケーションの種類のサンプルを提供します。GEKKOは、全米科学財団の研究助成金#1547110の下で開発されています。


回答を編集して、投稿で言及されている特定の要件にソフトウェアがどのように対処するかを説明してもらえますか?それ以外の場合、これは質問への回答というよりもむしろブランケット広告投稿のように見えます(そしておそらく閉じられます)。
クリスチャンクラソン

クリスチャン、私は質問をより具体的にするために回答を編集しました。GEKKOとオンラインコースに関する追加情報を最後に移動しましたが、必要に応じて削除できます。
ジョンヘデングレン

4

1
感謝しますが、それは私が試したものです(OpenOptを使用して、追加のインターフェースを提供します)。fmincon / sqpよりも優れていることはなく、後者が成功した多くの場合に失敗しました。
デビッドケッチャソン

1
更新:SciPyから直接これを試しました。fminconが数秒で一貫してグローバルな最適値を見つけることができる問題でも失敗します。
デビッドケッチャソン

4

PyGMOにはいくつかのソルバーが含まれており、それらに同じインターフェースを提供します。コードをコンパイルし、サードパーティのコードを個別にダウンロード/インストールする場合に備えて、IPOPTとscipy slsqpが含まれています。

ボーナスとして、ソルバーの並列使用は、群島クラスを介して非常に簡単に(マルチスタート)できます!


3

Stephen Boydの凸最適化ソフトウェアのPythonラッパーであるcvxmodがあります。これはSageパッケージの一部です。


しかし、OPは非凸最適化問題について尋ねています。
アレハンドロ

1
OPは非凸最適化問題について質問していますが、これまでに述べたソルバーはすべて、追加のメタヒューリスティック(マルチスタート、または決定論を呼び出すその他の確率的グローバル最適化アルゴリズムなし)目的関数と制約の緩和を必要とする非線形凸凸最適化ソルバー)または分枝限定アルゴリズム(分枝限定、分枝カット、分枝減少など)。この回答は、12月11日時点で言及されている他のどの回答よりも悪くはありません。
ジェフオックスベリー

Geoff、非凸問題にcvxmodを適用するにはどうすればよいですか?
デビッドケッチャソン

私はソフトウェアを使用していませんが、理論的には、他の凸ソルバーと同様に、現在fmincon(凸ソルバーでもある)を使用しているように、局所的に最適なソリューションを見つけるために使用します。それを使用する1つの方法はマルチスタートです。凸ソルバーの初期推定として使用されるポイントのリストを生成します。推測として使用される各ポイントについて、ソルバーによって返された解を記録します。返されたすべての解の最小目的関数値に対応する点は、グローバル最適化への最適な近似です。
ジェフオックスベリー

1
@Geoff:はい、マルチスタートを使用しています。CVXMODに関しては、規律化された凸型プログラミングに関して表現できる問題のみを受け入れます。一般的な非線形計画問題はできません。あなたが言うように、私は私の問題に近い連続した凸面緩和を探すことができますが、ここでの全体の目標は私がより少ない仕事をすることです。
デビッドケッチャソン

3

fminconは、OpenOptフレームワークを介してPythonから使用できるようになりました。オプションで、FuncDesigner http://openopt.org/fminconによる密/疎自動区別を使用できます


これはもう存在しないようです。
足濡れ

3






リリース2014bの時点で、これはMatlabによって直接サポートされるようになりました。参照mathworks.de/help/matlab/matlab-engine-for-python.html
クリスチャンClason

@クリスチャン・クラソン、それはnumpy-to-Matlabをまったくしないようですか?python-matlab-bridgeのように。(しかし、私はそれを使用していません。)
denis 14年

直接ではありません(カスタムのmatlab配列クラスがあるようです)が、それとnumpyの間で変換する方法があるはずです。もちろん、データのコピーのためにオーバーヘッドが発生しますが、OPが言及している問題のサイズについては、おそらくそれほど問題ではありません。(
Havenは


2

CMA-ESはどうですか?Pythonバインディングがあり、非凸、非線形最適化の問題によく適合し、かなり使用しました:https : //www.lri.fr/~hansen/cmaesintro.html

pipによるインストール:

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がnumpyを完全にサポートするまで)。市販の製品よりも優れた無料のソルバーが必要なようですfmincon。多すぎませんか?

商用NLPソルバーの中でIIRCは、これまでPython APIを提供してきたのはsnoptだけでした(かなりugいですが)。

どのOpenOptソルバーを試しましたか?非凸のタスクにはいくつの変数と制約がありますか?

OpenOpt Sageサーバーにインストールせずに、OpenOpt / Funcdesigner APIを介してIPOPTを試すことができます(「sageからpythonへの切り替え」の図に注意してください)。

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


2
注意深く読んでいただければ、fminconと同様の堅牢性を備えたものを求めているだけです。より良くする必要はなく、さらに遅くすることもできます。
デビッドケッチャソン

1

グローバルな問題については、http: //openopt.org/interalgおよびその他のopenoptグローバルソルバー(http://openopt.org/GLP)に興味があります。ローカル最適化のために、openoptはさまざまなソルバーを提供しています:http ://openopt.org / NLP


はい、それらのいくつかを試しましたが、fminconまで測定されたものはありませんでした。
デビッドケッチャソン

1

ここで言及するのは、Google Ceresソルバーは実際には非常に強力な非線形オプティマイザーであり、多くのプロジェクトで使用されていることです。

また、https//github.com/rll/cyresから Pythonラッパーを入手できます。


レーベンベッグ・マルカートではないですか?これは、素敵ながら、遠くOPが何を望んでいる
デニス

ceresは非常に優れたソルバーですが、等式制約をまったくサポートせず、パラメーターの上限/下限として不等式制約のみをサポートします(現在のバージョン1.12以降)。
-orzechow

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.