You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AnyLogic中按距离筛选Pharma设施并选取最优设施的问题求助

基于距离筛选Pharma并选取服务质量最优设施的问题解决

问题背景

需要实现以下逻辑:从Pharma类设施集合中,通过findAll函数(接收集合和筛选条件两个参数)筛选出与指定Person距离在范围内的设施,再从中选取服务质量最优的项。当前代码中findAll的条件参数报错,提示方法不适用。

用户代码示例:

Pharma nearest = this.getNearestAgent(main.pharmas);
for (int i=0; i<main.people.size(); i++){
    Person p = main.people.get(i);
    if (p.getConnectionsNumber()>0){
        List <Pharma> x = findAll(main.pharmas, p.agentsInRange(100));//[Problem is here]
        Pharma y = top(x, s->s.serviceQuality);
        return y;
    }else{
        return nearest;
    }
}

问题原因

findAll的第二个参数需要的是判断单个Pharma是否符合条件的断言(Predicate),但你直接传入了p.agentsInRange(100)的返回值——这应该是一个Agent集合,类型不匹配,导致方法调用报错。

解决方案

方案1:修正findAll的条件参数

先获取Person范围内的Agent集合,再通过断言判断每个Pharma是否属于这个集合:

Pharma nearest = this.getNearestAgent(main.pharmas);
for (int i=0; i<main.people.size(); i++){
    Person p = main.people.get(i);
    if (p.getConnectionsNumber()>0){
        // 先拿到范围内的所有Agent集合
        Collection<Agent> inRangeAgents = p.agentsInRange(100);
        // 用断言判断Pharma是否在范围内集合中
        List<Pharma> x = findAll(main.pharmas, pharma -> inRangeAgents.contains(pharma));
        // 取服务质量最优的项
        Pharma y = top(x, s->s.serviceQuality);
        return y;
    }else{
        return nearest;
    }
}

如果你的Person类提供了直接判断单个对象是否在范围内的方法(比如isInRange(T agent, int distance)),可以更简洁:

List<Pharma> x = findAll(main.pharmas, pharma -> p.isInRange(pharma, 100));

方案2:用Java Stream API替代findAll

如果项目允许使用Stream,可以直接完成筛选+取最优的逻辑,代码更简洁:

Pharma nearest = this.getNearestAgent(main.pharmas);
for (int i=0; i<main.people.size(); i++){
    Person p = main.people.get(i);
    if (p.getConnectionsNumber()>0){
        Pharma y = main.pharmas.stream()
            // 筛选范围内的Pharma
            .filter(pharma -> p.agentsInRange(100).contains(pharma))
            // 按服务质量倒序取第一个(即最优)
            .max(Comparator.comparing(Pharma::getServiceQuality))
            // 如果筛选结果为空,返回最近的设施
            .orElse(nearest);
        return y;
    }else{
        return nearest;
    }
}

内容的提问来源于stack exchange,提问作者Morshed Dolon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 11:55:19