Оптапланер, не использующий другие BinAvailabilty, чтобы получить Назначить на событие - PullRequest
0 голосов
/ 26 апреля 2020
        @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 publi c class EventBinAssignation {

private String id;

@PlanningScore
private HardSoftScore score;

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

@PlanningEntityCollectionProperty
List<Event> events;

}

Я создал две сущности с событием и BinAvailability. Мне нужно назначить события для binAvailablity. но Optaplanner назначает события только первой binAvailability. Никакой другой binAvailbility не использовался Optaplanner для назначения событий, в которых застрял счет, но он не использует никакой другой binavalilbity для назначения событий с некоторыми конкретными условиями. Поэтому, пожалуйста, помогите.

1 Ответ

0 голосов
/ 27 апреля 2020

Если OptaPlanner назначает события только первой binAvailability, возможно, это связано с тем, что ваше жесткое ограничение не соответствует (в вашем ScoreDrl). Включите ведение журнала TRACE и найдите число score для каждого хода CH.

Или поместите System.out.println в then этого ограничения в DRL. Или перейдите на ConstraintStreams и установите точку останова отладчика в penalize() matchWeighter lamdba.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...