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;
満足する節の最大数は私たちが探しているものではありませんか?解決策を見つけるために、解決策またはその近似を使用しようとしているように思えます。
私はこれを行うためのいくつかの方法を考えましたが、他の視点を聞くのは良いことです(変数が選択されると変数が反転されると仮定しています):
- 可能なすべてのフリップで状態空間を生成し、目標状態への最良の近似をもたらすリテラルの空間を検索します。
- より一般的なリテラルから始めてフリップする変数をランダムに選択します。
- ランダムリテラルを選択します。