当前位置: 首页 > 知识库问答 >
问题:

过度约束的规划不按预期进行

贺佑运
2023-03-14

我一直试图让过度约束的计划来适应我的情况,但不断遇到一些失败的硬约束仍然被分配的问题。如果之前有人回答过这个问题,我很抱歉,但是我看到的大多数示例/解决方案都是围绕Drools展开的,我在这个项目中使用的是streams API。使用optaplanner的quarkus 1.4.2实现,如果有帮助的话。

private Constraint unnassignedPerson(ConstraintFactory constraintFactory) {
    return constraintFactory.from(Assignment.class)
            .filter(assignment -> assignment.getPerson() == null)
            .penalize("Unassigned", HardMediumSoftScore.ONE_MEDIUM);

private Constraint numberAssignmentConflict(ConstraintFactory constraintFactory) {
    return constraintFactory.from(Assignment.class)
            .join(Assignment.class,
                    Joiners.equal(Assignment::getPerson),
                    Joiners.equal(Assignment::getNumber),
                    Joiners.lessThan(Assignment::getId))
            .penalize("Number Conflict", HardMediumSoftScore.of(2, 0, 0));

private Constraint tooLittleSpaceBetweenResourceAssignment(ConstraintFactory constraintFactory) {
    return constraintFactory.from(Assignment.class)
            .join(Assignment.class, Joiners.equal(Assignment::getPerson), Joiners.lessThan(Assignment::getId))
            .filter((assignment, assignment2) -> !assignment.getResourceId().equals(assignment2.getResourceId()))
            .filter(((assignment, assignment2) -> inRange(1, assignment.getNumber(), assignment2.getNumber())))
            .penalize("Not enough space between assignments of different resource (requires 1)", HardMediumSoftScore.of(1, 0, 0));
}

任何关于我可能做错什么的见解都将不胜感激,并提前感谢:)

共有1个答案

韦安怡
2023-03-14

接下来,我的赋值冲突约束的joiners.lessthan(赋值::getid)部分与可空赋值不兼容。我删除了它,并添加了一些更显式的检查,现在事情就像他们应该做的那样:d

Psuedo-适合任何可能有所帮助的人:

private Constraint numberAssignmentConflict(ConstraintFactory constraintFactory) {
    return constraintFactory.from(Assignment.class)
            .join(Assignment.class,
                    Joiners.equal(Assignment::getPerson),
                    Joiners.equal(Assignment::getNumber))
            .filter(((assignment, assignment2) -> assignment.getPerson() != null && assignment2.getPerson() != null))
            .filter(((assignment, assignment2) -> !assignment.getId().equals(assignment2.getId())))
            .penalize("Number Conflict", HardMediumSoftScore.of(2, 0, 0));
}
 类似资料:
  • 我正试图用java的Optaplanner实现一个简单的云平衡系统,该系统具有过度约束的规划。 最喜欢的是,我正在尝试使用Optaplanner Java库实现一个简单的云平衡系统,该系统具有过度约束的规划。我将模型映射到我的问题(车辆和资产),进行变量替换cpuPower- 如果我使用这个简单的例子,我会收到一个所有进程都已签名的响应,尽管其中一些不能分配给计算机。对于这个问题,optaplan

  • 我已经添加了约束到3标签关于holderview和也添加了约束holderview关于Superview 应用程序中有一个缩小圆圈的功能。我希望holderview及其子视图动态收缩。添加约束对holderview有效,但子视图未对齐。 为了缩小,我会随着超级视图帧的变化更新Holderview的帧大小。 有人能指出错误并指导我找到正确的解决方案吗?

  • 我尝试在视图顶部设置黑色标签高度约束的动画,并在下面的白色标签上设置约束,以设置与上面标签的距离。然后,我尝试使用以下代码设置高度更改黑色标签的动画(我还尝试删除UIView.animateWithDuration块中更改self.height的代码): 按按钮可调用调整大小操作。。有一些东西是动态的,但不是我所期望的:标签立即将其大小更改为0或100。当它变为0时,第二个标签将缓慢向上移动到其新

  • 我想为VRP创建一个过度约束规划的增量分数。我创建了一个传统的虚拟车辆,其中包括所有计划外的客户。 示例: Optaplanner将Customer1从Vehicle1移动到Vehicle2: 当我得到AfterVariableChanged:previousStandstill(Customer1)时,在Customer.getVehicle()中,我有旧车辆的价值,我不知道是否需要添加软成本(

  • 问题内容: 为什么下面的查询计划中包含表“ events_201504”?根据我的查询和对该表的检查约束,我希望查询计划程序能够完全修剪它: 时间和配置: 查询计划: 问题答案: 您的专栏是。 但是回报。该表达式被强制转换为,它带来 两个问题 : 1.) 您没有要求这个,但是表达是不可靠的。其结果取决于在其中执行查询的会话的当前时区设置。 为了使表达清晰,可以使用: 或者只是(在此处阅读手册):

  • 正如标题所说。我是Optaplanner的新开发人员。在我切换到过度约束规划之前,CH阶段工作正常:这里是CH按预期分配21个实体,LS能够找到一个最优解决方案(忽略中等得分级别): 在切换到可空规划变量后,中等得分水平对每个未分配的实体都有一个惩罚的约束。这是解决optplanner无法找到最佳解决方案的同一个问题实例的日志: null