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

如何根据交货地点和库存水平对代理进行批处理

丁雅逸
2023-03-14

为了理解我的问题,让我首先介绍一下我的模型。当大约50名订单代理同时进入“enter”块(见图)时,流程开始。之后,延迟块将命令延迟1秒,以将它们分开。然后,使用等待块创建批量大小,使其小于所选车辆的最大容量。这是通过对参数“amount”(保存在order agent中)求和来完成的,直到达到最大容量20(请参阅代码)。订单保存在名为“collection”的集合中,集合的大小用作下一个块中的批大小。

问题是,当查看订单的交货地点时,订单有时是不合逻辑的批处理。例如,车辆1和车辆2都去了地点A和B,而如果车辆1去了地点A,车辆2去了地点B,效率会更高。有没有办法让批处理将交货地点考虑在内,使它们彼此靠近?交货地点作为客户(GIS地图上的位置)类型的参数“Deliveryloc”存储在订单代理中。

 inventory=agent.amount+inventory;
 collection.add(agent);

 if(inventory>=20){
      batch.set_batchSize(collection.size());
      wait.freeAll();

 collection.clear();
 inventory=0;
 }

共有1个答案

越雨泽
2023-03-14

这个问题与这个问题非常相似https://stackoverflow.com/a/68917002/4019094,请在那里查看它以获取替代的实现方式。

下面的示例建立在订单进入等待块时执行所有编码的现有逻辑基础上

为了根据订单的位置发布订单,您需要将集合更改为以位置为键的地图。

对于本例,我创建了一个选项列表Location,每个订单代理都有一个Location类型的参数。因此,当他们进入等待时,我可以简单地将他们添加到等待相同位置的订单列表中,如果他们满足批处理标准,就可以释放他们

if (!collection.containsKey(agent.location)) collection.put(agent.location, new ArrayList<Order>());
collection.get(agent.location).add(agent);

if (collection.get(agent.location).size() > batchSize) {
    for (Order order:collection.get(agent.location)) {
        wait.free(order);
    }
}


当它们离开等待块时,请记住将其从集合中删除。

 类似资料:
  • 我正在使用Spring Batch和JPA处理一个批处理作业并执行更新。我正在使用默认的存储库实现。 并且我正在使用一个repository.save将修改后的对象保存在处理器中。而且,我没有在处理器或编写器中指定任何@Transactional注释。 下面是我的步骤,读取器和写入器配置:另外,我的config类是用EnableBatchProcessing注释的 在writer中,这就是我使用的

  • 我有写入数据库的Spring Batch作业(它有一个带有的步骤)。我有一个联调,如下所示: 在测试中运行作业时,它会提交到数据库。如何防止提交到数据库?通常,我可以添加以在每次测试后回滚事务。但是,当我将注释添加到测试类时,我收到: 使现代化 我试图将添加到测试类中。但是,仍然提交。 以下是应用程序代码中事务管理器的配置:

  • 我使用Spring批处理从Oracle数据库读取数据并将结果写入CSV文件。 我还需要将spring批处理元数据表与oracle数据库分开,为此,我在批处理配置中配置了两个不同的数据源(spring批处理元数据的内存数据库)。 这是我的代码: 批处理配置。JAVA 然后我的itemReader bean看起来像: 当我运行批处理时,一切正常。 但是当我尝试在我的BatchApplication中添

  • 我正在获取一个订单列表,并将对象存储在列表中。该对象有一个名为的属性,时间为格式。我想按对象的deliveryTime升序对列表进行排序。我创建了一个只有deliveryTime的字符串列表,并使用气泡排序按升序对它们进行排序。但是我很难按照这个顺序对整个对象列表进行排序。 注意:对象列表有一些&作为它们的值。 以下是不完整的代码:

  • 我正试图弄清楚如何使用Spring Batch进行聚合。例如,我有一个带有姓名列表的CSV文件: 我想要文本文件中的姓名计数: 根据我从Spring Batch中学到的,ETL批处理过程(itemReader- Spring Batch是正确的工具吗?还是我应该用Spark?谢谢

  • 问题内容: Stream >> sorted = index.entrySet().stream() .sorted(Map.Entry.comparingByValue()); 类型中的方法不适用于参数 我想根据作为的值的列表对a进行排序。如何使用Java 8中的Stream库实现此目的? 问题答案: 这可能对您有帮助。 我将结果映射的类型更改为 LinkedHashMap 以遵守插入顺序。