修改订单分配车辆策略

This commit is contained in:
xuzhiheng
2025-06-26 17:14:20 +08:00
parent 64adb38fed
commit d60d6081ac
3 changed files with 40 additions and 33 deletions

View File

@@ -133,12 +133,12 @@ public class OrderAssigner {
);
AssignmentState assignmentState = new AssignmentState();
if (availableVehicles.size() < availableOrders.size()) {
if (availableVehicles.size() < availableOrders.size()) { //车数量 < 订单数
availableVehicles.stream()
.sorted(vehicleComparator)
.forEach(vehicle -> tryAssignOrder(vehicle, availableOrders, assignmentState));
}
else {
else { //车数量 >= 订单数
availableOrders.stream()
.sorted(orderComparator)
.forEach(order -> tryAssignVehicle(order, availableVehicles, assignmentState));
@@ -227,13 +227,25 @@ public class OrderAssigner {
)
.collect(Collectors.partitioningBy(filterResult -> !filterResult.isFiltered()));
// // 调试输出:分组统计结果
// System.out.println("Candidate groups: Passed=" + ordersSplitByFilter.get(Boolean.TRUE).size() + ", Filtered=" + ordersSplitByFilter.get(Boolean.FALSE).size());
//
// // 调试输出:显示所有通过过滤的候选(排序前)
// List<AssignmentCandidate> passedCandidates = ordersSplitByFilter.get(Boolean.TRUE).stream()
// .map(CandidateFilterResult::getCandidate)
// .collect(Collectors.toList());
//
// passedCandidates.forEach(c -> System.out.println("passedCandidates - order: " + c.getTransportOrder() + ",vehicle:" + c.getVehicle() + ",Costs: " + c.getCompleteRoutingCosts()));
ordersSplitByFilter.get(Boolean.FALSE).stream()
.map(CandidateFilterResult::toFilterResult)
.forEach(filterResult -> assignmentState.addFilteredOrder(filterResult));
ordersSplitByFilter.get(Boolean.TRUE).stream()
.map(CandidateFilterResult::getCandidate)
.sorted(vehicleCandidateComparator)
// .sorted(vehicleCandidateComparator) 框架原本排序有问题,修改为按照路由成本排序
.sorted(Comparator.comparingLong(AssignmentCandidate::getCompleteRoutingCosts))
.findFirst()
.ifPresent(candidate -> assignOrder(candidate, assignmentState));
}