【问题标题】:netlogo mutually exclusive agentsets simultaneouslynetlogo 同时互斥代理集
【发布时间】:2016-02-01 22:51:26
【问题描述】:

我有 300 名工人,想根据两个排名将他们分成 3 组,每组 100 人(目前,最终我可能会不均等地划分他们)。我编写了变体来完成以下任务:

选择 X 上的前 100 个,将值 1 分配给变量 A。选择 Y 上的 100(尚未在 A 上分配值 1)并将值 2 分配给变量 A。选择余数并将值 3 分配给一个

我已经尝试了大约十几种方法,但都没有成功。我最接近的是获得前 100 个。但是,由于存在平局,有一些工人在 X 上的第 100 位并列。Netlogo 随机选择一个在变量 A 上接收值 1,这很好。问题是,因为我无法弄清楚如何使用 2 个标准同时构建三个互斥代理集,我最终将 A 上的工人从值 1 重新分配到值 2。我现在可以手动修复它,但最终这是不可能的。

这是进行第一次赋值的代码:

询问 max-n-of 100 个工人 [LPAdv] [设置 AWeight 1]

问题似乎是我无法找到一种方法来引用剩余 200 中 Y 上的前 100 名。我也无法引用剩余 200 名中的后 100 名,因为工人可能处于顶部在 X 上为 100,但不在 Y 上的前 100 中,在这种情况下,除非我将它们从操作中删除,否则它们将(错误地)落入顺序识别的代理集中。我试过使用会员?以及其他可能性。基本上,我不知道如何同时转储 300 个中的前 100 个,并且只“排序”剩余的 200 个以进行分配。

我已经查看了多个来源以获得答案,但到目前为止无济于事。自周六以来,我的代码取得了很大进展,但这是一个绊脚石。

非常感谢任何帮助!

谢谢! 偷偷摸摸

【问题讨论】:

    标签: netlogo agentset


    【解决方案1】:

    已解决! (耶!)

    如果其他人有问题,我所做的如下:

    ask max-n-of 100 workers [LPAdv] [set AWeight 1]
    ask workers [ifelse AWeight = 1 [set LPMid2 -1000] [set LPMid2 LPMid]]
    ask max-n-of 100 workers [LPMid2] [set MWeight 1]
    ask workers [set PreWeight ( AWeight + MWeight )]
    ask workers [if PreWeight = 0 [set RWeight 1]]
    

    注意 LPMid2 将 AWeight=1 设置为 -1000,这超出了我稍后需要的实际 LPMid 变量的范围。

    很抱歉打扰列表;我希望这个答案对其有类似问题的其他人有用。

    【讨论】:

      【解决方案2】:

      这里有一些代码可能更易于阅读且可扩展的版本(未经测试),希望能为您提供一些关于如何在尝试从子集中进行选择时排除某些海龟的想法。

      ask max-n-of 100 workers [LPAdv] [set AWeight 1]
      ask max-n-of 100 workers with [AWeight != 1] [LPMid2] [set MWeight 2]
      

      此外,您不需要在 and 处使用两个询问语句(并且询问两次效率较低):

      ask workers
      [ set PreWeight ( AWeight + MWeight )
        if PreWeight = 0 [set RWeight 1]
      ]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-04
        • 2020-08-15
        • 1970-01-01
        相关资源
        最近更新 更多