使用 OptaPlanner 进行单一任务分配

Single Task Assignment with OptaPlanner

我有一个具有实时消息传递功能的客户服务应用程序。当客户开始新对话时,我想将此单个对话分配给最可用的客户服务代表(他们有最小的对话数量、最小的平均对话长度和最小的平均对话持续时间)。我也可以立即获取 c.s.representatives 的列表,并且属性会动态变化。所以每次我得到这个列表时,我都有不同的 c.s.representatives 和不同的属性。我想用 OptaPlanner 实现这个优化功能。如何编写我的 PlanningEntity、PlanningSolution 和 ConstraintProvider 类?

public class CustomerServiceRepresantative {
    private String id;
    private int numberOfConversations;
    private int avgConversationLength;
    private int avgConversationDuration;
    public CustomerServiceRepresantative () {}
}
public class ConversationTask {
    private int id;
    public ConversationTask() {}
}
  1. 使用 @PlanningPin 固定所有现有作业,因此只有一个新作业被取消固定。

  2. SolverConfig.withPhases(new ConstructionHeuristicPhaseConfig()) 配置为仅 运行 频道。给它无限的终止时间,它会在CH终止时终止。