SAT 지역 검색을위한 지원 데이터 구조


20

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 는 절의 수입니다. 나는 우리가 더 잘할 수 있다고 확신하므로 질문 :O(VC)VC

많은 지역 검색 알고리즘은 충족 된 절 수를 최대화하는 변수의 할당을 뒤집습니다. 실제로이 작업은 어떤 데이터 구조로 효율적으로 지원됩니까?

이것은 종종 교과서가 생략하는 느낌입니다. 하나의 예는 유명한 Russell & Norvig 책 입니다.


글쎄, 이 사람들 은 하드웨어로 그것을 구축합니다. 분명히 , 확률론적이고 휴리스틱 접근법이 더 대중적이다. "실제로"최고 "변수를 신속하게 선택할 수 없거나이 선택이 일반적으로 좋지 않다는 것을 의미합니다.
Raphael

@Raphael 어쩌면 당신은 그것을 매우 빨리 선택할 수 없다는 것이 맞을지 모르지만, "선택은 일반적으로 좋지 않다"고 감히 말하지 않을 것입니다. 어쩌면 나는 당신의 요점을 잘못 이해했을 수도 있지만, "올바른"변수를 선택하면 큰 영향을 줄 것이라고 확신합니다. 고마워, 좀 더 깊이 파고 들게 당신이 연결 한 슬라이드 (Hoos)의 저자 중 한 사람이 그 주제에 관한 책을 가지고 있다고 생각합니다.
Juho

"올바른"것이 최적이지만 지금 최대화하는 것이 옳다고 믿을만한 이유가 있습니까? 결국, 문제는 (정규적인) 탐욕으로 해결할 수 없습니다 .
Raphael

답변:


9

필요한 데이터 구조는 발생 목록 , 변수가 발생하는 절을 포함하는 각 변수에 대한 목록입니다.이 목록은 CNF를 처음 읽을 때 한 번 작성됩니다. 이들은 만족 된 절을 계산하기 위해 CNF 공식 전체를 스캔하지 않도록하기 위해 아래 3 단계와 5 단계에서 사용됩니다.

모든 변수를 뒤집는 것보다 더 나은 알고리즘은 다음과 같습니다.

  1. 충족되지 않은 절에서 발생하는 변수 만 나열하십시오.
  2. x
  3. x
  4. x
  5. x
  6. x
  7. x
  8. 1 단계에서 찾은 나머지 변수에 대해 2-7 단계를 반복하십시오.
  9. 7 단계에서 기록한 가장 높은 숫자로 변수를 뒤집습니다.

데이터 구조 (종종 인접 목록이라고도 함)에 대한 참조는 예를 들어 Lynce and Marques-Silva, 역 추적 SAT 솔버를위한 효율적인 데이터 구조, 2004입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.