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

[Anylogic]:我如何选择第二个最近的仓库?

全昊焜
2023-03-14

我正在使用AnyLogic开发人道主义物流供应链。此模型需要将卡车从陆军驻地发送到仓库,从仓库中挑选物品以支持受地震影响的人们并前往震中丢弃它们。此模型必须为每辆卡车选择最近的仓库,其中有物品可用。例如,如果最近的仓库没有可用,卡车必须选择第二个最近的可用仓库,并在其中挑选物品并前往震中。
我意识到这个状态图,其中我定义了一个算法,必须选择最近的仓库,其中有物品可用,如下所示:

List <Magazzini> subsetlist = findAll(main.magazzinis, w->w.availabilty>0); 

// I select just warehouses with availablity

List <Magazzini> sortmag = new ArrayList<>();

sortmag = subsetlist;

for (Warehouses m : subsetlist)
    {
        
        distance.add(distanceTo(m));
        
        sortmag = sortAscending(sortmag, p-> p.distanceTo(m));  //anylogic function which sort agent according a condition (distances
                                    // from lorry in that case)
                
    }   
    
    moveTo(sortmag.get(0)); //move towards the first one warehouse of the sorting made in the for cycle
    System.out.println(sortmag); // just to print the result
    sortmag = new ArrayList<>();

无论如何,这种算法并不适用于所有在状态图上读取它的卡车(在名为“at_warehouse”的州),但只适用于第一辆。随后,所有卡车都“读取”了第一辆卡车的相同结果。

我该如何解决它?请回答,如果你知道AnyLogic软件,不要关闭这篇文章。有关任何进一步的信息,请回答,我会给你的。我需要为我的论文工作解决这个问题。非常感谢。

PS:我还上传了一张照片,你可以看到卡车从萨勒诺出发,去巴里,而不是去那不勒斯,那里有一个可用的仓库。在这里输入图像描述

共有1个答案

孙凌
2023-03-14

也许您可以首先在循环中设置距离值,然后对Arraylist排序,在这种情况下,您还必须在Magazzini中创建一个名为distance的属性,如下所示

for(Magazzini m: subsetList){
    m.distance = distanceTo(m);
}
sortmag = sortAscending(subsetList, p-> p.distance);

希望这有帮助

 类似资料:
  • 问题内容: 您好,我有一个带有列的表: *使用oracle 我想知道如何获取给定用户的最新添加的文档。 谢谢 问题答案:

  • 问题内容: 如何选择连续的第一个和最后一个? 问题答案: 您可以使用和伪选择器: 这应该在所有主流浏览器上都可以使用,但是当动态添加元素时IE7会出现一些问题(在IE6中将无法使用)。

  • 问题内容: 我有: 现在,如果我已经有了h2标签,最简单的方法就是将Peter带到这里?现在我尝试了: 但是在这里我得到nth-child NotImplementedError: 所以我不确定这是怎么回事。第二种选择是只获取所有’p’标签子代并进行硬选择[1],但是存在索引超出范围的危险,这将需要用try /包围所有尝试让 Peter 尝试,除非这有点愚蠢。 有什么方法可以用汤.select()

  • 问题内容: 我试图选择一个表中的最后6个月的条目,我有一列称为datetime,这是一种datetime mysql格式。 我已经看到许多使用间隔和其他方法的方法-应该使用哪种方法?谢谢 问题答案: 使用DATE_SUB

  • 问题内容: 我有一个mysql问题。 我的网站上有一个新闻版块,我想显示两个最新项目。如果我做: 它选择了最新的项目,现在我要选择倒数第二个项目。 你们知道怎么做吗? /// 编辑 现在它不起作用了,这是我的代码:(我已经包含了;)) 问题答案: -选择最后2个项目 -仅选择第二项