नेटवर्क एक्सटेंशन के साथ कम लागत पथ

मैं बहुभुज (कई पैच से बना) के बीच कम से कम लागत पथ बनाना चाहता हूं जिसमें भेड़िया के चारों ओर 6 के त्रिज्या में स्थित एक भेड़िया और सभी बहुभुज हैं। मेरा कोड यहाँ है:

चरण 1: मैंने Netlog पर नेटवर्क एक्सटेंशन का उपयोग करने के लिए निम्नानुसार एक नेटवर्क बनाया है:

wolves-own [my-cost-of-path my-path] 
patches-own [polygon night-cost LCP-distance-between-polygons]
turtles-own [cost-of-turtle]
links-own [cost-of-link]

to create-network

ask patches [ 
if not any? turtles-here [ 
 sprout 1 [ 
  set shape "dot" 
  set color white
  set size 0.5 ] ] ] 

ask turtles [ 
 set cost-of-turtle [night-cost] of patch-here 
 create-links-with turtles-on neighbors ]  

ask links [ set cost-of-link sum [night-cost] of both-ends ]

end

चरण 2: मैंने "कम से कम लागत-पथ" फ़ंक्शन को निम्नानुसार परिभाषित किया है:

to-report least-cost-path [ID-polygon] 
let my-cost-of-path -1 

ask wolves [ 
foreach sort turtles-on patches with [plabel = ID-polygon] [  
  let turtle-on-polygon ? 
  nw:set-snapshot turtles links

 ask turtles-here [ let cost nw:weighted-distance-to turtle-on-polygon "cost-of-link"
    if my-cost-of-path = -1 or cost < my-cost-of-path [
      set my-cost-of-path cost
      set my-path nw:weighted-path-to turtle-on-polygon "cost-of-link" ] ] ]

foreach my-path [
  ask ? [ set color red
    set thickness 0.2 ] ] ]

report my-cost-of-path

end 

चरण 3: भेड़िया के चारों ओर 6 के त्रिज्या में स्थित भेड़िया और सभी बहुभुजों के बीच पथ बनाने के लिए मैंने "कम लागत वाली पथ" फ़ंक्शन का उपयोग किया:

ask wolves [      
 ask patches in-radius 8 [ 
 let list-ID-polygon-in-buffer ( [plabel] of patches in-radius 8 ) 
 set list-ID-polygon-in-buffer remove-duplicates list-ID-polygon-in-buffer 
 set list-ID-polygon-in-buffer remove [plabel] of patch-here list-ID-polygon-in-buffer 
 set list-ID-polygon-in-buffer remove "" list-ID-polygon-in-buffer 

  foreach list-ID-polygon-in-buffer [ 
   let ID-polygon-in-buffer ? 
    ask patches with [plabel = ID-polygon-in-buffer] [ 
     set LCP-distance-between-polygons least-cost-path ID-polygon-in-buffer ] ] ] ]

इस कोड के साथ, मुझे दो समस्याएं हैं:

1) the variable "cost" in step 2 takes FALSE/TRUE. On the contrary, "cost" must be a number. Consequently, I have a error message : The < operator can be only used on two numbers.

2) चरण 2 में, "मेरा-लागत-पथ" और "मेरा-पथ" चर भेड़ियों के लिए विशिष्ट होना चाहिए: भेड़िये-स्वयं [मेरा मूल्य-पथ-पथ मेरा मार्ग]। मेरे पास एक त्रुटि संदेश है क्योंकि मेरे कोड "मेरे-लागत-पथ" और "माई-पथ" में कछुए के लिए विशिष्ट नहीं हैं (ये चर "कछुए पूछें" यहां स्थित हैं)।

आपकी मदद के लिए बहुत बहुत शुक्रिया।

3

1 उत्तर

1 के बारे में):

nw:weighted-distance-to reports false if no path exists.

कोई रास्ता कैसे नहीं हो सकता है, क्योंकि आपका नेटवर्क पूरी तरह से जुड़ा हुआ प्रतीत होता है? खैर, समस्या यह है कि आप केवल अपने नेटवर्क में कछुओं से निपट नहीं रहे हैं: आप भेड़िया से कुछ कोड खोजने के लिए कछुए पूछें से पूछ रहे हैं। लेकिन भेड़िया स्वयं को कछुए-यहां में शामिल किया गया है, और भेड़िया नेटवर्क से कनेक्ट नहीं है!

आप शायद अन्य कछुओं से पूछ सकते हैं- यहां , लेकिन आपको यह सुनिश्चित करना होगा कि एक ही पैच पर कोई अन्य भेड़िया नहीं है।

करने के लिए सबसे अच्छी बात यह है कि संभवतः आपके नेटवर्क में नोड्स के लिए एक अलग नस्ल बनाने के लिए। यदि आपके पास नोड्स नामक नस्ल थी, तो आप नोड्स-यहां पूछें कह सकते हैं और यह आपकी समस्या को अच्छी तरह से हल करेगा।

2 के संबंध में):

आपके द्वारा पोस्ट किए गए कोड को संकलित नहीं किया गया है क्योंकि आप अपने कम-लागत-पथ संवाददाता के शीर्ष पर मेरा-लागत-पथ -1 करने का प्रयास कर रहे हैं, लेकिन my-cost-of-path पहले से ही भेड़िया चर है। आपका कोड मुझे भ्रमित कर रहा है, इसलिए मैं आपको एक पूरा समाधान नहीं दे सकता।

क्या आपका कम-लागत-पथ रिपोर्टर स्थानीय चर या भेड़िया चर पर संचालित होना चाहिए? यदि आपको स्थानीय चर की आवश्यकता है, तो इसका एक अलग नाम होना चाहिए। दूसरी तरफ, यदि आप सीधे अपने भेड़िये चर पर काम करना चाहते हैं, तो शायद यह कम लागत वाली पथ के लिए एक संवाददाता होने के लिए अधिक समझ नहीं लेता है (और आप निश्चित रूप से रिपोर्ट नहीं कर सकते < कोड> मेरी लागत का पथ इसके अंत में)। आपको शायद कुछ चीजों को पुन: व्यवस्थित करने की आवश्यकता है ...

3
जोड़ा