WalkSATとGSATは、ブール充足可能性問題を解決するためのよく知られたシンプルなローカル検索アルゴリズムです。GSATアルゴリズムの擬似コードは、質問「GSATアルゴリズムの実装-反転するリテラルの選択方法」からコピーされています。以下に示します。
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は変数の数で、Cは節の数です。私たちはもっと良くできると確信しているので、質問:
多くのローカル検索アルゴリズムは、満たされた節の数を最大化する変数の割り当てを反転します。実際には、この操作はどのデータ構造で効率的にサポートされていますか?
これは、教科書がしばしば省略しているように感じるものです。一例は、有名なラッセルとノーヴィグの本ですらあります。
まあ、これらの人はハードウェアでそれを構築します。どうやら、確率的およびヒューリスティックなアプローチがより一般的です。それは、あなたが実際に「最良の」(結局は欲張りだけである)変数をすぐに選択できないこと、またはこの選択は一般に良くないことを示唆します。
—
ラファエル
@Raphaelたぶん、あなたはそれを非常に迅速に選択することはできないことは正しいかもしれませんが、「選択は一般に良くない」と言うことを敢えてしないでしょう。あなたの主張を誤解したかもしれませんが、「正しい」変数を選択することは大きな影響を与えると確信しています。おかげで、もう少し詳しく掘り下げます。リンクしたスライドの著者の1人(Hoos)がこのテーマに関する本を持っていると思います。
—
-Juho
「正しい」ものが最適ですが、現在最大化されているものが正しいものであると信じる理由はありますか?結局のところ、問題は(正規の)欲張りによって解決できません。
—
ラファエル