シンプレックス法を実現可能な内部ポイントから開始するにはどうすればよいですか?


8

線形計画問題の実行可能な解決策を生成する1つのアルゴリズムがあります。ただし、これはコーナーポイントではない可能性が非常に高いです。このため、制限付きシンプレックスソルバーの最初の実行可能なソリューションとして直接使用することはできません。このソリューションから使用可能なコーナーポイントを効率的に見つけるにはどうすればよいですか?

簡単に言うと、実現可能な内部ポイントからシンプレックス法を開始するにはどうすればよいですか?


最適な内部点から最適な基本解に至るアルゴリズムがあります(内部点アルゴリズムが最適な非基本解に収束した後に最適な基本解を取得するために使用されます)。多分あなたはこのようなものを使うことができますが、なぜLPに実現可能な最初の解決策を提供したいのですか?実現可能性がボトルネックになっているLPはありますか?
user327301 2013年

実行可能なソリューションを生成することを言及したアルゴリズムは、実際にはそれを副産物としてのみ生成します。その主な結果は、LPの一連の制約です。私はだけではなく、それを無視し、フェーズ1を使用しての、この実現可能なソリューションを最大限に活用したい
ディラン

それが役立つと確信していますか?ソルバーのログを見て、実行可能なソリューションを見つけるのに最適なソリューションを見つけるのに費やされている時間の割合を確認しましたか?非常に大規模または非常に密度の高い(つまり、困難な)線形計画法に対して非常に優れた初期解を提供しているのでない限り、これが役立つかどうかは疑問です。
user327301 2013年

それが役立つかどうかにかかわらず、私はそれが可能かどうかについて興味があります。最初の実行可能なソリューションが最適に近い可能性は十分にあります。LPは非常に密度が高く、タブローのどの部分にもゼロがありそうにありません。
ディラン

1
CPLEXが内点アルゴリズムを使用する場合、基本的なソリューションに移行するために、ドキュメントがクロスオーバーと呼ぶものを実行します。クロスオーバーについては何も知りませんが、それはあなたが何かを見つけるための出発点かもしれません。(今、あなたは私に私のLP知識を再
研ぎ

回答:


6

線形最適化に関するすべての本では、シンプレックス法を2段階のアルゴリズムとして説明しています。1つ目は、実行可能なコーナーを開始点として見つけるためのもので、2つ目は最適を見つけるためのものです。最初は二重問題を使用します。見てみましょう「線形最適化の概要」:D. BertsimasとJN Tsitsiklis、たとえば。

xn+1xそして、彼らの交差点を取る。直感的には、この頂点は実行可能であるはずですが、これについてもう少し考える必要があることは認めます。


1
残念ながら、私が見つけたシンプレックス法の2ステージアルゴリズムはすべて、「フェーズ1」について説明しています。このフェーズでは、人工変数を使用して、基本的な実行不可能なソリューションから基本的な実行可能なソリューションを見つけます。しかし、私が求めているのは、非基本的な実行可能なソリューションから基本的な実行可能なソリューションを見つけることです。非フェーズソリューションに適用できる「フェーズ1」について何か不足していますか?
ディラン

なぜそれが必要なのか分かりません。フェーズ2に必要なのは任意の頂点(基本的な実行可能なソリューション)だけです。フェーズ1がどこで終了するかがわかっている限り、フェーズ1がどこで始まるかを気にする必要があるのはなぜですか。
Wolfgang Bangerth 2013年

ただし、フェーズ1には基本的な(実行不可能な)ソリューションが必要です。どういうわけか、基本的でない実行可能なソリューションでフェーズ2を開始できる場合、フェーズ1を起点から開始するよりもはるかに速く解決するはずです。
ディラン

n+1

それほど難しくない場合は、詳しく教えてください。私の知る限りでは、各制約に順番に投影すると、以前の制約に不満を感じるかもしれません。それでは、一度にすべての制約にどのように投影しますか?これが私が解決を求めている問題です。実行可能なポイントを見つける一般的なケースではありません。
ディラン

4

残念ながら、Wolfgang Bangerthのソリューションが動作することは保証されていません。

ここに画像の説明を入力してください

ii(ni)n


3

シンプレックス法のフェーズIには、実際にはさまざまなアプローチがあります。特に、主シンプレックスシンプレックス反復を使用するフェーズIアルゴリズムと、デュアルシンプレックス反復を使用する他のフェーズIアルゴリズムがあります。これは、既知の実現可能なソリューションを利用するために簡単に適応できる非常に一般的なアプローチです。このバージョンは、フェーズIでデュアルシンプレックス法を使用し、フェーズIIでプライマリシンプレックス法を使用しますが、フェーズIでプライマリシンプレックス反復を使用し、フェーズIIでデュアルシンプレックス反復を使用するバリアントがあります。ここで説明するアプローチは、線形計画法に関する多くの教科書で説明されています。たとえば、Robert Vanderbeiのテキストを参照してください。

私たちが解決していると仮定します

maxcx

従う

Ax=b

lxu

ここで、サイズ ×です。簡単にするために、の行が線形独立であると仮定します(これは、ランクを明らかにする因数分解によって実現できます)。AmnA

  1. 最初の基準を選択します。これは変数のコレクションであり、の対応する列は非特異行列ます。残りの非基本変数は、上限または下限のいずれかに設定できます(または、変数に上限がない場合はゼロ)。 mAB

最初の解からこれを行う簡単な方法は、既知の実行可能な解の境界から最も離れている変数を基本変数として選択し、が非特異であることを確認することです。非特異にするには、基底を変更する必要がある場合があります。ここでのポイントは、多くの可能なベースがあるということですが、これは基本的な変数として、実行可能なソリューションから正しいと思われる変数を持っています。 BB

方程式を解いて、基本変数の値を取得します。 Ax=b

  1. 得られる基本的な解は、主変数の一部が境界の外にあるという意味で、主に実行不可能である可能性があります。また、非基本変数の削減コストの一部に誤った符号があるという意味で、二重実行不可能である可能性があります(例:正の削減コストの下限での非基本変数または負の削減コストの上限での非基本変数)。

目的関数を双対実行可能関数に変更することで、この問題を克服します。下限の各非基本変数について、目的関数係数から大きな正の量減算します。上限の非基本変数ごとに、大きな正の量を係数に追加します。これにより、辞書が二重に実行可能になります。 MM

目的関数のこの変更のポイントは、主要な実現可能性に向けて取り組むことですが、元の目的関数に関して最適性に向かって移動することです。あなたは欲しいあなたが二重の実現可能性を持っていることを十分な大きさであることを、しかし、あなたはあなたができるように、元の目的関数から多くの影響として保存しておきたいです。 M

  1. 双対シンプレックス法を実行して、主実行可能(ブール内のすべての基本変数)と双対実行可能(すべての削減コストに望ましい兆候があります)の両方である基本解を取得します。このソリューションは、フェーズIの問題に最適です。

  2. 変更されたフェーズI目的関数を元の目的関数で置き換えます。これで、基本的には実現可能ですが(目的関数を変更しても影響はありません)、双対実行不可能である基本的なソリューションが得られます。最適に戻すために、主シンプレックス反復を実行します。

このアプローチの明らかな代替策は、フェーズIの開始時に右側のbを変更し、フェーズIで主シンプレックス反復を使用して最適性を得てから、フェーズIIの元の右側を元に戻し、デュアルシンプレックス反復を使用することです。フェーズII。


-3

私は同様の質問の解決策を探していました:非常に大規模なスパース線形プログラムでは、テストされたシンプレックス法のみが機能しますが、デフォルトの0解決策が実行可能である場合のみです。(Matlabのlinprogのような)フェーズ1アルゴリズムは悪いようです。そして、フェーズ1のソースコードは非常に複雑なので、遺伝的アルゴリズムなどの他のアルゴリズムで置き換えることができるため、回避策は、元の問題の線形変換を行うことです。そのため、新しい変数では、提供される最初の実行可能な解は0です。これは0は、独自の方法を使用せずにフェーズ1で使用され、別の開始点を見つけます。

このメソッドをテストする際、linprog.m、simplex.m、simplexpresolve.m、simplexphaseone.mをステップ実行することにより、不等式制約のみが使用される場合、元の変数にデフォルトの0が使用されることが確認されます。スラック変数は違いをとります。したがって、線形変換によってx0がシンプレックスにこっそり入り、ユーザーが指定したx0が意図的に阻止されます。次に、「デフォルトの開始点は実行可能であり、フェーズ1をスキップします」というメッセージが表示されます一方、GAは通常、2倍または3倍の時間を使用することにより、線形プログラムに近いソリューションを0.01%に見つけることができるため、特に制約が人工的に作成された場合、これらの制約、目的、および境界の線形変換の努力に値しない場合があります。 。


こんにちはフランクとScicompへようこそ!あなたが提起する質問は完全に有効ですが、元のOPの質問には実際には対応していないので、実際には「回答」にはなりません。本当に削除して、別の質問としてより詳細に再投稿する必要があります。
ポール

気にしないでください:このメソッドは、x0を0に変換した後に、シンプレックスが指定された初期x0を使用する量です。シンプレックスメソッドは、最初は提供されたx0をすべて無視します。
フランク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.