agenda_search के लिए कोड ठीक काम करना चाहिए। दक्षता के लिए आप किसी अन्य डेटास्ट्रक्चर का उपयोग करने पर विचार करना चाहेंगे; वास्तव में, चौड़ाई-पहले मोड में नोड्स (टी) की पूरी सूची को संलग्न (टी, सी, ए) द्वारा पार किया जाएगा। उदाहरण के लिए आप एसआईसीस्टस से लाइब्रेरी (कतार) मॉड्यूल का उपयोग कर सकते हैं। ब्रेड-फर्स्ट सर्च तब निम्नानुसार दिखाई देगी (प्रारंभ/1 भविष्यवाणी द्वारा पैरामीटर द्वारा उत्तराधिकारी एस/2 और लक्ष्य अनुमानित लक्ष्य/1)। नोट, मैंने लूप जांच भी जोड़ा है।
bfs(Res) :- start(Start), empty_queue(EQ),
queue_append(EQ,[e(Start,[])],Q1),
bfs1(Q1,Res).
bfs1(Queue,Res) :- queue_cons(e(Next,Path),NQ,Queue),
bfs2(Next,Path,NQ,Res).
bfs2(H,Path,_NQ,Res) :- goal(H), reverse([H|Path],Res).
bfs2(H,Path,NQ,Res) :-
findall(e(Succ,[H|Path]),
(s(H,Succ),\+ member(Succ,Path)),AllSuccs),
queue_append(NQ,AllSuccs,NewQueue),
bfs1(NewQueue,Res).
(। आप भी आजमा सकते हैं और की जगह/एक बेहतर आंकड़ा संरचना द्वारा पथ घटक के पूरक हैं, जैसे, AVL-वृक्ष) हल करने के लिए एक उदाहरण समस्या होगा:
start(env(0,0)).
s(env(X,Y),env(X1,Y)) :- X1 is X+1.
s(env(X,Y),env(X,Y1)) :- Y1 is Y+1.
goal(env(3,3)).
आप भी कर सकते हैं कतार को प्राथमिकता कतार से प्रतिस्थापित करें, और एक ह्युरिस्टिक फ़ंक्शन का उपयोग करके प्राथमिकता की गणना करें। फिर आपको ए * खोज मिलती है (जो गहराई-पहले, चौड़ाई-पहले, सर्वोत्तम-प्रथम, ... का अनुकरण कर सकती है।)। ब्राट्को की पुस्तक (आर्टिफिशियल इंटेलिजेंस के लिए तर्क प्रोग्रामिंग) इस सामग्री को पढ़ने के लिए अच्छा स्रोत होना चाहिए।
इसके अलावा, चौड़ाई पहले सबसे कम पथ/पथ पाएंगे। –