जिस एप्लिकेशन पर मैं काम कर रहा हूं वह एक प्रकार का "कॉन्फ़िगरेटर" है। यह सी # में लिखा गया है और मैंने इसके साथ जाने के लिए एक नियम इंजन भी लिखा है। विचार यह है कि प्रस्तावक तर्क कथनों का एक समूह है, और उपयोगकर्ता चयन कर सकता है। उन्होंने जो चुना है उसके आधार पर, कुछ अन्य आइटम आवश्यक या पूरी तरह से अनुपलब्ध हो जाते हैं।
प्रस्तावक तर्क कथन आम तौर पर निम्नलिखित रूप लेते हैं:
A => ~X
ABC => ~(X+Y)
A+B => Q
A(~(B+C)) => ~Q A <=> B
प्रतीक:
=> -- Implication
<=> -- Material Equivalence
~ -- Not
+ -- Or
Two letters side-by-side -- And
मैं प्रोलॉग के लिए बहुत नया हूं, लेकिन ऐसा लगता है कि यह मेरे लिए सभी "नियम प्रसंस्करण" को संभालने में सक्षम हो सकता है, जिससे मुझे अपने वर्तमान नियम इंजन से बाहर निकलने की इजाजत मिलती है (यह काम करता है, लेकिन यह उतना तेज़ या आसान नहीं है जैसा मैं चाहूंगा वैसा बनाए रखूंगा)।
इसके अलावा, सभी उपलब्ध विकल्प एक पदानुक्रम में आते हैं। उदाहरण के लिए:
Outside
Color
Red
Blue
Green
Material
Wood
Metal
यदि दूसरे स्तर पर एक आइटम (सुविधा, जैसे रंग) निहित है, तो तीसरे स्तर पर एक आइटम (विकल्प, जैसे लाल) का चयन किया जाना चाहिए। इसी तरह अगर हम जानते हैं कि कोई फीचर असत्य है, तो उसके अंतर्गत आने वाले सभी विकल्प भी झूठे होते हैं।
पकड़ यह है कि हर उत्पाद के अपने नियम होते हैं। क्या इन ऑपरेटरों को विधेय के रूप में ज्ञान आधार स्थापित करने के लिए एक उचित दृष्टिकोण है, फिर रनटाइम पर उत्पाद के सभी नियमों का पालन करना शुरू करें?
जिस तरह से मैं कल्पना करता हूं कि यह काम कर सकता है, घटकों, सुविधाओं और विकल्पों के विचार को स्थापित करना होगा। फिर तब के बीच संबंध स्थापित करें (उदाहरण के लिए, यदि सुविधा झूठी है, तो इसके सभी विकल्प झूठे हैं)। रनटाइम पर, उत्पाद के विशिष्ट नियम जोड़ें। फिर उपयोगकर्ता के सभी चयनों को एक फ़ंक्शन में पास करें, आउटपुट के रूप में पुनर्प्राप्त करें कि कौन से आइटम सत्य हैं और कौन से आइटम झूठे हैं।
मैं जो कुछ भी पूछ रहा हूं उसके सभी प्रभावों को मैं नहीं जानता, क्योंकि मैं अभी प्रोलॉग में जा रहा हूं, लेकिन मैं एक बुरे रास्ते पर जाने और प्रक्रिया में बहुत समय बर्बाद करने से बचने की कोशिश कर रहा हूं।
कुछ प्रश्न जो मैं खोजने की कोशिश कर रहा हूं उसे लक्षित करने में मदद कर सकता है:
- क्या यह ध्वनि करने योग्य है?
- क्या मैं गलत पेड़ को काट रहा हूँ?
- क्या रनटाइम पर इन सभी नियमों को बनाने की कोशिश करने में कोई कमी या चिंता है?
- क्या इस तरह की चीज के लिए कोई बेहतर प्रणाली है कि मैं एक सी # ऐप (सिल्वरलाइट, सटीक होने के लिए) में निचोड़ने में सक्षम हो सकता हूं?
- क्या अन्य प्रतिस्पर्धी प्रणालियाँ हैं जिनकी मुझे जाँच करनी चाहिए?
- क्या आपके पास इस तरह की चीज़ों के बारे में कोई सामान्य सलाह है?
सलाह के लिए आपको अग्रिम शुक्रिया!
2 जवाब
- ज़रूर, लेकिन प्रोलॉग में सीखने की अवस्था है।
- नियम-आधारित अनुमान प्रोलॉग का खेल है, हालांकि आपको कई नियमों को हॉर्न क्लॉजमें फिर से लिखना पड़ सकता है। ए>।
A+B => Q
संभव है (यहq :- a. q :- b.
याq :- (a;b).
हो जाता है) लेकिन आपके अन्य उदाहरणों को फिर से लिखा जाना चाहिए, जिसमेंA => ~X
शामिल हैं। - आपके प्रोलॉग कंपाइलर पर निर्भर करता है, विशेष रूप से यह गतिशील भविष्यवाणियों के लिए अनुक्रमण का समर्थन करता है या नहीं।
- "आगे की जाँच", "अनुमान इंजन" और "व्यावसायिक नियम" जैसे शब्दों के लिए चारों ओर खोजें। विभिन्न समुदाय इस समस्या के लिए अलग-अलग शब्दावली का आविष्कार करते रहते हैं।
- प्रतिबंध प्रबंधन नियम (CHR) एक तर्क प्रोग्रामिंग भाषा है, जिसे प्रोलॉग एक्सटेंशन के रूप में लागू किया गया है, अर्थात नियम-आधारित अनुमान/आगे की चेनिंग/व्यापार नियम इंजन के बहुत करीब। यदि आप इसका उपयोग करना चाहते हैं, तो आपको अभी भी मूल प्रोलॉग सीखना होगा।
- ध्यान रखें कि प्रोलॉग एक प्रोग्रामिंग भाषा है, तार्किक अनुमान के लिए सिल्वर बुलेट नहीं। यह चीजों को कुशलतापूर्वक गणना योग्य रखने के लिए प्रथम-क्रम तर्क के कुछ कोनों में कटौती करता है। यही कारण है कि यह केवल हॉर्न क्लॉज को संभालता है: उन्हें प्रक्रियाओं/सबरूटीन्स के साथ एक-से-एक मैप किया जा सकता है।
सामग्री का बिल बनाने के लिए आप डीसीजी भी लगा सकते हैं। विचार मोटे तौर पर यह है कि टर्मिनलों का उपयोग उप-उत्पादों को इंगित करने के लिए किया जा सकता है, और गैर-टर्मिनलों का उपयोग उप-उत्पादों के अधिक से अधिक जटिल संयोजनों को परिभाषित करने के लिए किया जा सकता है जब तक कि आप अपने अंतिम कॉन्फ़िगर करने योग्य उत्पादों तक नहीं पहुंच जाते।
उदाहरण के लिए दो विशेषता मान जोड़े रंग {लाल, नीला, हरा} और सामग्री {लकड़ी, धातु} में लें। ये एक दरवाजा घुंडी निर्दिष्ट कर सकते हैं, जिससे सभी संयोजन संभव नहीं हैं:
knob(red,wood) --> ['100101'].
knob(red,metal) --> ['100102'].
knob(blue,metal) --> ['100202'].
फिर आप एक दरवाजे को इस प्रकार परिभाषित कर सकते हैं:
door ... --> knob ..., panel ...
दिलचस्प बात यह है कि आप इस तरह के उत्पाद विनिर्देश में कोई तर्क सूत्र नहीं देखेंगे, केवल तथ्य और नियम, और बहुत सारे पैरामीटर पास हो गए हैं। आप एक ज्ञान प्राप्ति घटक में पैरामीटर का उपयोग कर सकते हैं। केवल अनियंत्रित लक्ष्यों को चलाकर आप विशेषता मान जोड़े के लिए संभावित मान प्राप्त कर सकते हैं। विधेय setof/3 आपके लिए डुप्लिकेट को सॉर्ट और हटा देगा:
?- setof(Color,Material^Bill^knob(Color,Material,Bill,[]),Values).
Value = [blue, red]
?- setof(Material,Color^Bill^knob(Color,Material,Bill,[]),Values).
Material = [metal, wood]
अब आप विशेषताओं की श्रेणी जानते हैं और आप अंतिम-उपयोगकर्ता को क्रमिक रूप से एक विशेषता और एक मान चुनने दे सकते हैं। मान लें कि वह विशेषता रंग और उसका मान नीला लेता है। विशेषता सामग्री की सीमा तब तदनुसार सिकुड़ती है:
?- setof(Material,Bill^knob(blue,Material,Bill,[]),Values).
Material = [metal]
अंत में जब सभी विशेषताओं को निर्दिष्ट किया गया है तो आप उप-उत्पादों की आलेख संख्या पढ़ सकते हैं। आप मूल्य गणना के लिए इसका उपयोग कुछ तथ्यों को जोड़कर कर सकते हैं जो आपको लेख संख्या पर अतिरिक्त जानकारी देते हैं, या ऑर्डरिंग सूचियां आदि उत्पन्न करने के लिए उपयोग कर सकते हैं।
?- knob(blue,metal,Bill,[]).
Bill = ['100202']
सादर
पुनश्च: ओह ऐसा लगता है कि उत्पाद विन्यासकर्ता में प्रयुक्त सामग्री विचार का बिल क्लॉक्सिन एंड मेलिश को लौटें। कम से कम मुझे एक संबंधित मिलता है यहां टिप्पणी करें: http://www.amzi.com/manuals/amzi/pro/ref_dcg .htm#DCGBillMaterials
संबंधित सवाल
नए सवाल
prolog
इस टैग का उपयोग न करें जैसे कि प्रस्तावना और उपसंहार। प्रोलॉग सबसे अधिक इस्तेमाल किया जाने वाला लॉजिक प्रोग्रामिंग लैंग्वेज है। यह कालानुक्रमिक बैकट्रैकिंग और पैटर्न के एकीकरण के माध्यम से गैर-निर्धारक प्रोग्रामिंग का समर्थन करता है।