9

方程式と制約の未決定の線形システムを解き、コスト関数を最小化する特定の解を見つける必要があります。これは、.NET および Mono で実行される純粋に移植可能なマネージド コードで行う必要があります。これを実装するために使用できる無料のライブラリは何ですか?

私が見つけた無料のライブラリによって提供されるすべての最適化アルゴリズムは、単一変数の区間制約のみをサポートしています。たとえば0 < x < 1、 のような制約はサポートしていませんx + 2y < 4。また、多くの場合、線形方程式ソルバーは 1 つの解を持つ線形システムのみをサポートすることもわかりました。

これまでに見つけた中で最も近いのはDotNumerics です。これには、未決定の線形システムを解決するための特異値分解が含まれていますが、その最適化アルゴリズムは単一変数の制約しかサポートしていません (私が知る限り)。

線形計画法について尋ねる質問は他にもいくつかありますが、私の主な要件は、多変数制約と未決定システムの解決です。多変数制約をサポートする無料のライブラリをまだ見つけていません。

4

4 に答える 4

12

.NET (つまり、Windows ストア、Windows Phone、Silverlight 以外) 向けに開発している場合は、大規模な LP や MILP の問題に適したlpsolveを確認することを強くお勧めします。それぞれのlpsolve DLLを含むx86またはx64開発アーカイブをダウンロードしてから、 lpsolve APIのすべての関連関数への P/Invoke 呼び出しを含む C# ファイルを含む.NET APIアーカイブをダウンロードします。

もう 1 つの方法は、 CoinMPプリコンパイル済みバイナリを介して、 COIN-ORプロジェクトのCLPソルバーを使用することです。C# ラッパー DLL はこちらから入手できます。

純粋に管理されたコードが必要な場合は、おそらく ALGLIB が最善の策ですが (上記の Marc Gravell が示唆しているように)、ALGLIB オープンソース ライセンスでは GPL が使用されていることに注意してください。ALGLIB をオープンソース コミュニティに開示せずに独自のコードで使用したい場合は、商用の ALGLIB ライセンスを購入する必要があります。

簡単なインターネット検索でも、ここでシンプレックス LP アルゴリズムの純粋な C# 実装が明らかになります。作者を特定することはできず、この実装が正しいかどうか、または何らかの品質があるかどうかもわかりません。ただし、Windows ストア、Windows Phone、Silverlight、および Mono コンテキストに関しても、コードは移植性が高いように見えます。

于 2013-05-09T17:28:24.853 に答える
7

ALGLIBは、線形ソルバーなどのための通常の頼りになるライブラリです。絶望する前によく見てみよう。

于 2013-05-09T15:38:18.397 に答える
4

線形計画法は、求めていることを正確に行うことを目的としています。多変数制約は、線形計画法では絶対に正常です。lpsolve ( http://sourceforge.net/projects/lpsolve/ )、 glpk ( http://www.gnu.org/software/glpk/ )、CBC ( https://projects.coin-or ) などの無料のソルバーを探してください。 .org/Cbc など)。

上記の提案は C# ではなく、すぐに使用できる管理された .net アセンブリではないことを受け入れます。それがあなたにとって大きな問題である場合は、これらのライブラリのいずれかのソース コードから自分でバージョンを構築してみてください。ただし、かなりの作業が必要になる場合があります-私は試していません。

また、元の質問から、解決しようとしている問題がどれほど大きいか複雑かも不明です。離散値を取る必要がある変数がある場合は、分岐限定などを行うソルバー ライブラリが必要になります。それ以外の場合は、純粋に線形で連続的であれば、シンプレックス アルゴリズムを使用できます。ビルド済みのバージョンが見つからない場合は、多くの教科書に載っています。

それが非常に小さな問題 (数十の変数と制約) または線形で継続的なものである場合は、独自の新しい (移植可能な純粋なマネージ コード) 実装で回避できるかもしれませんが、数千の制約と変数がある場合は、必要なパフォーマンスを得るのに苦労するかもしれません。大きくて複雑な問題を抱えている場合、必要な答えを得るには市販のソルバーが必要になる可能性があるため、うまくいかない可能性があります。

于 2013-05-09T16:02:01.320 に答える