GSATアルゴリズムの実装-反転するリテラルの選択方法


20

GSATアルゴリズムは、ほとんどの場合、単純です:連言標準形式で式を取得し、式を満たす解が見つかるか、max_tries / max_flips制限に到達して解が見つからなくなるまで、句のリテラルを反転します。

次のアルゴリズムを実装しています。

procedure GSAT(A,Max_Tries,Max_Flips)
  A: is a CNF formula
  for i:=1 to Max_Tries do
    S <- instantiation of variables
    for j:=1 to Max_Iter do
      if A satisfiable by S then
        return S
      endif
      V <- the variable whose flip yield the most important raise in the number of satisfied clauses;
      S <- S with V flipped;
    endfor
  endfor
  return the best instantiation found
end GSAT

次の行の解釈に問題があります。

V <- the variable whose flip yield the most important raise in the number of satisfied clauses;

満足する節の最大数は私たちが探しているものではありませんか?解決策を見つけるために、解決策またはその近似を使用しようとしているように思えます。

私はこれを行うためのいくつかの方法を考えましたが、他の視点を聞くのは良いことです(変数が選択されると変数が反転されると仮定しています):

  • 可能なすべてのフリップで状態空間を生成し、目標状態への最良の近似をもたらすリテラルの空間を検索します。
  • より一般的なリテラルから始めてフリップする変数をランダムに選択します。
  • ランダムリテラルを選択します。

回答:


12

満足する節の最大数は私たちが探しているものではありませんか?

はい、最大数の節(できればすべての節)を満たす割り当てを探しています。そして、そのために、「どの単一変数が、この目標をひっくり返すときにこの目標に最も近くなるのか」と自問します。そしてそれを裏返します。

解決策を見つけるために、解決策またはその近似を使用しようとしているように思えます。

このソリューションを使用すると、「複数のフリップを組み合わせることで最良の結果が得られるでしょうか?」または単に「どの割り当てが最適ですか?」。しかし、それは私たちがやっていることではなく、一歩先を見ているだけです。解の近似値を使用することは、正確な説明のように思えます。しかし、それは何の問題もありません。それが貪欲な戦略の仕組みです。

可能なすべてのフリップで状態空間を生成し、目標状態への最良の近似をもたらすリテラルの空間を検索します。

右。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.