java - Optaplanner 不使用其他 BinAvailabilty 来获取分配给事件

标签 java optaplanner

        @PlanningEntity
        public class BinAvailablity {
            private int id;
            private Interval interval;
            private Bin bin;
            private int roomMax;
            @InverseRelationShadowVariable(sourceVariableName = "binAvailablity")
            private List<Event> events = new ArrayList<>();
            private List<Interval> nonAvailablity;
        }


    public class Event {

        private int id;
        @CustomShadowVariable(variableListenerClass = IntervalAssigningListener.class,
                sources = {@PlanningVariableReference(variableName = "binAvailablity")})
        private Interval interval;//assignning listener variable
        private boolean isPinned;
        private TotalTime totalTime;
        @PlanningVariable(valueRangeProviderRefs = "binAvailablities")
        private BinAvailablity binAvailablity;//plannig variable
        private List<Staff> staffList;
        private List<Equipment> equipmentList;
        private List<Interval> nonAvailability;}

我的配置是:-

<?xml version="1.0" encoding="UTF-8"?>
<solver>
    <solutionClass>com.strategy.eagle.domains.optaplanner.EventBinAssignation</solutionClass>
    <entityClass>com.strategy.eagle.domains.optaplanner.Event</entityClass>
    <entityClass>com.strategy.eagle.domains.optaplanner.BinAvailablity</entityClass>
    <scoreDirectorFactory>
        <scoreDrl>Optaplanner/EventScheduling.drl</scoreDrl>
    </scoreDirectorFactory>
    <termination>
        <secondsSpentLimit>200</secondsSpentLimit>

        <bestScoreLimit>0hard/0soft</bestScoreLimit>


    </termination>


    <constructionHeuristic>
        <constructionHeuristicType>FIRST_FIT</constructionHeuristicType>
    </constructionHeuristic>
    <localSearch>

<!--       -->
        <localSearchType>HILL_CLIMBING</localSearchType>
    </localSearch>
</solver>

@PlanningSolution 公共(public)类 EventBinAssignation {

private String id;

@PlanningScore
private HardSoftScore score;

@ProblemFactCollectionProperty
@ValueRangeProvider(id = "binAvailablities")
List<BinAvailablity> binAvailablities;

@PlanningEntityCollectionProperty
List<Event> events;

}

我已经使用 Event 和 BinAvailability 创建了两个实体。我需要将事件分配给 binAvailability。但 Optaplanner 仅将事件分配给第一个 binAvailability。 Optaplanner 没有使用任何其他 binAvailability 来分配分数卡住的事件,但它不使用任何其他 binAvaillbity 来分配具有某些特定条件的事件。所以请帮忙。

最佳答案

如果 OptaPlanner 仅将事件分配给第一个 binAvailability,则可能是因为您的硬约束不匹配(在您的 ScoreDrl 中)。打开 TRACE 日志记录并查找每个 CH 移动期间的分数 数字。

或者将 System.out.println 放入 DRL 中该约束的 then 中。 或者迁移到 ConstraintStreams 并在 penalize() matchWeighter lamdba 中放置一个调试器断点。

关于java - Optaplanner 不使用其他 BinAvailabilty 来获取分配给事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61440569/

相关文章:

java - 从 Servlet 访问 Tomcat 上下文路径

java - 延长 keystore 中 trustedCertEntry 的到期日期

java - OptaPlanner - CloudBalancingHelloWorld.java - 无法访问 solver.getBestSolution()?

java - OptaPlanner 计划实体,即使没有可用的移动

c++ - 在 c++/c# 中替代 drools-planner/optaplanner?

java - Android onCreate() 方法中的代码无法正常工作

java - Android 如何使我的应用程序在分辨率小于 480x800 的设备上不可见

CgBI 图像到 RGBA 的 Java 转换器?

java - OptaPlanner 中 VRP 的最小最大游览

java - InverseRelationShadowVariable 必须属于 planningEntity 吗?