Problem Fact
Planning Entity
Planning Variable
Planning Value & Planning Value Range
Planning List Variable
Chained Planning Variable
为了实现一种时间上的链式结构,可以考虑使用Chained Planning Variable。这种结构经常在旅行商问题、货车调度等问题中出现
Chained Planning Variable允许Planning Entity指向对方(一个Planning Entity指向另一个Planning Entity)
通过把问题建模成一系列长链的形式(而不是图或者树),搜索空间大大减少了
一个Planning Variable是Chained当且仅当:
- 直接指向一个Problem Fact或者Planning Entity(这叫一个Anchor)
- 指向另一个Planning Entity(这个被指向的Planning Entity也需要有相同的Planning Variable,这个Planning Variable最终直接或间接指向了一个Anchor)

优化算法和OptaPlanner内建的Move会自动做链的修改,并且保证链修改过后仍然合法

举个例子
对于一个旅行商问题来说,我可以定义Standstill这样的接口,从Standstill中衍生出Domicile和Visit,分别表示旅行商的起点和要访问的点
public interface Standstill {
getCity();
City }
public class Domicile implements Standstill {
public City getCity() { ... }
}
@PlanningEntity
public class Visit implements Standstill {
public City getCity() { ... }
@PlanningVariable(graphType = PlanningVariableGraphType.CHAINED)
public Standstill getPreviousStandstill() { ... }
}