2015-12-06 165 views
2

我需要一些幫助,在我的ABM。我的模型是基於元胞自動機的。烏龜有三種品種的自行車,自行車和汽車。當模擬開始時,安裝過程應該創建一些特定數量的龜。例如: 擁有品種自行車的海龜總數的30%, 擁有品種自行車的海龜總數的30%, 擁有品種車的海龜總數的40%。 並且總(30%+ 30%+ 40%)=龜總數 我的代碼看起來像以下:在Netlogo創建海龜

breed[bike] 
breed[cycle] 
breed[car] 
to setup 
ask patches[ 
sprout 1 [ 
let b = count bike(round (30/100 * count turtles)) 
let cy = count cycle(round(30/100 * count turtles)) 
let c = count car (round(40/100 * count turtles)) 
create-bike b 
ask bike[set color gray] 
create-cycle cy 
ask cycle[set color blue] 
create-car c 
ask car[set color green] 
] 
] 
end 

但發生如穿心蓮自行車的錯誤,創建週期和創建車是觀察員,不能在這裏使用。 請指導我。 謝謝

+0

請發佈你到目前爲止。你需要爲每一個'breed'語句,你會需要像'創建,汽車10' – JenB

+0

品種[自行車] 品種[汽車] 品種[週期]一些語句 設置 全部清除 問補丁[ 萌芽1 集品種((名單自行車車週期)之一的) 問自行車[一套灰色] 問車[組顏色藍色] 問循環[一套綠顏色] ] ] 結束 在Sprout creat-car內部不會像觀察者那樣工作。我只希望有30%的品種有自行車,30%的品種有龜類,40%是有品種的品種。我需要我的模型元胞自動機。 – Aisha

+0

@Aisha歡迎來到Stack Overflow!當它被粘貼到類似的評論中時,讀取代碼非常困難。請編輯您的原始問題並在其中添加代碼。然後我們將能夠幫助你。 –

回答

3

你正在一個發芽的聲明裏面的創建龜。兩者都是創建海龜的方式。這是你有什麼修正版本:

breed[bikes bike] 
breed[cycles cycle] 
breed[cars car] 

to setup 
    set num-turtles 100  ; or use a slider to set total turtle numbers 
    create-bikes round (0.3 * num-turtles) 
    [ set color gray 
    setxy random-xcor random-ycor 
    ] 
    create-cycles round (0.3 * num-turtles) 
    [ set color blue 
    setxy random-xcor random-ycor 
    ] 
    create-cars round (0.4 * num-turtles) 
    [ set color green 
    setxy random-xcor random-ycor 
    ] 
end 

然而,有可能是您希望每個補丁有一個烏龜(如果我正確地解釋你的元胞自動機的請求)。在這種情況下,你需要的是這樣的:

breed[bikes bike] 
breed[cycles cycle] 
breed[cars car] 

to setup 
    ask patches 
    [ let xx random-float 1 
    ifelse xx < 0.3 [ sprout-bikes 1 [ set color gray ] ] [ 
    ifelse xx < 0.6 [ sprout-cycles 1 [ set color blue ] ] [ 
        [ sprout-cars 1 [ set color green ] ] ] ] 
    ] 
end 

我強烈建議你嘗試,你缺少一些基本面代碼的下一位之前做的教程在現場的NetLogo網上提供。例如,count turtles是報告已經存在的龜的數量的指令。您需要了解接口和代碼之間的連接。您應該也可以看看一些示例模型。

+0

非常感謝! – Aisha

+0

你在這裏使用了隨機浮點數。如果我計算海龜的總數,這是可能的,然後隨機的0.3%的海龜應該有自行車,0.2%的週期和0.5%的汽車。每個補丁上都有1只烏龜。 – Aisha

+0

'random-float 1'返回一個從0到1的數字(並將其放入我的代碼中的變量xx中)。然後你可以分開你喜歡的範圍。所以如果你想要30%的自行車,20%的週期和50%的汽車,那麼範圍是0到0.2,0.2到0.5和0.5到1.所以簡單地把0.6代碼改成0.5。 – JenB