2011-11-14 17 views
1

ブール関数を最小限に抑えるプログラムをPythonで書く必要がありますが、キャッチするにはA *やより単純なアルゴリズムBFSなどの検索アルゴリズムを使用する必要があります。反復深化を使ってプログラムを書いたが、それはすべての問題を解決したが、遅すぎる(各問題の限界は20秒)。A *アルゴリズムのブール関数ヒューリスティックを最小化する

私はA *アルゴリズムを使って別のプログラムを書いていましたが(私たちはより良いグレードを望むならこのプログラムを使用しなければならないと言われましたが)、反復深化を使うプログラムよりも10倍遅くしました。アルゴリズムの正しいヒューリスティックを理解することができないからです。私は、効果的な最小化のための基準となるもの(良い経験則)が何かを理解することはできません。

問題は:

あなたはリストのリストを与えられている([[0,1,0,1]、[...]、[...]、[...]、... ]))(内部リストの最後の要素は関数の値を表す)。検索アルゴリズム(例A *、BFS、IDA *、DFS、..)のみを使用して、ブール関数の最小論理和形式を検出するプログラムを作成します。それぞれの問題について、それを解決する20年があります。

+1

オリジナルの問題の説明を追加してください。 –

答えて

1

私はあなたの州が有効な組み合わせのセットであると仮定します。ここでは単純な許容ヒューリスティックです。 Uを、現在の状態のいずれかの結合によって一致しない1へマッピングする関数入力の集合とする。 Uは空ではないが、Uの入力xを選ぶ。すべての入力yを削除して、xとyと一致する有効な結合が存在するようにする。

実際には、この問題はset coverのインスタンスとみなすことができ、このヒューリスティックはLPリラクゼーションの2つの解決法を貪欲に構築しています。 LPソルバにアクセスできない場合は、デュアルLPを最適化することで、より高品質な(ただし、速度は遅くなる可能性があります)ヒューリスティックを得ることができます。

+0

私はLists [[1,2]、[3,4]] =>(x1&x2)|(x3&x4)を使用していますが、もう一つはフルフォームから開始して最小化する方が良いですか? imputsがゼロから始まり、正しい関数が得られるまでそれらを追加するほうがよい。 –

+0

@AljažPrijateljリストと一緒に見るべき1つのことは、[[1,2]、[3,4]]と[[3,4]、[1,2]]を別々の状態として扱うべきではなく、 [[1,2]、[3,4]]と[[2,1]、[3,4]]を別々の状態として扱うべきではありません。私はこの問題にA *を適用したことがないので、どの状態/遷移が最もうまくいくか分かりません。 – Per

関連する問題