線形計画法またはその他の最適化手法を使用して、最大限に異なるソリューションのセットを見つける


8

従来、線形計画法は、一連の制約、変数、および目標(すべて線形関係として記述されています)に対する1つの最適な解を見つけるために使用されます。時々、目的が制約に平行であるとき、無限または多くの等しく良い最適解があります。この後者のケースについては質問していません。

私は、私の一連の制約によって生成された実行可能領域にある多くのソリューションを見つけることにもっと興味があります。しかし、私が見つけた解は、それらが互いに最大限に離れているという意味で、実行可能領域の周りに「散在」していることを望みます。ソルバーを複数回実行せずに、複数のソリューションを生成し、目的関数を使用してソリューションを分離することを強制する既知の方法はありますか?

たとえば、決定がaおよびbで制約がw <= a <= xおよびy <= b <= zの線形計画は、2つの解を見つけるために「複製」できます。新しい線形プログラムには、変数a1、a2、b1、およびb2と、制約w <= a1 <= xおよびw <= a2 <= xがあり、b1、b2についても同様です。ただし、目的関数を作成する場合、線形性を破棄せずにL1ノルム以外のノルムを使用できず、L1ノルムを使用することは不可能であるため(本当に私が知る限り) )絶対値をエンコードします。

たぶん、凸最適化や半確定プログラミングなどを検討する必要がありますか?

線形プログラムに対する一連のソリューションを生成し、ソリューション間の「距離」を強制する目的を使用する既知の方法はありますか?


1
実行可能領域を囲む最小の立方体を計算し(境界がない場合は、境界のある部分を選択します)、その上に目的の解像度でハイパーグリッドを配置し、制限を満たさないすべてのポイントを破棄します。それでうまくいきますか?
ラファエル

ハイパーキューブの計算方法が明確ではありませんが、私にとってはうまくいく可能性があります。調査している実現可能領域は非常に重要です。多くのポイントを破棄する必要があると思います。私の特定のアプリケーションには、数万の変数/決定と数百の制約があります。
ロス

基本的な実行可能なソリューションは、ポリトープの頂点です。入射面の法線を見て、ポリトープを「横切る」方向を計算し、それを実行可能領域の境界までたどることはできませんか?それはあなたに合理的に異なる解決策を与えるはずですが、おそらく最も異なる解決策ではありません。
adrianN 2013

立方体は使用しないでください。楕円体(具体的には、楕円体法で見つけられるポリトープを含む小さな楕円体)を使用します。このようにして、リージョン内の適切な数のポイントを見つけることが保証されます。
Peter Shor、2013

回答:


2

線形計画法を使用したヒューリスティック

1つのアプローチは、ランダムな目的関数を選択して最大化することです。次に、毎回異なる目的関数のセットで繰り返します。

言い換えると、未知数がであり、いくつかの制約Cがあるとします。あなたが選ぶ各反復においてcは1C 2... C NR無作為、次に最大化するソリューションを検索C 1 X 1 + + C N Xx1,x2,,xnCc1,c2,,cnR制約を受ける Cc1x1++cnxnC

このヒューリスティックでは、多少散らばった一連のソリューションが見つかる可能性があると思います-必ずしも最大に散在しているわけではありませんが(相互に最大に離れているわけではありません)、おそらく相互に近すぎません。

二次計画法を使用して、ペアワイズL2の平均距離を最大化する

または、二次計画法を使用します。簡単にするために、2つの解決策を見つける問題を見てみましょう。L 2ノルム(ユークリッド距離)の下で、互いに可能な限り離れた2つの解が必要だとします。次に、これは二次計画問題として定式化できます。x,yL2

基本的には、二乗距離の最大化したいとの間のx及びyは両方その要件を条件として、XおよびY制約を満たす必要があります。これは、線形制約(すなわち、2次計画法)を使用して、2次目的関数を最大化する問題です。d(x,y)2=(x1y1)2++(xnyn)2xyxy

kx1,,xkRn

i<jd(xi,xj)2,

つまり、関数

i<j(xixj)2.

Cxi

kk+1k

二次計画法は線形計画法よりも難しいですが、二次計画法の問題を解決するオフザセルフソルバーがあります。

QCQPを使用して最小ペアワイズL2距離を最大化する

ktkx1,,xkRntd(xi,xj)ti<j。次に、これは、2次制約、つまりQCQPを持つ2次最適化プログラムとして定式化できます。QCQPはさらに困難ですが、QCQP用の市販のソルバーも試してみることができます。


1

絶対値を生成する方法を見つけました。

a1a2b1b2|a1a2|+|b1b2|

「スラック変数」abs_aおよびabs_bと制約を導入できます。

absa+a1a20

absaa1+a20

b1b2absaa1a2absaa1a2

absa+absb


実際、これらのエンコーディングは絶対値の最小化に対してのみ機能します。そこではそれは私の問題を解決しません。詳細はこちら:lpsolve.sourceforge.net/5.5/absolute.htm
Ross
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.