Я пытаюсь реализовать приложение для планирования работы магазина, используя набор данных Fisher & Thompson mt10. В основном он содержит
- 10 заданий, каждое из которых имеет 10 зависимых шагов
- 10 машин
- каждый шаг задания назначается определенной машине
Я реализовал сценарий использования Optaplanner, основанный на примере «Taskassigning». Я удалил концепции скорости и приоритета, но сохранил концепцию навыков, чтобы задания выполнялись только на машинах, на которых они могут работать. Я ввел концепцию «предшественника», чтобы построить зависимости между заданиями / этапами.
Поскольку в расписании будут пропуски (которые отличаются от примера Taskassigning), будут удалены время начала и время окончания, а также введено значение 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 и, возможно, упускаю что-то очень простое. Я изо всех сил пытаюсь определить, что я делаю неправильно, даже после тщательного прочтения документов и примеров.
Есть идеи?