मैं clpfd लाइब्रेरी का उपयोग कर (swi) prolog में बाधाओं के साथ खेल रहा हूं।एसडब्ल्यूआई-प्रोलॉग और बाधाएं, लाइब्रेरी सीएलपी (एफडी)
मैं पहचानने की कोशिश कर रहा हूं कि बाधाओं का एक सेट दूसरे को समाहित करता है या उदाहरण देता है, उदा। एक्स < 4 एक्स < 7 encapsulates जब भी पूर्व सच है, बाद वाला सच है। यह तार्किक निहितार्थ का उपयोग करके आसानी से प्रतिनिधित्व किया जा सकता है। हालांकि, मुझे परिणाम प्राप्त करने के लिए # ==> ऑपरेटर नहीं मिल सका, इसलिए मैंने (Co1 #/\ # \ Co2) का उपयोग करने का सहारा लिया जहां Co1 और Co2 बाधाएं हैं। यह व्यक्तिगत बाधाओं के लिए ठीक है, लेकिन मैं तब Co1 और Co2 में बाधाओं के संयोजन को पारित करना चाहता था।
अब यहां रगड़ है। जब मैं
X#<7 #/\ #\X#<4.
कोशिश मैं वापस (विचित्र रूप से पर्याप्त, एक विभाजन गलती में Sicstus परिणामों में यह कर) प्राप्त
X in 4..6,
X+1#=_G822,
X+1#=_G834,
_G822 in 5..7,
_G834 in 5..7.
जब मैं में
X#<7,X#<4
मैं पारित वांछित
प्राप्त करेंजाहिर है, मैं बाद में पास नहीं कर सकता (Co1 #/\ # \ Co2), लेकिन पूर्व मुझे वह परिणाम नहीं देता है जो मैं चाहता हूं। क्या कोई यह समझा सकता है कि दोनों दृष्टिकोण अलग-अलग नतीजे क्यों देते हैं, और मैं पूर्व को कैसे बाद में कार्य करने के लिए प्राप्त कर सकता हूं?
बहुत धन्यवाद, मैं रैखिक असमानताओं के साथ काम कर रहा हूँ: उदाहरण के लिए निम्नलिखित सीएलपी (एफडी), में unsatisfiable लेकिन सीएलपी (क्यू) में संतुष्टि योग्य है। मैं स्वचालित रूप से संयोजन (संभावित रूप से अस्वीकृत) बाधाओं के एक सेट के लिए श्रेणियों को खोजने की कोशिश कर रहा हूं। इस प्रकार, मैं पास करने में सक्षम होना चाहता हूं (उदाहरण के लिए) एक्स # <4,\#(X#> 2), जो काम करता है। मैं कुछ और जटिल में भी गुजरना चाहता हूं, उदा। एक्स # <4,#\\(X#> 2, एक्स # <1), जो काम नहीं करता है, क्योंकि # \ को तब बाइनरी ऑपरेटर के रूप में माना जाता है। इसी तरह, इसे एक्स # <4,#\\((X#> 2, एक्स # <1) देना) भी एक त्रुटि में परिणाम देता है। – Nir
संयोजन को अस्वीकार करने के लिए, आपको #/\ का उपयोग करना होगा, उदाहरण के लिए: # \ (ए #/\ बी)। – mat