Давайте начнем с того, что посмотрим, почему ваша первая попытка ничего не отображает:
ask cars with [breed = buyers ][plotxy attribute_1 ticks]
ask cars with [breed = sellers ] [plotxy attribute_2 ticks]
Когда вы объявляете породу в NetLogo, он создает специальный набор агентов, имя которого совпадает с именем породы. Если вы напишете:
breed [ buyers buyer ]
breed [ sellers seller ]
breed [ cars car ]
NetLogo создает три специальных набора агентов: buyers
, sellers
и cars
. Каждый из этих наборов агентов содержит только черепах соответствующей породы. Также существует специальный turtles
набор агентов, который содержит всех черепах в вашей модели, независимо от их породы.
Кроме того, у всех черепах есть переменная breed
, которая относится к набору агентов породы, к которой они принадлежат. Каждая черепаха может быть либо «не разводимой» и иметь turtles
в качестве значения своей breed
переменной, либо принадлежать к одной (но не более чем одной) породе и иметь набор агентов этой породы в качестве значения их переменной breed
.
Одна вещь, которую следует знать о переменной breed
, заключается в том, что обычно вам не нужно ее использовать. Написание:
ask turtles with [ breed = cars ] [ do-something ]
Имеет тот же эффект, что и письмо:
ask cars [ do-something ]
За исключением того, что версия ask cars
намного быстрее (и удобнее для чтения), чем версия ask turtles with ...
.
Теперь мы можем увидеть, что не так с ask cars with [breed = buyers ]
? Все автомобили по определению имеют cars
в качестве значения переменной breed
, поэтому условие breed = buyers
всегда будет ложным. Вот почему заявление ничего не делает. (И у него также нет причин выдавать вам сообщение об ошибке. Это все равно, что просить turtles with [ color = red ]
сделать что-то, когда нет красных черепах: ничего не происходит, но нет ничего плохого в том, чтобы спросить.)
Теперь давайте посмотрим на вашу вторую попытку:
ask cars [plotxy attribute_1 ticks]
ask cars [plotxy attribute_2 ticks]
Вы говорите, что «кажется, что он учитывает все породы», но, учитывая наше понимание того, как работают породы, вы должны быть в состоянии увидеть, что все, что с этим не так, этого не может быть. Насколько я могу судить, должно работать.
Я предполагаю, что вы где-то создавали дополнительные автомобили, не осознавая этого. А может это что-то другое. Мы не можем точно сказать с помощью предоставленной вами информации.
(Одно небольшое примечание: галочки обычно ставят на оси x
, но вы наносите их на ось y
.)
Наконец, ваша последняя попытка:
if breed = buyers [ask cars [plotxy attribute_1 ticks]]
if breed = sellers [ask cars [plotxy attribute_2 ticks]]
Мы видели, что breed
- это переменная черепахи, поэтому к ней можно получить доступ только в контексте конкретной черепахи, и именно поэтому вы получаете предупреждение о попытке использовать ее в контексте наблюдателя (т. Е. При попытке использовать это вне контекста черепахи).
В заключение я не могу предложить прямого решения вашей проблемы, но надеюсь, что понимание того, как работают породы, поможет вам понять, что не так.
Может быть, последнее, что нужно прояснить, - это сказать что-то вроде:
ask one-of sellers [ hatch-cars 1 ]
не создает никаких отношений между только что вылупившимся автомобилем и породой sellers
. Машина не знает, что ее вылупил продавец. И нет никакого способа запросить NetLogo «все автомобили, которые были выпущены продавцами», если вы не сохраните эту информацию где-нибудь в другой переменной. Но как это сделать - другой вопрос (при необходимости вы можете задать его на этом сайте).
person
Nicolas Payette
schedule
29.10.2019