Optaplanner / Timefold 克隆解决方案

问题描述 投票:0回答:1

我有一个有效的 optaplanner/Timefold 解决方案。它提供了一个在白天向业务提供实时反馈的解决方案。但是更改请求会临时排队,因此我需要克隆解决方案来测试任何请求是否有可行的解决方案,然后再将其进一步提交到主解决方案中。为此,我克隆了当前用于测试的最佳解决方案,如下所示:

SolutionDescriptor solutionDescriptor =  SolutionDescriptor.buildSolutionDescriptor(DistributionSolution.class, MoverEntity.class, LoaderEntity.class );
        FieldAccessingSolutionCloner<DistributionSolution> distSolCloner = new FieldAccessingSolutionCloner<>(solutionDescriptor);
        DistributionSolution clonedSolution =   distSolCloner.cloneSolution(currentDistributionSolution);

但是对解决方案和实体类进行硬编码似乎很脆弱,我可以使用solverConfig.xml,但这是另一种硬编码,它可以移动到工厂等。但我正在寻找一种更动态的方式来获取初始化解决方案克隆器。我查看了 TimeFoldProcesser.class,因为它似乎完全使用反射来实现这一点,但不确定如何在运行时访问它?关于如何解决这个问题有什么想法吗?

optaplanner timefold
1个回答
0
投票

请注意,

SolutionDescriptor
不是公共API;你正在做一些你一开始就不应该做的事情。

我不完全确定为什么你需要这样做;如果您想检查任何特定问题是否有可行的解决方案,您应该运行求解器。没有什么可以阻止您同时运行多个求解器 - 一个用于您的实际问题,另一个用于测试假设。

也就是说,Timefold Solver 将很快推出一项功能来帮助您解决此问题;我们将其称为“推荐适配 API”,它旨在为您的问题提供超快速的答案:“我可以将这个新实体放在当前解决方案中的最佳位置吗?”

Wrt。 “硬编码实体和解决方案”,我根本不理解问题的这一部分。配置需要写在某处——无论是在

SolverConfig
还是在
solverConfig.xml
中;它一定在某个地方。

Wrt。

TimefoldProcessor
- 如果您正在使用 Quarkus,那么您已经在使用它了。如果您不使用 Quarkus,则无法使用它。

© www.soinside.com 2019 - 2024. All rights reserved.