2017-04-12 5 views
1

In meinem Modell habe ich zwei verschiedene Rassen wie folgt bekommen:Netlogo: Attribute von Rassen vergleichen?

breeds [sheeps sheep] 
breeds [wolves wolf] 

und jeder von ihnen hat eine bestimmte Größe, die, wenn sie „essen“ einen Patch ändert. Ich habe eine andere Funktion, die überprüft, ob ein Schaf in dem Flecken vor einem Wolf ist und dann macht der Wolf die Schafe zu essen. Jetzt sollten Wölfe nur noch Schafe fressen können, wenn Wölfe doppelt so groß sind wie Schafe. Ich habe versucht, zu folgenden:

to catch-sheep 
    ask wolves[ 
     if any? sheeps-on patch-ahead 1 [ 
     let prey sheeps-on patch-ahead 1 
     if [ size ] of wolves > [ size ] of prey) [ 
     ask [ prey [ die ]] 
     ] 
     ] 
end 

Aber dies offensichtlich nicht funktioniert und ich kann nicht eine Lösung, wie ich kann diese Größen einfach vergleichen finden. Ich habe auch versucht, Rassen-Größe Variablen zu definieren, aber ich hatte noch mehr Schwierigkeiten, dann ihre tatsächliche Größe zu definieren, die in der Handlung gesehen wird.

ich für jede Hilfe dankbar sein würde, und ich hoffe, dass diese

Antwort

3

Es gibt ein paar Probleme mit dem Code nicht ein Duplikat ist. Zuerst gibt [size] of wolves und [ size ] of prey eine Liste der Größen aus. Sie können also zwei Listen nicht mit einem Ungleichheitszeichen vergleichen.

Zweitens, [ size ] of wolves > [ size ] of prey, vergleichen Sie alle Wölfe gegen die Beute eines bestimmten Wolfs. Stattdessen müssen Sie myself für den fragenden Wolf verwenden, um 1 Größe zu erhalten. Frag stattdessen einfach die Beute, die kleiner ist als ich, um zu sterben.

Unten ist eine korrekte Lösung. Im Wesentlichen bitten Sie die Wölfe, zu bestimmen, wer ihre Beute ist. Wenn es Beute gibt, dann töte die Beute, deren Größe kleiner ist als die Größe des fragenden Wolfs (mich selbst).

to catch-sheep 
    ask wolves[ 
     let prey sheeps-on patch-ahead 1 
     ask prey with [size < [size] of myself] [die] 
    ] 
end 
+0

Wunderbar, vielen Dank. – Octopus

+1

Ich habe den Code etwas gekürzt. –