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

Repast:如何计算满足特定条件的代理总数

丰誉
2023-03-14

每个代理都有一个私有布尔变量“Happy?”。如何用[Happy?=True]计算特工人数?

就餐时有没有直接的方法?或者我遍历了所有的代理,然后逐个计算?

更新:

我尝试过全局调度方法:https://repast.github.io/docs/RepastReference/RepastReference.html#schedule-全球的

当我使用ContextBuilder中的@schduled方法在代码下方放置时,它不起作用。

grid.moveTo(this_girl, group_x,group_y);
            }
        }       
        return context;
    }

    @ScheduledMethod(start = 1, interval = 1, shuffle=true)
    public void step () {
        Context<Object> context = ContextUtils.getContext(this);
        Query<Object> query = new PropertyEquals<Object>(context, "happy", true);
        int end_count = 0;
        System.out.println(end_count);
        for (Object o : query.query()) {
           if (o instanceof Boy) {
               end_count ++;               
           }
           if (o instanceof Girl) {
               end_count ++;               
           }
        }
        System.out.println(end_count);
        if (end_count == 70) {
            RunEnvironment.getInstance().endRun();
        }
    }
}

如果我在男孩特工或女孩特工的行动中置于代码之上,它就会起作用。

@ScheduledMethod(start = 1, interval = 1,shuffle=true)
    public void step() {
        relocation();
        update_happiness();
        endRun();

    }

    public void endRun( ) {
        Context<Object> context = ContextUtils.getContext(this);
        Query<Object> query = new PropertyEquals<Object>(context, "happy", true);
        int end_count = 0;
        System.out.println(end_count);
        for (Object o : query.query()) {
           if (o instanceof Boy) {
               end_count ++;               
           }
           if (o instanceof Girl) {
               end_count ++;               
           }
        }
        System.out.println(end_count);
        if (end_count == 70) {
            RunEnvironment.getInstance().endRun();
        }
    }

共有1个答案

终翰学
2023-03-14

您可以对此使用查询--请参阅此问题的查询答案:

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

您还可以在一个上下文中使用query方法,在该上下文中,您向它传递一个谓词,如果满足,谓词将返回true。

在这两种情况下,您都需要私有布尔快乐字段的访问器方法——例如。

public boolean isHappy() {
   return happy;
}

同样,在这两种情况下,查询都会返回一个iterable,覆盖所有代理,其中happy为true,而不是一个集合,在该集合中,您可以获取大小以获得计数。所以,你必须遍历它并增加一个计数器。

更新:

你现在的问题是日程安排。你不能轻易地在ConetextBuilder上安排一个方法,因为它不是模型的一部分,而是用来初始化它的。安排所需内容的最简单方法是在ContextBuilder中明确安排它,如下所示:

RunEnvironment.getInstance().getCurrentSchedule().schedule(ScheduleParameters.createRepeating(1, 1, ScheduleParameters.LAST_PRIORITY), () -> {
            Query<Object> query = new PropertyEquals<Object>(context, "happy", true);
            int end_count = 0;
            System.out.println(end_count);
            for (Object o : query.query()) {
                if (o instanceof Boy) {
                    end_count++;
                }
                if (o instanceof Girl) {
                    end_count++;
                }
            }
            System.out.println(end_count);
            if (end_count == 70) {
                RunEnvironment.getInstance().endRun();
            }
    });

LAST_PRIORITY应该确保在幸福计数被调查之前,所有的代理行为都会发生。

 类似资料:
  • 问题内容: 这是我的代码: 过滤: 我需要根据循环中已过滤项目的数量显示/隐藏重复的s。最好的方法是什么? 谢谢 问题答案: 表达式允许将过滤后的结果分配给变量。从当前作用域可以访问此变量,因此您可以随时在同一作用域中使用它:

  • 本文向大家介绍计算满足C ++中给定条件的索引对,包括了计算满足C ++中给定条件的索引对的使用技巧和注意事项,需要的朋友参考一下 我们给了前N个自然数的排列数组。这里的目标是找到满足以下条件的元素的索引对- 如果数组是Arr [],则i,j是索引,对元素对进行计数,使Arr [i] + Arr [j] = max(Arr [x])使得i <= x <= j。 即,Arr [i]和A [j]之和等

  • 问题内容: 我有一个具有以下结构的MySQL表: drinks_log(id,users_id,brinkles_id,时间戳) 我正在尝试计算用户(ID为1)每天至少记录5次饮料(ID为1)的连续几天的最大连胜纪录。我很确定可以使用以下视图来完成此操作: 但是,每次运行此检查时都为不同的用户重复创建视图似乎效率很低。MySQL中是否有一种方法可以在单个查询中执行此计算,而无需创建视图或多次重复调

  • 问题内容: 我想从这些数据结构中按值删除满足某些条件的元素 从上一个问题中,我找到了使用的简洁答案,但是似乎需要精确匹配。 在这里,我想从表或映射中删除其值小于特定阈值的元素。您编写代码的方式是什么? 我只检查了两个答案,这些是关于map的答案,表情况如何?我的解决方案如下。 问题答案: Iterator iterator = hmap.values().iterator(); while (it

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

  • 我有一个这样的数据框 我想把这些数据子集,得到美国、中国和印度这些年的国内生产总值。另一个问题是,假设我每年有200个国家的国内生产总值数据,而我只对50个国家感兴趣。如何子集数据?非常感谢!