2015-10-26 2 views
1

Привет всем opatplanner пользователей,optaplanner @ValueRangeProfider для булева переменного планирования [optaplanner]

Моего проблема планирования является: получение действительного графика дистанционных зондирования спутников.

@PlanningEntity:

ImageStrip (String taskCode, 
      int stripIndex, 
      String satellite, 
      Timestamp timeSlot, 
      boolean selected (planning variable)) 

@PlanningVariable:

boolean selected 

Мои проблемные данные первична так:

Image_strip:

D 1 SAT2 22-12-2015 11: 02: 24,051
D 1 Sat1 22-12-2015 11: 03: 24,069
А 2 Sat1 22-12-2015 11: 04: 24,122
А 2 SAT3 22 -12-2015 11: 06: 24,172
B 2 SAT3 22-12-2015 11: 07: 24,197
B 2 SAT2 22-12-2015 11: 08: 24,284
D 1 SAT3 22-12-2015 11 : 10: 24,042
А 3 Sat1 22-12-2015 11: 10: 24,395
А 2 SAT2 22-12-2015 11: 10: 24,441
А 1 SAT2 22-12-2015 11: 11: 24,456
C 2 Sat1 22-12-2015 11: 12: 24,465
B 1 Sat1 22-12-2015 11: 13: 24,469
B 1 SAT2 22-12-2015 11: 14: 24,551
С 2 SAT2 22-12 -2015 11: 15: 24,556
B 1 SAT3 22-12-2015 11: 16: 24,642
С 2 SAT3 22-12-2015 11: 17: 24,648
С 1 SAT3 22-12-2015 11:18 : 24,738
А 3 SAT3 22-12-2015 11: 19: 00,469
А 1 Sat1 22-12-2015 11: 20: 24,123
С 1 SAT2 22-12-2015 11: 20: 24,827
С 1 Sat1 22-12-2015 11: 21: 24,916
B 2 Sat1 22-12-2015 11: 30: 24,373
А 3 SAT2 22-12-2015 11: 40: 50,750
А 1 SAT3 22-12-2015 11: 50: 24,789

@PlanningSolution: Расписание

Пожалуйста, вопрос, как я могу определить поставщик диапазона значений просто логическую переменное планирование? Также я хочу использовать @PlanningVariable (nullable = true) для моей переменной планирования.

т. Е. @ValueRangeProvider для переменной планирования (выбираемой из булина), определенной в расписании. И используйте условие ограниченного планирования (nullable = true).

Мое правило заключается в следующем:

правил "Время переход Правила"

when 

    $leftImageStrip:ImageStrip($selected : selected, 
           $satellite : satellite, 
           selected != null, 
           $timeslot : timeslot) 
    $sumTime : Number() from accumulate (
           $rightImageStrip : ImageStrip(selected == $selected, 
           satellite == $satellite, 
          Math.abs(timeslot.getTime() -             $timeslot.getTime()) <= 180000, 
           this != $leftImageStrip), 
           sum($rightImageStrip.gain)) 
then 
    System.out.println(" SUM = " + $sumTime); 
    scoreHolder.addHardConstraintMatch(kcontext, -$sumTime.intValue()); 

я сделал следующее в объекте планирования:

@PlanningVariable (обнуляемый = истинный, valueRangeProviderRefs = { "selectedRange"})

public Boolean getSelected() {return selected; }

И в решении планирования я поставил следующее:

@ValueRangeProvider (ID = "selectedRange")

Список getValueRange() {вернуться Arrays.asList (Boolean.FALSE, Boolean.TRUE) ; }

открытый список getBooleanList() {return selectedList; }

public void setBooleanList (List selectedList) {this.selectedList = selectedList; }

Но я получил следующее сообщение об ошибке:

Исключение в потоке "АВТ-EventQueue-0" java.lang.IllegalArgumentException: entityClass (класс org.tasking.domain.ImageStrip) имеет PlanningVariable) аннотированный недвижимость (выбрано) со значениемRangeProviderRef (selectedRange), который не существует в зарегистрированном PlanningSolution или PlanningEntity.

Я не могу распознать причину ошибки. спасибо заранее!

ответ

1

Использовать Boolean (не boolean), поэтому null может представлять собой неинициализированную переменную (что делает объект также неинициализированным).

На вашем решении:

@ValueRangeProvider(...) 
List<Boolean> getValueRange() { 
    return Arrays.asList(Boolean.FALSE, Boolean.TRUE); 
} 
+0

Спасибо большое, но у меня есть проблема. Я сделал следующее: \t @PlanningVariable (обнуляемым = верно, valueRangeProviderRefs = { "selectedRange"}) \t общественного Логическое getSelected() { \t \t возвращение выбран; \t} в объекте планирования. и в решении планирования я поставил следующее: \t @ValueRangeProvider (ID = "selectedRange") \t Список getValueRange() { \t возвращение Arrays.asList (Boolean.FALSE, Boolean.TRUE); \t} \t общественности Список getBooleanList() { \t \t возвращение selectedList; \t} \t общественного недействительными setBooleanList (Список selectedList) { \t \t this.selectedList = selectedList; \t} , но я получил следующую ошибку: –

+0

Исключение в потоке «AWT-EventQueue-0» java.lang.IllegalArgumentException: Суть класса (класс org.tasking.domain.ImageStrip) имеет связанное с PlanningVariable свойство (выбранное) со значением RangeProviderRef (selectedRange), которое не существует в зарегистрированном PlanningSolution или PlanningEntity. –

Смежные вопросы