ОК, поэтому вы спросили
(1), как я могу сохранить этот объект в «памяти» / в списке с его атрибутом? Мне нужно было бы сохранить в памяти, так как черепахи (breed1) могут обмениваться / распространять объект / вирус во времени, но потенциально этот объект может изменить значение своего атрибута.
Как только вы их создадите, объектыбудет сохраняться, пока вы не убьете их. Это означает, что атрибут, которым владеет каждый объект, также будет сохраняться без каких-либо усилий с вашей стороны.
Глядя на свой код, вы можете отслеживать, какой объект выбран, установив глобальную переменную "new_object" в качестве who номер выбранного вами объекта. .
У объекта с заданным номером who его атрибут может быть изменен кем угодно в любое время, и все другие агенты смогут увидеть это новое значение.
Вы также спросите:
(2) было бы лучше добавить в список объект и / или его атрибут?
Я бы ответил, не ставьте ни объект, ни атрибутобъект в моем списке. Поместите номер who в список my-list. Из номера who вы можете найти объект с тем номером who и из объекта вы можете найти атрибут.
ОК, так что еслиВы делаете это, вы можете отсортировать список по атрибуту? Да, вы можете сделать это с помощью некоторого умного кода. Ключевая строка - это та, которая сортирует список по атрибутам объектов, чьи номера есть в списке my-list.
let temp2-list sort-on [ attribute ] objects with [ member? who [my-list] of myself ]
Я думаю, что ответ на ваш третий вопрос должен быть ясным сейчас.
если я хотел изменить его значение, после выбора, как я могу это сделать?
Вот рабочий код, который должен помочь объяснить этот ответ. Программа установки генерирует один агент и 6 объектов и составляет случайный my-list и соответствующий список атрибутов. Go генерирует отсортированные списки объектов и атрибутов. Объект в списке с наивысшим атрибутом идентифицирован.
Обратите внимание, что объект-собственный [атрибут]. Вы не упоминали об этом.
Пример кода сильно документирован в строке.
globals [
chosen_object_who
acting_breed1_who
]
breed[breed1 breed_1]
breed[objects object]
objects-own
[ attribute ]
breed1-own [
my-list ;; list of who numbers of objects, initialize to [] or it may fail
attr-list ;; list of attributes of the my-list objects, in the same order
attribute-of-chosen-object
who-of-chosen-object
my-list? ;; unknown
]
to setup
clear-all
print "creating 5 objects"
create-objects 5 [ set attribute random 100
print (word "created object " who " with attribute " attribute )
]
create-breed1 1 [
set my-list []
set attr-list []
set my-list? false
set attribute-of-chosen-object -1
set who-of-chosen-object -1
]
ask one-of breed1 [
set acting_breed1_who who
;; add six random object to my-list then remove duplicates
repeat 6 [
set my-list fput [who] of one-of objects my-list
]
set my-list remove-duplicates my-list
;; create the list of corresponding attributes
set attr-list map [i -> [attribute] of object i ] my-list
print (word "at end of setup, here's the my-list: " my-list )
print (word "here's the corresponding attr-list : " attr-list )
print ""
]
reset-ticks
end
to go
ask one-of breed1 [ ;; there is only one for this example
;; here's the magic command line
let temp2-list sort-on [ attribute ] objects with [ member? who [my-list] of myself ]
;; print (word "temp2-list: " temp2-list)
;; yields a list like [(object 3) (object 1) (object 4) (object 2) (object 0)]
;; it looks like an agent set but it's actually a list of objects in my-list,
;; but sorted into order by ascending attributes.
;; generate the new my-list, in the new order
set my-list map [i -> [who] of i ] temp2-list
set attr-list map [i -> [attribute] of i ] temp2-list
print "=========== after sort ====================="
print (word "sorted my-list now is " my-list)
print (word "matching attr-list is " attr-list )
print ""
;; You can select the best choice as the last item in the list, giving you the
;; who number of the object which has the highest attribute value
let best-choice 999
if-else length my-list > 0
[ set best-choice last my-list ]
[ error " my-list is empty! "]
;; saved as a global
set chosen_object_who best-choice
;; also save variables in the breed1 we are looking at now
set attribute-of-chosen-object last attr-list
set who-of-chosen-object last my-list
print (word "Assuming we want the object with the highest attribute")
print ""
print (word " The best choice object-who is " best-choice )
print (word " the attribute of that choice is " last attr-list )
print " "
print " all set to do something with the chosen object "
print " the choice is known both locally and globally "
inspect self
]
tick
end