WalkSAT และ GSATเป็นอัลกอริทึมการค้นหาในท้องถิ่นที่รู้จักกันดีและเรียบง่ายสำหรับการแก้ปัญหาความพึงพอใจบูลีน pseudocode สำหรับอัลกอริทึม 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
ที่นี่เราพลิกตัวแปรที่เพิ่มจำนวนอนุประโยคที่พอใจ สิ่งนี้ทำอย่างมีประสิทธิภาพได้อย่างไร วิธีการที่ไร้เดียงสาคือการพลิกทุกตัวแปรและสำหรับแต่ละขั้นตอนผ่านส่วนคำสั่งทั้งหมดและคำนวณจำนวนที่พอใจ แม้ว่าจะมีการสอบถามข้อใดเพื่อความพึงพอใจในเวลาคงที่ แต่ก็ยังคงใช้วิธีการไร้เดียงสาในโดยที่คือจำนวนตัวแปรและจำนวนCของจำนวนคำสั่ง ฉันแน่ใจว่าเราสามารถทำได้ดีกว่าดังนั้นคำถาม:
อัลกอริธึมการค้นหาในท้องถิ่นหลายแห่งพลิกการมอบหมายของตัวแปรที่ช่วยเพิ่มจำนวนของอนุประโยคที่พอใจ ในทางปฏิบัติการดำเนินการนี้สนับสนุนโครงสร้างข้อมูลใดได้อย่างมีประสิทธิภาพ
นี่คือสิ่งที่ฉันรู้สึกเหมือนตำราเรียนมักจะละเว้น ตัวอย่างหนึ่งคือแม้จะมีชื่อเสียงรัสเซลและ Norvig หนังสือ