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;
찾고자하는 만족 한 절의 최대 개수가 아닌가? 우리는 해결책을 찾기 위해 해결책이나 근사치를 사용하려고하는 것 같습니다.
나는 이것을하는 몇 가지 방법을 생각했지만 다른 관점을 듣는 것이 좋을 것입니다 (변수가 일단 선택되면 일단 뒤집어지면 가정됩니다).
- 가능한 모든 반전으로 상태 공간을 생성하고 목표 상태에 가장 가까운 근사값을 나타내는 리터럴을 검색하십시오.
- 더 일반적인 리터럴로 시작하여 뒤집을 변수를 임의로 선택하십시오.
- 임의의 리터럴을 선택하십시오.