एसएटी स्थानीय खोज के लिए डेटा संरचनाओं का समर्थन करना


20

वूलसैट और जीसैट बूलियन संतोषजनकता समस्या को हल करने के लिए प्रसिद्ध और सरल स्थानीय खोज एल्गोरिदम हैं। 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

यहां हम उस वेरिएबल को फ्लिप करते हैं जो संतुष्ट क्लॉज़ की संख्या को अधिकतम करता है। यह कुशलता से कैसे किया जाता है? भोली विधि प्रत्येक चर को फ्लिप करने के लिए है, और प्रत्येक चरण के लिए सभी खंडों के माध्यम से और गणना करें कि उनमें से कितने संतुष्ट हैं। भले ही कोई क्लॉज निरंतर समय में संतोषजनकता के लिए क्वियर किया जा सकता है, भोली विधि अभी भी समय में चलेगी , जहां वी चर की संख्या और सी क्लॉस की संख्या है। मुझे यकीन है कि हम बेहतर कर सकते हैं, इसलिए सवाल:O(VC)VC

कई स्थानीय खोज एल्गोरिदम चर के असाइनमेंट को फ्लिप करते हैं जो संतुष्ट क्लॉज़ की संख्या को अधिकतम करता है। व्यवहार में, इस ऑपरेशन को किस डेटा संरचनाओं के साथ कुशलतापूर्वक समर्थित किया गया है?

यह कुछ ऐसा है जो मुझे लगता है कि पाठ्यपुस्तकों में अक्सर चूक होती है। एक उदाहरण प्रसिद्ध रसेल और नॉरविग पुस्तक का भी है


ठीक है, ये लोग इसे हार्डवेयर में बनाते हैं। स्पष्ट रूप से , संभाव्य और हेयुरिस्टिक दृष्टिकोण अधिक लोकप्रिय हैं; यह सुझाव देगा कि आप वास्तव में "सर्वश्रेष्ठ" नहीं चुन सकते हैं (यह केवल लालची है, सब के बाद) जल्दी से चर, या यह कि यह विकल्प सामान्य रूप से अच्छा नहीं है।
राफेल

@ राफेल शायद आप सही कह रहे हैं कि कोई इसे बहुत जल्दी नहीं चुन सकता है, लेकिन मैं यह कहने की हिम्मत नहीं करूंगा कि "पसंद सामान्य रूप से अच्छी नहीं है"। हो सकता है कि मैंने आपकी बात को गलत समझा हो, लेकिन मुझे पूरा यकीन है कि "सही" वेरिएबल का बहुत बड़ा प्रभाव है। धन्यवाद, मैं थोड़ी गहराई में खुदाई करूँगा। मुझे लगता है कि आपके द्वारा जुड़ी स्लाइड्स में से एक लेखक (हूज़) की इस विषय पर एक किताब है।
जुहो

"सही" एक इष्टतम होगा, लेकिन क्या यह मानने का कारण है कि जो अब अधिकतम होता है वह सही है? सब के बाद, समस्या लालची (विहित) द्वारा हल नहीं है
राफेल

जवाबों:


9

आवश्यक डेटा संरचना एक होने वाली सूची है , प्रत्येक चर के लिए एक सूची जिसमें चर होता है जिसमें चर होता है। इन सूचियों को एक बार बनाया जाता है, जब सीएनएफ पहली बार पढ़ा जाता है। संतुष्ट खंडों की गणना करने के लिए पूरे CNF सूत्र को स्कैन करने से बचने के लिए उनका उपयोग नीचे दिए गए चरणों 3 और 5 में किया जाता है।

प्रत्येक चर को फ़्लिप करने से बेहतर एल्गोरिथम है:

  1. असंतुष्ट खंडों में होने वाले केवल चर की सूची बनाएं।
  2. x
  3. x
  4. x
  5. x
  6. x
  7. x
  8. चरण 1 में पाए गए बाकी चर के लिए चरण 2-7 दोहराएं।
  9. चरण 7 में दर्ज उच्चतम संख्या के साथ चर को फ्लिप करें।

डेटा संरचना के लिए एक संदर्भ (अक्सर एक आसन्न सूची के रूप में भी जाना जाता है) उदाहरण के लिए लिसे और मार्केस-सिल्वा, बैकट्रैकिंग एसएटी सॉल्वर्स, 2004 के लिए कुशल डेटा संरचनाएं हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.