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

如何在Timefold中使用Recommended Fit API将ArrayList作为fittedEntityOrElement?

问题根源

你把ArrayList对象直接传给了recommendFit的第二个参数,Timefold误将其当作**计划实体(Planning Entity)**处理。由于ArrayList是JDK内置类,无法添加@PlanningId注解,而Timefold需要通过该注解唯一标识实体以支持多线程求解等功能,因此触发了"无法查找externalObject"的错误。

正确解决方案

1. 配置正确的计划实体类

你的订单实体类(比如Order)必须标注@PlanningEntity,且包含一个标注@PlanningId的唯一标识字段:

@PlanningEntity
public class Order {
    @PlanningId // 必须添加,用于唯一标识实体
    private Long orderId;
    
    // 其他规划相关字段示例
    @PlanningVariable(valueRangeProviderRefs = {"timeSlotRange"})
    private TimeSlot assignedTimeSlot;
    // ...
}

2. 修正recommendFit调用代码

第二个参数直接传订单实体集合(orders本身,因为List实现了Iterable),同时调整第三个映射函数的参数为单个实体对象:

// orders 为 List<Order> 类型
return solutionManager.recommendFit(planningModel,
        orders, // 传递订单实体集合,而非ArrayList对象本身
        order -> order); // 映射函数接收单个Order对象,返回需要适配的元素(此处直接返回实体)

不推荐的替代方案

错误提示中提到修改@PlanningSolution的LookUpStrategyType虽能绕过错误,但不建议使用:

  • 若将查找策略改为LOOKUP_STRATEGY_NONE或LOOKUP_STRATEGY_REFERENCE,会失去@PlanningId提供的实体唯一标识能力,导致多线程求解、分布式部署等场景出现异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 01:34:55