2016-04-15 6 views
1

Ich habe mein kleines Modell erstellt, aber ich erhalte zwar einen Fehler, weiß aber nicht warum?Sie können Migrate nicht in einem Turtle-Kontext verwenden, da migrate nur für Beobachter ist.

Ps: ich bin ein blutiger Anfänger

Der Fehlercode ist:

Sie können nicht in einer Schildkröte Kontext verwenden migrieren, weil migarte ia Beobachter geschützt.

Was kann ich tun?

Vielen Dank für Ihre Antworten.

breed [fish a-fish] 
breed [boats boat] 
boats-own [profit] 

to setup 
    clear-all 
    ask patches [set pcolor blue] 

    set-default-shape fish "fish" 
    create-fish initial-number-fish 
    [ 
    set color grey 
    set size 1.0 
    setxy random-xcor random-ycor 
    ] 

    set-default-shape boats "boat" 
    create-boats initial-number-boats 
    [ 
    set color black 
    set size 1.5 
    set profit random (1 * profit-per-fish) 
    setxy random-xcor random-ycor 
    ] 
    reset-ticks 
end 

to go 
    if not any? turtles [stop] 
    ask fish 
    [ 
    move 
    fish-reproduce 
    ] 
    ask boats 
    [ 
    move-boats 
    catch-fish 
    death 
    reproduce-boats 
    migrate 
    ] 
    tick 
end 

to move 
    rt random 50 
    lt random 50 
    fd 1 
end 


to fish-reproduce 
    if random-float 100 < fish-growth 
    [hatch 1 [rt random-float 360 fd 1]] 
end 

to move-boats 
    rt random 50 
    lt random 50 
    fd 1 
    set profit profit - 0.1 
end 

to catch-fish 
    let prey one-of fish-here 
    if prey != nobody 
    [ask prey [die] 
    set profit profit + profit-per-fish] 
end 

to death 
    if profit < 0 [die] 
end 

to reproduce-boats 
    if profit > 1 
    [ 
    set profit (profit/2) 
    hatch 1 [rt random-float 360 fd 1]] 
end 


to migrate 
    if random-float 100 < random-spawn-rate 
    [create-turtles 2 [rt random-float 360 fd 1]] 
end 

Antwort

2

Es gibt 3 verschiedene Primitive für die Schaffung neuer Schildkröten in NetLogo: create (Beobachter), hatch (Schildkröte) und sprout (Patch). Jeder funktioniert nur in einem bestimmten Kontext. Das bedeutet, dass Sie den Kontext kennen müssen, in dem Sie Ihre Prozedur aufrufen.

In Ihrem Beispiel rufen Sie die create-turtles Primitive innerhalb eines ask turtles (speziell) Kontextes. Das bedeutet, dass Sie sich in einem Turtle-Kontext und nicht in einem Beobachter-Kontext befinden und daher create-turtles nicht verwenden dürfen.

Ihr Problem zu lösen, müssen Sie nur noch create-turtles durch hatch ersetzen (oder hatch-<breed>, wie hatch-fish, wenn Sie neue Agenten in einer bestimmten Rasse, um laichen wollen).