1

要約: この問題を解決するにはどうすればよいでしょうか?

やあ、

私は、変数が最小値と最大値によって制限される混合スタイルの最大化問題に取り組んでいます。私の問題の代表的な例は次のとおりです。

maximize: (2x-3y+4z)/(x^2+y^2+z^2+3x+4y+5z+10)
subj. to: x+y+z=1
          1 < x < 2
         -2 < y < 3
          5 < z < 8
where numerical coefficients and the minima/maxima are given.

私の最後のプロジェクトには、上記のようなより複雑な問題が含まれています。問題の構造は変わりません。係数と入力だけが変わります。xしたがって、上記の例では、C# プログラムが、次にy、次zのようにすばやく判断できる関数のセットを探しています。

x = f(given inputs)
y = f(given inputs,x)
z = f(given inputs,x,y)

これについてあなたの考えを聞きたいです!

ありがとう!

4

2 に答える 2

2

問題のタイプである非線形最小化に対する標準的な最適化アプローチは、Levenberg-Marquardt アルゴリズムです。

残念ながら、追加した線形制約を直接サポートしていません。レーベンバーグ・マルカートに線形制約を追加するために、多くの異なるアプローチが試みられてきましたが、さまざまな成功を収めています。

この状況でお勧めできるもう 1 つのアルゴリズムは、Simplex アルゴリズムです。

Levenberg-Marquardt と同様に、非線形方程式でも機能しますが、不連続のように機能する線形制約を処理します。これは、上記のケースでうまくいく可能性があります。

どちらの場合も、これはプログラミングの問題というよりは、アルゴリズムの選択の問題です。文献にはアルゴリズムがあふれており、少し検索するだけで上記のいずれかの C# 実装を見つけることができます。

アルゴリズムを組み合わせることもできます。たとえば、制約のあるシンプレックスで予備検索を行い、制約なしでレーベンバーグ・マルカートで絞り込むことができます。

于 2011-05-25T21:18:38.930 に答える
0

線形計画法の問題を効率的に解決したいという問題がある場合は、Cassowary.netまたはNSolverを使用できます。

あなたの問題が線形計画法アルゴリズムを効率的に実装している場合は、組み合わせ最適化: アルゴリズムと複雑さを読むことをお勧めします。これは、短いテキストで提供されているほとんどの詳細でシンプレックス アルゴリズムをカバーしていますこれは、より複雑な制約システムに対してより効率的です。

あなたの質問には本質的に C# 固有のものはありませんが、それにタグを付けることは、C# で解決策を探していることを意味します。したがって、上記の 2 つのツールキットのソース コードを確認すると、うまくいく可能性があります。

于 2011-05-25T21:18:20.013 に答える