Optaplanner没有为PlanningVariable使用不同的值

时间:2018-05-06 22:15:52

标签: optaplanner

我正在尝试使用Fisher& amp实现工作车间调度应用程序。汤普森mt10数据集。基本上它包含

  • 10个工作,每个工作有10个相关步骤
  • 10台机器
  • 将作业的每个步骤分配给特定计算机

我已经实施了一个基于" Taskassigning"的Optaplanner用例。例。我删除了速度和优先级概念,但保留了技能概念,使作业只能在他们能够运行的机器上运行。我介绍了一个"前身"构建作业/步骤之间的依赖关系的概念。

由于计划中存在空白(与Taskassigning示例不同),删除了starttime和endtime,并引入了一个starttime PlanningVariable,由可能的开始时间列表提供。

但是,我在日程表中只有两个不同的开始时间--Optaplanner似乎没有使用我的价值范围提供商。因此,违反了硬约束,因为不保留依赖步骤的顺序。

作业:

private JobType jobType;
private Job predecessor;
private Job successor;
private int indexInJobType;

// Planning variables: changes during planning, between score calculations.
@PlanningVariable(valueRangeProviderRefs = {"machineRange", "jobRange"},
        graphType = PlanningVariableGraphType.CHAINED)
private JobOrMachine previousJobOrMachine;

@AnchorShadowVariable(sourceVariableName = "previousJobOrMachine")
private Machine machine;

@PlanningVariable(valueRangeProviderRefs = {"startTimeRange"})
private StartTime startTime=new StartTime(0); // In minutes

我的PlanningSolution有一个范围提供者:

@ValueRangeProvider(id = "startTimeRange")
@ProblemFactCollectionProperty
public List<StartTime> getStartTimeList() {
    return startTimeList;
}

我对Optaplanner相对较新,可能会遗漏一些非常基本的东西。即使在广泛阅读了文档和示例之后,我仍在努力确定我做错了什么。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我发现与计划变量相关的硬约束规则存在问题。这个问题不再有效。感谢。