2012-01-01 13 views
9

मेरे पास सिकस्टस प्रोलॉग में बाधाओं का उपयोग करके एक प्रोग्राम लिखा गया है। मेरा लक्ष्य लेबलिंग/2 और कुछ अन्य तरीकों का उपयोग करना है ताकि वे मेरे चर के यादृच्छिक त्वरण प्राप्त कर सकें।प्रोलॉग: यादृच्छिक लेबलिंग

उदाहरण:

X #> 2, Y #= 2*X, Z #<10 

अगर मैं का उपयोग

List = [X,Y,Z], 
labeling([], List) 

पहला परिणाम प्राप्त हो जाएगा एक्स = वाई = जेड = 0. कैसे आपको लगता है एक यादृच्छिक सेट वापस जाने के लिए सबसे अच्छा तरीका है एक्स, वाई और जेड के लिए मूल्यों का?

उत्तर

6

मुझे हाल ही में एसआईसीस्टस संस्करणों में लेबलिंग विकल्पों के बारे में बहुत कुछ पता नहीं है, लेकिन एसडब्ल्यूआई-प्रोलॉग की लाइब्रेरी (सीएलपीएफडी) के साथ, यादृच्छिक_वर्तनीय (बीज) और random_value (बीज) विकल्प हैं, आप उदाहरण के लिए उनका उपयोग कर सकते हैं लेबलिंग ([random_variable (10), random_value (10)], सूची)। हो सकता है कि आप इसी विकल्प को एकीकृत करने के लिए एसआईसीस्टस के लेखकों को प्राप्त कर सकें?

+1

मैं, random_variable और लेबलिंग के लिए विकल्प के रूप में random_value उपयोग करने के लिए सक्षम होने के लिए नहीं है, भले ही मुझे लगता है कि library.' उपयोग कर रहा हूँ! उपयोगकर्ता की तर्क 1 में डोमेन त्रुटि: लेबलिंग/2 ! अपेक्षित लेबलिंग_ विकल्प, लेकिन random_variable (10) मिला! लक्ष्य: लेबलिंग (उपयोगकर्ता: [random_variable (10), random_value (10)], [_ 134]) ' – ecc

+0

यह वास्तव में एक बमर है कि मैं उन विकल्पों का उपयोग एसआईसीस्टस के साथ नहीं कर सकता, क्योंकि मुझे एसडब्ल्यूआई के बजाय इसका उपयोग करने के लिए मजबूर होना पड़ता है । – ecc

0

आप तथापि Sicstus में यादृच्छिक बीज के साथ काम कर विभिन्न मूल्यों प्राप्त करने के लिए, में all_different ([X, Y, Z]) का उपयोग कर सकते मुश्किल हो सकता है और आप बीज या शुरू बदलने के लिए एक समारोह को परिभाषित करने की आवश्यकता हो सकती यादृच्छिक समारोह फिर से। www.sics.se/sicstus/docs/3.7.1/html/sicstus_23.html

2

sicstus में नीचे जांच, इस चर/मूल्यों के एक कस्टम चयन के साथ किया जाता है।

आपके मामले में, बस करो: https://sicstus.sics.se/sicstus/docs/4.0.4/html/sicstus/Enumeration-Predicates.html में

labeling([value(mySelValores)], List) 

mySelValores(Var, _Rest, BB, BB1) :- 
    fd_set(Var, Set), 
    select_best_value(Set, Value), 
    ( 
     first_bound(BB, BB1), Var #= Value 
     ; 
     later_bound(BB, BB1), Var #\= Value 
    ). 

select_best_value(Set, BestValue):- 
    fdset_to_list(Set, Lista), 
    length(Lista, Len), 
    random(0, Len, RandomIndex), 
    nth0(RandomIndex, Lista, BestValue). 

मूल्य (Enum) देखें।

आशा है कि यह मदद करता है;)

+1

इसे साफ करने के लिए, आपको स्पष्ट रूप से एक बीज का उल्लेख करने की आवश्यकता है! – false

+0

https://sicstus.sics.se/sicstus/docs/4.0.4/html/sicstus/Enumeration-Predicates.html –