正在获取要求输入为代理或代理集的预期输入(&Q;),但获得了列表[绿色玩家在网络中出错(&Q&Q;) [英] getting "ASK expected input to be an agent or agentset but got the list [green-players" error in netlogo

查看:15
本文介绍了正在获取要求输入为代理或代理集的预期输入(&Q;),但获得了列表[绿色玩家在网络中出错(&Q&Q;)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我操纵的一个双人游戏的代码

o play-the-game
  if (any-friends-nearby?) [gain-energy]
  if (any-opponents-nearby?) [fight-opponent]
end

to-report any-friends-nearby?
  report (any? (turtles-on neighbors4) with [breed = [breed] of myself])
end

to-report any-opponents-nearby?
  report (any? (turtles-on neighbors4) with [breed != [breed] of myself])
end


to gain-energy
  set similar-nearby count ( turtles-on neighbors4 )
 with
  [color = [color] of myself]
  set total-nearby count (turtles-on neighbors)
  ;
  ;
  if (similar-nearby >= total-nearby - similar-nearby)
  [set energy energy + 5]
end

to fight-opponent
  let my-breed [breed] of green-players
  let my-color [color] of green-players
  let opponent-breed [breed] of red-players
  ;
  ;;
  ask my-breed
  [check-random-winner]

end

to check-random-winner
  let pick random-float 2
  let winner nobody
  ask turtles
  [if winner = nobody
    [ ifelse size > pick
      [set winner self ]
      [set pick pick - size] ] ]
end

to change-opponent
  ask red-players
  [ set breed green-players
      set color green ]
end

抱歉,如果它有点长,但当我设置并按GO时,询问期望的输入是一个代理或代理集,但得到了列表[Green-Players...]

我如何修复此问题? 另外,我对Netlogo和StackOverflow还很陌生,如果我没有问好我的问题,很抱歉。

推荐答案

错误消息告诉您,当涉及ask my-breed时,您正在向ask传递列表(更具体地说,是品种列表)。

这是因为my-breed局部变量由

确定
let my-breed [breed] of green-players

让我们看看我们有什么:

  1. breedis a turtles-own variable:它保存海龟的品种,作为代理变量可以用作of构造中的报告变量(见下文)。

  2. ofis a reporter:它的左边有一个报告器(通常是代理的变量)(在您的例子中:breed),在右边有一个代理或代理集(在您的例子中:green-players)。of报告的内容(即它输出的内容)是...

    • .如果右侧有代理,则为单一值。
    • .如果右侧有代理集,则为值列表*。

    *想一想:如果我问你眼睛的颜色(你是一个人,即一个人),你会告诉我一个颜色。但如果我问你朋友的眼睛的颜色(你的朋友是一群人,也就是一个代理商),你回答我的问题的唯一方法就是告诉我一张颜色清单。

  3. green-playersis an agentset:所有类型为green-players的代理(请注意,对于NetLogogreen-players是一个代理集,即使它包含1个或0个代理)。

从这里我们可以看到,在本例中of报告了品种列表,因为它报告了green-players中每个代理的品种,因此它将报告列表[green-players green-players green-players green-players ... ],该列表与模型中的green-players的数量一样长。您可以通过单击setup,然后在命令中心运行[breed] of green-players来验证这一点。

这是不是代理或代理集(这是ask的唯一可能目标)的品种列表(也可以视为代理集列表)。

((请注意,let my-color [color] of green-playerslet opponent-breed [breed] of red-players会发生完全相同的事情))

那么,如何基于变量构造代理集呢?最常见的方法是使用with(read here why)。

但是如何修复您的代码?我不知道,因为我不明白你想要达到什么目的。

我不确定您希望如何在您发布的代码中使用它,因为我甚至不确定您是否需要在fight-opponent中使用ask(更不用说ask代理集了)。 您的fight-opponent过程是这样的,除了我们刚才讨论的问题之外,";my-";内容(即my-breedmy-color)总是指绿色玩家,而opponent-breed总是指红色玩家--即使fight-opponent是由红色玩家运行的!而且,还不清楚你想要用check-random-winner程序达到什么目的,也不清楚你是否希望这个程序由整个品种来运行。这些情况使您很难理解如何修复fight-opponent过程。

例如:您想让谁运行check-random-winner命令?

两件事的结合将是有益的:一次一个步骤地开发您的模型,并确保每一小段新的代码完全按照您的期望来做;另外,当您要求如何修复某件事时,解释您希望代码做什么是很有用的。通过做这两件事,我相信回答你的问题会容易得多

这篇关于正在获取要求输入为代理或代理集的预期输入(&Q;),但获得了列表[绿色玩家在网络中出错(&Q&Q;)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆