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

寻找关于改进AnyLogic中自定义函数的建议

柯景龙
2023-03-14

我正在使用路线距离估算大型城市网络的最后一英里交付成本。我有8000多名客户代理和100多名零售店代理,他们使用纬度/经度坐标绘制在GIS地图上。每个客户都会从最近的商店(通过路线)收到货物。目标是在该网络中为每个门店获取两个距离度量:

d0_bar:从商店到所有指定客户的平均距离
d1_bar:单个商店共有的所有客户之间的平均距离

我编写了一个启动函数,其中包含一个简单的foreach循环,可以根据按路线距离将每个客户分配到一个商店(客户有一个商店类型的参数“customer.pStore”)。此函数还将每个客户依次添加到商店代理的客户集合(“store.colCusts”;这是一个包含客户类型元素的数组列表)。

接下来,我有一个函数,它遍历store agent总体并计算上面的两个平均距离度量(d0\u bar

提前谢谢。

    //for each store, record all customers assigned to it
    for (Store store : stores) 
        {
        distancesStore.print(store.storeCode + "," + store.colCusts.size() + "," + store.colCusts.size()*(store.colCusts.size()-1)/2 + ",");
    
    //calculates average distance from store j to customer nodes that belong to store j
        double sumFirstDistByStore = 0.0;
        int h = 0;
        while (h < store.colCusts.size())
            {
            sumFirstDistByStore += store.distanceByRoute(store.colCusts.get(h));
            h++;
            }
        distancesStore.print((sumFirstDistByStore/store.colCusts.size())/1609.34 + ",");
            
    //calculates average of distances between all customer nodes belonging to store j
        double custDistSumPerStore = 0.0;
        int loopLimit = store.colCusts.size();
        int i = 0;
        while (i < loopLimit - 1)
            {
            int j = 1;
            while (j < loopLimit)
                {
                custDistSumPerStore += store.colCusts.get(i).distanceByRoute(store.colCusts.get(j));
                j++;
                }
            i++;
            }   
        distancesStore.print((custDistSumPerStore/(loopLimit*(loopLimit-1)/2))/1609.34);
        distancesStore.println();
        }

共有1个答案

韩志专
2023-03-14

首先是一些简单的评论:

  1. 您是否尝试过按路线对单个通话进行计时?E、 你能试着运行一下商店吗。distanceByRoute(store.colCusts.get(0)) 仅查看单个调用在系统上所用的时间。路线通常很慢,但最好知道速度限制是多少
    for (Store store : stores)
    { ...

使用此选项:

    stores.parallelStream().forEach(store -> {
    ...
    });

这将使用标准Java streams API并行处理存储条目。

请查看上面并发布结果。有了更多信息,可能会有更多的性能改进。

 类似资料:
  • 我正试图在GoogleSheets中创建一个自定义函数,用于搜索列范围中的特定值,如果该值为true,则返回true。我已经测试了该函数,在脚本编辑器中运行时效果很好,但是当我尝试在Google sheets中使用它时,它不起作用。 当我定义array参数时,函数运行良好,但当我尝试将googlesheets中的一个范围作为数组传递时,函数总是返回false。这是我第一次使用Javascript/

  • 我目前正在使用Head First Python,并开始定义函数。下面这个程序的目标是创建一个函数print_lol(),其中需要一个参数:一个显示在屏幕上的列表。工作的最终代码如下: 所以如果我们放入一个列表,比如: 将只输出此数组中的所有条目。 我的问题是,为什么第四行的print_lol(each_item)行得通?我知道逻辑是程序会查看每一项,如果它不在列表中,它会打印该项,但是如果在列表

  • 嗨,我一直试图使一个自定义损失函数在kerasdice_error_coefficient。它有它的实现在张量板和我尝试使用相同的函数在keras与张量流但它不断返回一个NoneType当我使用model.train_on_batch或model.fit在那里,因为它给适当的值时,使用在模型中的指标...能不能请人帮帮我我该怎么办?我尝试过跟随像Keras-FCN这样的库,在那里他使用了自定义损失

  • SOFARPC 中对服务地址的选择也抽象为了一条处理链,由每一个 Router 进行处理。同 Filter 一样, SOFARPC 对 Router 提供了同样的扩展能力。 @Extension(value = "customerRouter") @AutoActive(consumerSide = true) public class CustomerRouter extends Router

  • 我做了这个自定义函数,并把它放在全局之外,这通常会工作。我也试着在主异步木偶函数中移动它,但也不起作用。这是一个简单的函数。在每个page evaluate函数中,我调用它并传递选择器。但是,它的说法没有定义和promise拒绝,这是奇怪的,因为函数不是promise....请帮助 我尝试将函数转换为异步函数,添加了一个新的参数页。然后,我将async添加到我的评估函数中,然后将puppeteer

  • 问题内容: 我正在处理大量旧数据(从平面文件db转换),其中字段的格式设置为输入记录的年份的最后2位,然后是4位的增量… 例如,1998年创建的第三条记录将为“ 980003”,而2004年创建的第十一条记录将为“ 040011”。 我无法更改这些值- 它们通过他们的公司存在,已经在州,客户等中注册。我知道将年份和其余年份分隔到单独的列中会很好,但这是不可能的。我什至不能真正做到“内部”,因为每一