【问题标题】:Top N solution for a planning entity规划实体的前 N ​​个解决方案
【发布时间】:2023-01-20 17:14:47
【问题描述】:

我有一个简单的字段映射用例,我需要根据多个约束智能地找到输入源字段的目标字段。 更详细地说,只有一个源字段,并且有 100 个目标字段。

@PlanningEntity
public class FieldMapping {

    @PlanningId
    private Long id;

    public FieldMapping()
    {

    }


    protected Field inputField;

    @PlanningVariable(valueRangeProviderRefs = {
            "targetFieldRange" })
    protected Field targetField; }  

@PlanningSolution
public class FieldMappingSolution {

    @ValueRangeProvider(id = "targetFieldRange")
    @ProblemFactCollectionProperty
    private List<PlanningRecommField> targetFields;

   @PlanningScore
    private HardSoftScore score;

    private SolverStatus solverStatus;

目前 Optaplanner 给出了最好的解决方案映射。我可以有一些 API 来获得前 N 个解决方案吗?

【问题讨论】:

    标签: optaplanner


    【解决方案1】:

    不,但是您可以listen to best solutions 并建立您喜欢的任何统计数据。也就是说,如果两个最佳解决方案的分数相同,则只会为第一个解决方案触发事件。

    【讨论】:

      【解决方案2】:

      OptaPlanner 确实提供了 API 来获取前 N 个解决方案。您可以使用 getBestSolution() 方法返回当前任务的最佳解决方案。您还可以使用方法 getBestSolutions(int numberOfSolutions) 和 getBestSolutionsByScore(HardSoftScore score, int numberOfSolutions) 分别根据分数和解决方案数量获得前 N 个解决方案。

      例如,如果您想要给定问题的前 3 个解决方案,您可以使用方法 getBestSolutions(3)。这将根据问题的得分返回前 3 个解决方案。

      如果您想要“最低得分”为 500 分的前 3 个解决方案,可以使用方法 getBestSolutionsByScore(HardSoftScore.valueOf(500,0), 3)。这将返回得分至少为 500 分的前 3 个解决方案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-23
        • 1970-01-01
        • 1970-01-01
        • 2014-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多