我需要一些关于在 @PlanningEntity 中使用 @ValueRangeProvider 的帮助
我使用了nursingShift示例原理,其中Plannningsolution通过休息服务调用进行实例化,然后通过Hibernate获取所有数据、事实等并创建解决方案。
SolverJob<MySolution, Long> res = solverManager.solveAndListen(MySolutionRepository.SINGLETON_SOLUTION_TABLE_ID,
mySolutionRepository::findById,
mySolutionRepository::save
);
该解决方案然后获取所有事实、数据等并启动求解器。但是,一旦进入班级,我需要通过访问 PlanningSolution(其中包含员工列表并对其进行筛选)来限制可以分配到会议的可能员工。我正在尝试用 4.3.5.2.3 解决它。 @PlanningEntity 内的 @ValueRangeProvider 取决于员工的类型,但不确定如何获取引用,回到包含所有原始员工的原始列表?另外,计划实体和计划解决方案中都应该有@ValueRangeProvider,还是只有第一个。
@PlanningSolution
public class MySolution {
...
@ValueRangeProvider
@ProblemFactCollectionProperty
private List<Employee> employeeList;
@PlanningEntityCollectionProperty
private List<Meeting> MeetingList;
...
}
@PlanningEntity
public class Meeting{
...
@PlanningVariable (nullable = true)
private Employee employee;
...
@ValueRangeProvider
public List<Employee> getFilteredEmployeeList() {
"Get the original list from MySolution by some reference or build in auto-detection in optaplaner and filter it, based on the employees type"
return employeeList;
}
}
最佳解决方案将取决于您想要实施的限制类型: