Давайте начнем с того, что ваша первая попытка ничего не отображает:
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 для «всех автомобилей, которые были заштрихованы продавцами», если вы не сохраните эту информацию в другой переменной где-нибудь. Но как это сделать - другой вопрос (который вы можете задать на этом сайте, если это необходимо).