我try 使用TimeFold来获取由可用的送货员为客户安排送货计划的建议列表.我希望有五个班次来安排送货,而不是只有一个班次

在我的模型下面:

    @PlanningEntity
    public class Delivery {
        @InverseRelationShadowVariable(sourceVariableName="assignedDelivery")
        private List<Order> orders;
    }

    @PlanningEntity
    public class Order {
        @PlanningVariable(valueRangeProviderRefs = {"deliveryRange"}, nullable = true)
        private Delivery assignedDelivery;
    }

    @PlanningSolution
    public class PlanningSolution {
        @ValueRangeProvider
        @PlanningEntityCollectionProperty
        List<Order> orders;

        @ValueRangeProvider(id="deliveryRange")
        @ProblemFactCollectionProperty
        List<Delivery> deliveryList;

        Shift shift;
    }

使用此模型,求解器只返回最佳解决方案,我是应该使用特定的模式还是更新我的模型以获得多个提案/解决方案,然后 Select 其中一个并保存?

推荐答案

如果它只是分配一个交付,看看SolutionManager.recommendFit(),在TimeFold Solver 1.5.0中是新的.它是为当你有一个客户的电话,你需要立即回答最好的可能的选项来 Select ,例如时间窗口(有或没有固定的车辆和到达时间也).

如果它是为了优化多次交付,并为计划者提供很多 Select ,它被称为pareto optimization,这是一个皮塔,因为你可以很容易地得到数百万个解决方案,而向用户展示即使是一个大的解决方案也是困难的.我们也还不能很好地支持它,但你可以破解BestSolutionRecaller.

但你可能不会想要pareto optimization美元.您希望为不同的日程利益相关者(运营、财务等)提供一种协商最佳日程的方法.这条路不是这样的.他们将不得不每天都进行谈判.方法是constraint weights(参见文档)和适当的模拟基础设施(请继续关注),以便只有在业务目标发生变化时才进行谈判.

Java相关问答推荐

收听RDX中用户数据的变化

Jooq隐式地将bigint转换为数字,并且索引不起作用

Javascript更新alert 可扩展内容样式与CSS—按钮更多/更少

最小拓Flutter 排序的时间复杂度是多少?

Java Stream,需要更新列表对象列表

如何粘合(合并)文件Lucene?

AssertJ Java:多条件断言

使用GridBagLayout正确渲染

如何使用SpringBoot中的可分页对整数作为字符串存储在数据库中时进行排序

自定义批注的外推属性值

Java连接池无法正常工作

如何在不删除Java中已有内容的情况下覆盖文件内容?

为什么有两种实现来检索数组类的组件类型?

是否有一个Java Future实现可以在池繁忙时在调用者线程中执行?

从泛型枚举创建EnumMap

如何使用WebEnvironment.RANDOM_PORT获得第二个随机端口?

Android无法在Java代码中调用Kotlin代码,原因是在Companion中使用Kotlin枚举时

多线程、并发和睡眠未按预期工作

Java泛型方法重载

移动二维数组的行