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

在使用springboot optaplanner spring boot starter时,如何使用多个ConstraintProviders

马边浩
2023-03-14

optaplanner-spum-boot-starter自动发现ContraintProvider,没有解决onfig.xml,所以如果我们想为不同的问题使用多个constrantProvider,比如问题A,需要使用问题A ContraintProvider和问题B,需要使用ProblemBContraintProvider,有任何限定符种类我可以使用的注释,并告诉solverManger使用特定的ConstraintProvider实现

public class ProblemAConstraintProvider implements ConstraintProvider {

    @Override
    public Constraint[] defineConstraints(ConstraintFactory constraintFactory) {
        return new Constraint[] { 
                typeMatch(constraintFactory),
                timeSlotMatch(constraintFactory),
                };
    }
}

public class ProblemBConstraintProvider implements ConstraintProvider {

    @Override
    public Constraint[] defineConstraints(ConstraintFactory constraintFactory) {
        return new Constraint[] { 
                checkId(constraintFactory),
    
                };
    }
}

共有2个答案

厍书
2023-03-14

简单的回答是否定的;类似于我们可以在Springboooptaplanner中使用多个@PlanningSolution类和多个SolverManager的答案,每种类型的规划问题都需要一个新的求解器配置,该配置定义了约束提供程序类

optaplanner-spum-boot-starter仅支持单个求解器配置,因此仅支持规划问题的单个类型。

陶法
2023-03-14

您需要添加一个solverConfig.xml来覆盖查找ConstraintProvider类的默认行为(然后因为找到两个而导致禁食失败)。

添加src/main/resources/solverConfig。xml(文件位置可以通过in-application.properties进行定制)并使其包括以下内容:

<solver>
  <scoreDirectoryFactory>
    <constraintProviderClass>...FirstConstraintProvider</>
  </scoreDirectoryFactory>
</solver>

但是正如Radovan所指出的:在同一个Spring Boot应用程序中,我们还不支持多个SolverManager/solverConfig注入。这是一个API缺口。

 类似资料:
  • 我有一个带有3列的示例MyTable-id、common_id、creation_date,其中common_id分组条目。 现在,我想使用CriteriaBuilder从每个组中选择所有最新的条目(即每个常见的\u id获取最新的创建日期)。 SQL查询如下所示: 现在我尝试通过编写类似(cb是CriteriaBuilder,root是Root)的内容来创建place谓词: 但不幸的是。数组不是

  • 问题内容: 我目前正在用Java编写一个大型项目,其中包含许多类,有些类很小,只用很少的方法表示对象。我的主班有一个记录器,它运行良好。我希望所有类只能使用一个记录器(带有一个控制台附加程序)。我试图将对记录器的引用传递给不同的类,但是看起来不正确。此外,有时我在不运行main的情况下在类上运行测试,因此未针对其他类初始化记录器。 我的意思是,如何做到这一点的最佳方法是如何从不同的类登录到一个日志

  • 我有一个使用RabbitMQ(spring-boot-starter-amqp)的Spring应用程序。 我想知道是否可以跨不同的类使用RabbitListener注释。 我目前有两个类:和 <代码>接收器。java: : RabbitMqConfig。java: 当我使用RabbitMQ管理工具向FanoutExchange发布消息时,类中的不会将任何内容记录到控制台。但是,如果此方法在类中,则

  • 问题内容: 所以我正在一个项目中,我想要一个包含多个数据流的列表视图。我正在寻找的是这样的东西,但是所有这些都需要在一个列表视图中滚动。 我正在接收的数据流来自firebase,并且该变量是firebase集合的实例。我能够为单个流构建一个列表,所以我知道实例是正确的,我不想共享它,因为当前数据库规则处于测试模式。 此代码使我可以从单个流构建单个对象,并且可以按预期工作。 从这里开始,我觉得我有2

  • 问题内容: 我有几个模块-假设是server.js,module1.js,…,moduleN.js。 我想在server.js中定义日志文件: 然后在我所有的模块中使用它 最好的方法是什么?我可以在每个模块中,然后在server.js中进行设置,但是还有更好的解决方案吗? 先感谢您! 问题答案: 默认的记录器概念很好地解决了这一问题。 Winston定义了一个默认记录器,任何对Winston的直接

  • 我有一个负载平衡器,我想测试负载平衡器的性能。我使用Apache JMeter来测试负载平衡器。我需要更改我的IP地址,以便客户端IP总是不同的。我的uni不允许我添加多个IP地址(IP欺骗/ IP别名)。 所以,另一个选择是使用代理服务器。有没有办法一次在JMeter中使用2个或多个代理服务器?目前我只能一次指定一个代理服务器。 有办法扭转局面吗?