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.