Thuật toán GSAT, phần lớn, thẳng tiến: Bạn nhận được một công thức ở dạng bình thường kết hợp và lật các mệnh đề của mệnh đề cho đến khi bạn tìm thấy một giải pháp thỏa mãn công thức hoặc bạn đạt đến giới hạn max_tries / max_flips và không tìm thấy giải pháp nào.
Tôi đang thực hiện thuật toán sau:
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
Tôi gặp sự cố khi giải thích dòng sau:
V <- the variable whose flip yield the most important raise in the number of satisfied clauses;
Không phải là số mệnh đề thỏa mãn tối đa mà chúng ta đang tìm kiếm sao? Dường như với tôi rằng chúng tôi đang cố gắng sử dụng giải pháp hoặc các xấp xỉ cho nó để tìm giải pháp.
Tôi đã nghĩ ra một số cách để làm điều này nhưng thật tốt khi nghe các quan điểm khác (Giả định là một khi biến được lật một khi nó được chọn.):
- Tạo một không gian trạng thái với tất cả các lần lật có thể và tìm kiếm không gian cho một nghĩa đen dẫn đến sự gần đúng nhất với trạng thái mục tiêu.
- Chọn ngẫu nhiên biến mà tôi sẽ lật bắt đầu bằng các chữ phổ biến hơn.
- Chọn một nghĩa đen ngẫu nhiên.