当前位置: 首页 > 知识库问答 >
问题:

就餐:如何根据特定条件设置特定的代理?

邹驰
2023-03-14

我以前使用Netlogo,有一些非常好的内置方法,允许我从总人口中筛选和控制所需的代理。(见:http://ccl.northwestern.edu/netlogo/docs/dictionary.html#agentsetgroup).例如,我可以很容易地用简单的代码在模拟中命令不同级别的人员代理,例如:

 ask peoples with [wealth_type = "rich"] [donate money...] 
 ask peoples with [wealth_type = "poor"] [get money from rich people...]

在Repast中,是否有专门为方便控制代理集而构建的方法列表?

共有1个答案

燕禄
2023-03-14

Repast SimphonyJava中的等效项是使用Query。Queries将谓词应用于Context中的每个代理,并在迭代器中返回那些评估为true的代理。Property tyEquals查询将代理的属性w/r评估为某个值(例如"wealth_type"和"rich")。请注意,这里的"properties"指的是Java属性,即getter类型方法:

String getWealthType() {
     return wealthType;
}

其中“wealthType”是财产的名称。

例如,在JZombies示例模型中,我们可以查询能量等于5的人类。

Query<Object> query = new PropertyEquals<Object>(context, "energy", 5);
for (Object o : query.query()) {
    Human h = (Human)o;
    System.out.println(h.getEnergy());
}

query()迭代器返回能量等于5的所有人类。

通过提供自己的谓词,可以在等价性测试中变得更加复杂。例如

PropertyEqualsPredicate<Integer, Integer> pep = (a, b) -> {
    return a * 2 == b;
};

Query<Object> query2 = new PropertyEquals<Object>(context, "energy", 8, pep);
for (Object o : query2.query()) {
    Human h = (Human)o;
    System.out.println(h.getEnergy());
}

这里,我们检查能量*2==8。谓词在第一个参数中传递代理的属性值,在第二个参数中传递要比较的值。假设谓词返回布尔值,还可以测试不等式、大于等。

Simphony有各种可用的查询。看,

https://repast.github.io/docs/api/repast_simphony/repast/simphony/query/package-summary.html https://repast.github.io/docs/RepastReference/RepastReference.html#_repast_model_design_fundamental_concepts

了解更多信息。

你也可以用Simphony的ReLogo方言这样做:

ask (turtles()){
    if (wealth_type == "rich") {
        donateMoney()
    }
    if (wealth_type == "poor") {
        getMoneyFromRichPeople()
    }
}

如果您只想收集您可以做的rich Turtle(其中“it”是访问使用findAll迭代的单个Turtle的默认方法):

richTurtles = turtles().findAll{
    it.wealth_type == "rich"
}

或者使用明确的闭包参数:

richTurtles = turtles().findAll{x->
    x.wealth_type == "rich"
}
 类似资料:
  • 关于如何只使用一个条件就获得所需的代理集,有一个答案:Repast:如何根据特定条件获得特定的代理集? 这样的事情如何在多种条件下工作?(例如问rich_people[财富

  • 问题内容: 我有一张地图,如下所示: 如您所见,将有一个名为split的最终常量,其值为40 我必须实现逻辑,例如,如果映射的值达到40,那么从计算开始的映射的第一个键以及恰好达到40的键也将被选择为min和max,如上所述。 。 除此之外,如果总和超过40,则需要格外小心。如果是,我们必须忽略它,并且在最小值和最大值相等的情况下,将先前的值本身作为最小值和最大值。 请建议我如何使用Java和。乡

  • 问题内容: 我有一个jtable。(表格摘要)。其中一列是EXPIRY。我想用当前日期已经过期的客户端突出显示该行。 我已经掌握了逻辑,但是我无法使行变成红色或任何其他颜色。这是我的代码: 谁能帮我这个?因为它是我界面的主要亮点之一。提前致谢 !!:) 问题答案: 在以下链接中,您可以找到要执行的操作的示例:http : //www.roseindia.net/java/example/java/

  • 我用AnyLogic创建了一个简单的模型(见截图)。现在我想添加一个条件,选择服务块中的两个资源集中的一个。例如,以下场景应适用:如果队列中有5个以上的部件,工作人员3和工作人员4应执行服务。如果有的话

  • 我试图做的事情在节点js中可能是不可能的,但在我放弃之前,我想得到其他意见。 我有一个线程正在执行产品的设置。为了便于论证,让我们将其称为“主”线程。我希望在产品设置过程中可能发生的所有错误都被“主”线程捕获。如果安装成功,那么在我知道安装成功之前,我不希望“主”线程完成。 产品设置过程中的一个步骤涉及在客户的AWS帐户中创建CloudFormation堆栈。实现这一点的AWS函数是createS

  • 我有一个pandas数据帧,其中3列X、Y和Z用于分组。我想基于代码中显示的条件为每个组更新列B(或将其存储在单独的列中)。但我得到的最后结果是零。我不确定我做错了什么。 下面是供参考的表格和代码: