嗨所有opatplanner用户,
我的 规划问题 是:获取有效的遥感卫星星座图。
@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
A 2 Sat1 22-12-2015 11:04:24.122
A 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
A Sat1 22-12-2015 11:10:24.395
A 2 Sat2 22-12-2015 11:10:24.441
A 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
C 2 Sat2 22-12-2015 11:15:24.556
B 1 Sat3 22-12-2015 11:16:24.642
C 2 Sat3 22-12-2015 11:17:24.648
C 1 Sat3 22-12-2015 11:18:24.738
A 3 Sat3 22-12-2015 11:19:00.469
A 1 Sat1 22-12-2015 11:20:24.123
C 1 Sat2 22-12-2015 11:20:24.827
C 1 Sat1 22-12-2015 11:21:24.916
B 2 Sat1 22-12-2015 11:30:24.373
A 3 Sat2 22-12-2015 11:40:50.750
A 1 Sat3 22-12-2015 11:50:24.789
@PlanningSolution:Schedule
请问,问题是如何为布尔规划变量定义值范围提供程序? 我还想使用@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(nullable = true,valueRangeProviderRefs = {“selectedRange”})
public Boolean getSelected(){return selected; }
在规划解决方案中,我提出以下内容:
@ValueRangeProvider(id =“selectedRange”)
List getValueRange(){return Arrays.asList(Boolean.FALSE,Boolean.TRUE); }
public List getBooleanList(){return selectedList; }
public void setBooleanList(List selectedList){this.selectedList = selectedList; }
但是我收到了以下错误:
线程“AWT-EventQueue-0”中的异常java.lang.IllegalArgumentException:entityClass(类org.tasking.domain.ImageStrip)具有一个带有一个不存在的valueRangeProviderRef(selectedRange)的带注释属性(已选中)在已注册的PlanningSolution或PlanningEntity上。
我无法识别错误原因。 提前谢谢!!!
答案 0 :(得分:1)
使用Boolean
(不是boolean
),因此null
可以表示未初始化的变量(这使得实体也未初始化)。
在您的解决方案上:
@ValueRangeProvider(...)
List<Boolean> getValueRange() {
return Arrays.asList(Boolean.FALSE, Boolean.TRUE);
}