2013-05-09 21 views
7

未定義の方程式と制約の線形システムを解いてから、コスト関数を最小にする特定の解を見つける必要があります。これは、.NETとMonoで実行される純粋に移植可能なマネージコードで行う必要があります。私がこれを実装するために自由に利用できるライブラリは何ですか?.NET/Cのリニアプログラミングライブラリ

無料のライブラリで提供されるすべての最適化アルゴリズムは、1つの変数に対してインターバル制約のみをサポートしています。 、x + 2y < 4のような制約ではありません。また、線形方程式のソルバーは多くの場合、1つのソリューションで線形システムのみをサポートしていることがわかりました。

私が今までに見つけた最も近いものはDotNumericsです。これは未定義線形システムを解くための特異値分解を含みますが、その最適化アルゴリズムは単一可変制約のみをサポートしています。

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

+0

あなたはalglibを試しましたか? –

+0

@MarcGravell詳細な検査の後、これは私の要求に合ったように見えます。どうもありがとうございました。それを答えに入れて、私は受け入れます。以前にどうやって見つけたのか分かりません。 – Dylan

答えて

5

ALGLIBは、リニアソルバーなどの一般的なライブラリです。私は絶望の前にそれを良い外観を与えるだろう。

+1

探している人のために、Googleはor-tools https://developers.google.com/optimization/をリリースしました。これを.NETですぐに利用することができ、OPが探しているものをサポートしています。 – randomsolutions

4

リニアプログラミングは、求めていることを正確に行うためのものです。多変数制約は、線形計画では絶対に正常です。たとえば、lpsolve(http://sourceforge.net/projects/lpsolve/)、glpk()またはCBC(https://projects.coin-or.org/Cbc)のようなフリーソルバーを探してください。

私は上記の提案はC#ではなく、管理されていない.netアセンブリであることを認めます。それがあなたのためのディール・ブレーカーであれば、これらのライブラリーの1つのソース・コードから自分でバージョンをビルドすることができます。私はそれを試していない - かなりの作業が必要になるかもしれません。

元の質問から、あなたが解決しようとしている問題の大きさや複雑さも不明です。離散値を取らなければならない変数がある場合は、分岐や拘束などを行うソルバーライブラリが必要です。そうでなければ、単純に線形で連続的であれば、シンプレックスアルゴリズムを使用できます。あらかじめ構築されたバージョンが見つからない場合は、教科書がたくさんあります。

これは非常に小さな問題(数十の変数と制約)または線形で連続的な場合は、独自の新鮮な(移植性のある純粋なマネージコード)実装で取り除くことができるかもしれませんが、あなたが必要とするパフォーマンスを得るのに苦労するかもしれません。大きく複雑な問題がある場合は、必要な答えを得るために商用ソルバーが必要な場合があるので、運が悪いかもしれません。

+1

.NET用GLPKラッパー:https://www.nuget.org/packages/Optimization.Solver.GLPK –

8

.NET(Windows Store、Windows Phone、Silverlightなど)用に開発している場合は、大きなLPおよび/またはMILPの問題に適したlpsolveをご覧ください。それぞれのlpsolve DLLが含まれているx86またはx64開発アーカイブのダウンロード:秒をした後、P /呼び出しがlpsolve APIに関連するすべての関数の呼び出しとC#ファイルが含まれている.NET APIアーカイブをダウンロードしてください。

もう1つの方法は、CoinMPプリコンパイルされたバイナリを使用して、COIN-ORプロジェクトのCLPソルバを使用することです。利用可能なC#ラッパーDLLはhereです。

には純粋にマネージドコードが必要ですが、上記のMarc Gravellが提案するようにALGLIBが最適ですが、ALGLIBオープンソースライセンスはGPLを使用していることに注意してください。 ALGLIBをオープンソースコミュニティに開示することなく独自のコードで使用したい場合は、市販のALGLIBライセンスを購入する必要があります。

クイックインターネット検索でも、Simplex LPアルゴリズムhereの純粋なC#実装がわかります。私は作者を特定することができず、この実装が正しいかどうか、あるいは品質が何であるか分かりません。このコードは、Windows Store、Windows Phone、Silverlight、Monoのコンテキストでも、移植性が高いようです。

+0

ネイティブコードが許可されていれば私はlpsolveを使用していましたが、私の質問に指定されているように、ソリューションは純粋に管理する必要があります。ポータビリティを確保する。だから感謝しますが、ありがとうございます。 – Dylan

+1

@Dylanなぜ私はdownvoteに値すると思うかわからない、それは私の答えが誤解を招くようなものではない。確かに、あなたは管理された解決策が必要だということを言いますが、なぜこれがそのような取引遮断者であるのかはあなたの疑問からは分かりません。多くの場合、P/Invokeソリューションがうまく収まるようになると(* lpsolve *が.NETとMonoの両方で完全に動作するように)管理されたソリューションを求めてくることがよくあります。 Marcの答えは明らかにあなたのケースで最も重要ですが、* ALGLIB *はGPLライセンスです。商用で使用したい場合は、商用* ALGLIB *ライセンスを購入する必要があります。 –

+0

ダウンボートは少し面白かったかもしれませんが、答えが役に立たない場合、ガイドラインはダウンボイトすることです。あなたが何らかの方法で答えを編集すると、元に戻すことができます。 – Dylan

1

誰も言及していない。solver foundation。それは良い選択です。

+1

良い例ですが、いくつかの例が説明されています。 Express(無料)ライセンスにより、最大1000個の決定変数の問題を実行できます。与えられたリンクは壊れていますが、興味があれば[ここ](http://msdn.microsoft.com/en-us/library/ff524509(v=vs.93).aspx) – krzychu

+1

指数問題これは非常に制限されており、私は遠隔からでもそれを考慮しません。 TSPのようなものは、例えば45ポイントに制限されています。 –

関連する問題