Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 如何引入循环结构来比较表中相同键的不同值?_Loops_Netlogo - Fatal编程技术网

Loops 如何引入循环结构来比较表中相同键的不同值?

Loops 如何引入循环结构来比较表中相同键的不同值?,loops,netlogo,Loops,Netlogo,在我关于opinon exchange的模型中,我创建了一个表,用于存储模型中所有补丁集群的每个海龟的初始意见。该选项卡将集群id作为键,将意见作为值。结果如所愿 ask myself [ table:put dict_Opinion cluster-id opinion ] ask myself [show dict_Opinion] 在下一步中,我将两个随机的海龟相互连接起来 repeat (count turtles / 2)

在我关于opinon exchange的模型中,我创建了一个表,用于存储模型中所有补丁集群的每个海龟的初始意见。该选项卡将集群id作为键,将意见作为值。结果如所愿

     ask myself [ table:put dict_Opinion cluster-id opinion ]
     ask myself [show dict_Opinion]
在下一步中,我将两个随机的海龟相互连接起来

 repeat (count turtles / 2)                             
   [let resident turtles with [not any? link-neighbors] 
   let res1 one-of resident
   let res2 one-of other resident  

   ;;create link --> check that turtle1 is not turtle2
   if res1 != res2  
   [ask res1 [create-link-with res2 [ set color 55]

现在,他们应该计算对某个集群id的不同意见,并对照社会距离阈值进行检查。诸如此类

   ;; calculate social distance   
   let soc-dist ( (abs[ opinion ] of res1 - [ opinion ] of res2))
   ;; Check if social distance is below a certain social-distance threshold
   if (soc-dist < Social_Distance_Threshold)
;;计算社交距离
let soc dist((res1的绝对意见-(res2的绝对意见))
;; 检查社交距离是否低于某个社交距离阈值
if(soc距离<社会距离\u阈值)
我考虑的是引入一个循环结构,它计算意见的差异,并根据阈值进行检查。如果意见分歧低于阈值,则应运行以下公式

   [ask res1
   [set opinion (opinion + ( mu * ([opinion ] of res2 - opinion )))
    if ([opinion ] of res1 > 1) [ask res1 [set opinion 1] ]
    if ([opinion ] of res1 < 0) [ask res1 [set opinion 0] ]

   ask res2
  [set opinion (opinion + mu * (((([opinion ] of res1 - (mu *     opinion )) /   ( 1 - mu)) - opinion ))) 
   if ([opinion ] of res2 > 1) [ask res2 [set opinion 1]]
   if ([opinion ] of res2 < 0) [ask res2 [set opinion 0]]
[ask res1
[设定意见(意见+(mu*([意见]的res2-意见)))
如果(res1的[意见]大于1)[询问res1[设置意见1]]
如果res1的([意见]<0)[询问res1[设置意见0]]
询问res2
[设定意见(意见+mu*(([意见]的res1-(mu*意见))/(1-mu))-意见])
如果(res2的[意见]大于1)[询问res2[设置意见1]]
如果res2的([意见]<0)[询问res2[设置意见0]]
但是,经过一段时间的尝试和搜索,很难引入一个循环结构来实现海龟链接在一起后的后续步骤。我不明白如何将同一集群id的不同值与Netlogo中的循环进行比较

我非常乐意得到任何提示和建议。 多谢各位


Jan

我不太清楚在这种情况下你所说的“循环”是什么意思。看起来你只是要求res1和res2各自改变一次意见。如果soc dist,为什么这不是
?“现在,他们应该计算对某个集群id的不同意见,并对照社会距离阈值进行检查"抱歉,这让人困惑。实际上,链接海龟应该通过比较存储在同一个表中的所有意见来计算每个勾号的所有意见差异。在下一个勾号中,res1随机链接到另一个res2,相同的方法再次开始……我仍然不明白你所说的“很难引入循环结构”是什么意思这将在海龟链接到一起后执行后续步骤。是否有链接对请求res1和res2访问表没有影响。或者是您不知道如何获取完整的表对集进行比较的问题?确实,这是我的问题。链接工作正常,但我不了解如何进行com对整个表进行比较…因此res1和res2都是单独的,它们都有一个集群id,而集群id是意见值的关键。对吗?然后,对于res1和res2,您希望将其意见与所有集群id的所有意见进行比较。但您只在当前代码中引用这些节点。我认为你想要
table:keys
以列表的形式获取键,然后对列表中的每个项(即每个集群id)进行foreach操作,然后使用
table:get dict\u Opinion?
获取意见值。我不知道这是否可行。