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

Jsprit结果获取:除VRPXMLWriter输出XML外如何存储变量?

关于Jsprit直接获取计算结果的方法

嘿,你完全没搞错方向——jsprit绝对提供了直接从计算结果里提取数据并存储到变量的API,根本不用绕XML解析这道麻烦的弯!

其实Jsprit的Solution对象就是所有计算结果的核心载体,你说的类似bestSolution.getAllVehicles()的功能,早就通过一系列API实现了,只是可能你一开始没留意到这些核心类的用法:

  • 获取所有车辆的配送路线:调用bestSolution.getRoutes()会返回一个Collection<Route>集合,每个Route对象对应一辆车的完整任务执行路径。
  • 获取单辆车的任务详情:从Route对象里,你可以用route.getVehicle()直接拿到对应的车辆实例,再通过route.getActivities()获取该车辆的所有任务活动(包括起点、取货、送货、终点等)。
  • 获取未分配的任务:如果有任务没被分配到任何车辆,bestSolution.getUnassignedJobs()会返回这些任务的集合。

举个实际的代码示例,帮你快速上手:

// 假设你已经通过算法求解得到了最优解Solution bestSolution
// 1. 获取所有车辆的路线集合
Collection<Route> allRoutes = bestSolution.getRoutes();

// 遍历每一条路线,提取车辆和任务信息
for (Route route : allRoutes) {
    Vehicle currentVehicle = route.getVehicle();
    System.out.println("当前车辆ID: " + currentVehicle.getId());
    
    // 获取该车辆的所有任务活动
    List<Activity> activities = route.getActivities();
    for (Activity activity : activities) {
        // 根据活动类型区分处理,比如取货/送货任务
        if (activity instanceof ShipmentActivity) {
            ShipmentActivity shipmentAct = (ShipmentActivity) activity;
            System.out.println("  关联任务ID: " + shipmentAct.getShipment().getId());
            System.out.println("  活动类型: " + shipmentAct.getType());
            System.out.println("  任务位置ID: " + shipmentAct.getLocation().getId());
        }
        // 还可以处理起点(Start)、终点(End)等基础活动
        else if (activity instanceof Start) {
            System.out.println("  出发地: " + ((Start) activity).getLocation().getId());
        }
    }
}

// 2. 检查是否有未分配的任务
Collection<Job> unassignedJobs = bestSolution.getUnassignedJobs();
if (!unassignedJobs.isEmpty()) {
    System.out.println("\n未被分配的任务ID列表:");
    for (Job job : unassignedJobs) {
        System.out.println("  " + job.getId());
    }
}

至于你疑惑为什么Jsprit不提供getAllVehicles()这类方法——其实getRoutes()已经间接实现了这个需求:你只需要遍历所有Route,就能拿到所有参与配送的车辆。而且这种设计更合理,因为它把车辆和对应的任务路线绑定在一起,方便你直接关联分析。

之前用XML解析混乱的问题,大概率是因为XML输出更多是用于可视化或者和其他系统交互的场景,并非获取结果的首选方式。直接操作Solution、Route这些核心类才是Jsprit推荐的用法~

内容的提问来源于stack exchange,提问作者Mattieu Kevin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:16:23