我正在使用optaplanner spring boot starter来解决员工排班问题。我有两个类,员工和计划实体轮班。目前,我正在使用如下所示的约束提供程序根据员工的技能水平为他们分配班次。 public class ConstraintProvider implements
org.optaplanner.core.api.score.stream.ConstraintProvider {
@Override
public Constraint[] defineConstraints(ConstraintFactory constraint
optaplanner-spring-boot-starter自动发现ContraintProvider,没有solverConfig.xml,所以如果我们想要针对不同的问题使用多个constrantProviders,比如问题A,需要使用problemAContraintProvider和问题B,需要使用ProblemBContraintProvider,是否有限定符类型的注释,我可以使用,并告诉solverManger使用特定的ConstraintProvider实现。
public class ProblemAConstraintProvider implements Constrain
在一个简单的排行问题中,我希望OptaPlanner在我的计划中返回“漏洞”,这样,如果没有具备所需技能的员工,就会发现某些轮班。
假设有3个基本类,我只想用HardMediumSoftScore.ONE_SOFT惩罚未发现的轮班。
我如何编写这样的约束呢?
Employee.java
public class Employee {
private long id = 0L;
private List<Skill> skills;
Shift.java
@PlanningEntity
public class Shift {
private Requi
我正在使用C#中的Google OR工具构建一个CP-SAT模型,以解决护士排班问题的一个变体,其中每天有可变数量的轮班,并且在任何给定的一天都有可变数量的护士可以工作这些班次。 按照ShiftSchedulingSat.cs中的这个例子,如果每天的班次数和员工数都是已知的,那么有一种方法可以很容易地实现这一点。我如何修改它来满足我的需求呢? var model = new CpModel();
IntVar[,,] work = new IntVar[numEmployees, numShifts, numDays];
foreach (int e in Range(numEmploy
我正在使用that nurse scheduling example。我有3个员工,2个班次和7天,我有一个条件,如果一个员工在班次1工作,他/她不能第二天在班次0工作。这是我的代码,它不能工作。 for n in all_nurses:
for d in all_days:
model.Add(sum(shifts[(n, d, s)] for s in range(0,1))+sum(shifts[(n, (d+1)%6, s)] for s in range(1,2)) <= 1) 这是output。护士2在0天和轮班1工作,第二天也在shif
在提出解决方案的同时,我想对多个课程表提出一些限制。例如,我想检查同一位老师在两个时间表上是否没有两个时隙(上课)。因此,我想比较两个时隙(两个教训)在两个不同的时间表。我不知道是怎么回事。
我使用的是ConstraintProvider类:
public class TimeTableConstraintsProvider implements ConstraintProvider {
@Override
public Constraint[] defineConstraints(ConstraintFactory constraintFactory) {
我有一个员工模型和一个轮班模型。员工有很多班次,班次有日期。
我希望能够选择在给定日期可用的所有员工,即选择在给定日期没有关联班次的所有员工。
我可以选择所有不需要轮班的员工,如下所示:
SELECT users.* FROM users
LEFT JOIN shifts ON users.id = shifts.user_id
WHERE shifts.user_id IS NULL;
但这并不是特定的日期。
谢谢。
上下文是使用OptaPlanner使用Drools规则计算分数的员工轮班分配。比如说,我的员工不能连续工作超过三天而没有休息日。我非常愚蠢地实现了这样一个约束: rule "No more than three consecutive working days"
when
ShiftAssignment(
$id1 : id,
$empoloyee : empoloyee != null,
$shift1 : shift
)
ShiftAss
我有一个关于OptaPlanner's Strongest Fit芦荟的问题。在文档中,可以找到最适合的算法描述,即:
Like First Fit, but uses the strong planning values first, because the strong planning values are more likely to have a lower soft cost to use. So it sorts the planning values on decreasing strength.
我想知道"more likely to have a lower