Netlogo 创建一个新项目并将其添加到我的邻居';s列表
我想问一下如何将一只海龟创建的元素添加到它自己的列表和它邻居的列表中。 我创建了一个局部变量,Netlogo 创建一个新项目并将其添加到我的邻居';s列表,netlogo,Netlogo,我想问一下如何将一只海龟创建的元素添加到它自己的列表和它邻居的列表中。 我创建了一个局部变量,neights,定义为[breed=breed1]链接邻居中的海龟集。然后,我要求邻居添加创建的元素(new_elem),这是一位论坛用户提供的答案 代码是: to create_elements create-elements 1[ set person one-of turtles with [breed = breed1 or breed = breed2] ifelse [br
neights
,定义为[breed=breed1]链接邻居中的海龟集。然后,我要求邻居添加创建的元素(new_elem),这是一位论坛用户提供的答案
代码是:
to create_elements
create-elements 1[
set person one-of turtles with [breed = breed1 or breed = breed2]
ifelse [breed = breed1] of person
[
set attribute1 random-float 1
set attribute2 random-float 1
set function1 (1 + attribute1)
]
[
set attribute1 random-float 1
set attribute2 random-float 1
set function2 (1 - attribute1)
]
let neighbours (turtle-set self in-link-neighbors with [breed = breed1] of person)
ask neighbours
[set my-list fput new_elem my-list]
]
]
end
我知道,let neights(turtle set self in link neights with[bride=breed1]of person).
中有一个错误,但在将一个元素放入列表中时也有错误,因为我认为新元素是在bride元素中定义的。事实上,错误消息说
元素没有自己的变量“我的列表”
可以指定海龟的品种吗?我只需要考虑<代码> BRIED1和<代码> BRED2,而不是<代码>元素< /代码>品种。
例如,既然我认为person是元素的创建者,那么这样写对了吗
let neighbours (turtle-set person in-link-neighbors with [breed = breed1] of person)
ask neighbours
[set my-list fput new_elem my-list]
如果它是正确的,我如何将新元素作为“新元素”添加到列表中,并考虑其属性以供进一步考虑
例如:设置我的列表fput(list attribute1 attribute2)元素我的列表
)返回我的值列表,如(0.134531 0.14141)(0.91844 0.42176)
。。。有没有什么建议可以让你看得更好看,但信息相同?我需要在接下来的步骤中跟踪这些值
我希望你能解释一下我做错了什么
谢谢Val,这里有一些工作代码,可以创建新元素并更新每个人的“我的列表”
这可能不是你想要的,但我希望它能提供一些帮助。
你没有包括所有关于品种和谁拥有什么的信息,所以我赌了
我将更复杂的命令分解为多个较短的命令,以便调试正在发生的事情以及在哪里发生故障。我添加了一些打印语句
如果您加载此文件,运行安装程序并点击“go”一次,您可以看到网络中的代理与其“who”号码连接在一起,这样您就可以轻松地检查您要查看的代理
希望我的列表的值也会在命令部分打印出来
“go”步骤的另外两次迭代应该验证它们是否输出了您想要的内容
我不知道您是否希望new_elem只是create_elements部分的本地元素,当然如果您希望它在全球范围内可用,所以我在这两个地方都添加了注释
我希望这有帮助!代码本身中有更多注释。请特别注意,必须将我的列表初始化为空列表,否则它将默认为数字零,并且您的fput语句将失败,并出现一条关于期望列表和查找零的注释
globals [
;;new_elem ;; might be needed as a global ??
]
;; ///////////////////// note that there is no breed required called "people"
breed [ elements element]
breed [ breed1 lion ]
breed [ breed2 tiger ]
;; ///////////////////// i punted on which entity owned "function1 and function2
breed1-own [ attribute function1 function2 my-list]
breed2-own [ attribute function1 function2 my-list]
to setup
clear-all
;; make some turtles with breed = breed1 (say, red lions)
create-breed1 2 [ set size 2 set shape "circle" set color red
setxy random-xcor random-ycor
]
;; make some turtles with breed = breed2 (say, green tigers)
create-breed2 2 [ set size 2 set shape "circle" set color green
setxy random-xcor random-ycor
]
;; //////////////////////////////////////////////////////////////////////////
;; NOTE!!! If you don't initialize my-list to an empty LIST type,
;; fput will generate an error when you try to fput a new element onto it
;; this is ugly but fast:
ask breed1 [create-links-with other breed1
set my-list [] ]
ask breed1 [create-links-with breed2
set my-list [] ]
ask breed2 [create-links-with other breed2
set my-list [] ]
ask breed2 [create-links-with breed1
set my-list [] ]
ask turtles [set label who] ;; ///////////////////////// for debugging
;; set new_elem nobody ;; this could be a global so it can persist
;; outside create_element, in which case
;; initilize it here
reset-ticks
end
to go
create_elements
tick
end
to create_elements
;; declare the local variables, all agent-sets of some type
let new_elem nobody ;; declare this locally if we don't need to persist it
;; outside the create_elements context
;; and remove the declaration in [ globals ]
;; and initializtion in setup
let personx nobody
let xx-neighbors nobody
;; do just this creation here in order to see what's going on more easily
;; than combining multiple operations into a long complex command
create-elements 1 [ set new_elem self ]
type "new element is this agentset " show new_elem
set personx one-of turtles with [breed = breed1 or breed = breed2]
ifelse [breed = breed1] of personx
[ ;; if it is breed1
ask personx [
set attribute random-float 1
set function1 (1 + attribute)
]
]
[ ;; else, it must be breed2
ask personx [
set attribute random-float 1
set function2 (1 - attribute)
]
]
;;//////////////////////////////////////// for debugging
type "the personx we defined above is " print personx
ask personx [set xx-neighbors (turtle-set self in-link-neighbors )]
if-else xx-neighbors != nobody ;; If it has any members, which should
;; always be true since we added self to the set
[
ask xx-neighbors
[
set my-list fput new_elem my-list
;; ////////////////////////////////////for debugging
type "here's the resulting my-list: " show my-list
]
]
[ print "ERROR didn't find any neighbors or self" ]
end
谢谢你的帮助和回答韦德。如果可以的话,我会有一个问题,因为我不完全清楚什么时候应该使用全局变量和局部变量。在我的代码中,属性与所创建的元素相关联,但创建此元素的操作只应执行两种类型中的一种。那么,属性应该是breed1/2-own还是元素own?关于新的元素,我想在整个模拟过程中跟踪它,根据节点的距离对其进行更改,因此将其保存在列表中并根据要定义的一些标准拾取它是很重要的。它是全局的还是局部的?