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

当使用OptaPlanner的SolverManager时,是否需要配置xml或drools drl文件?

惠志
2023-03-14
public class ConstraintProvider implements 

    org.optaplanner.core.api.score.stream.ConstraintProvider {
        @Override
        public Constraint[] defineConstraints(ConstraintFactory constraintFactory) {
            return new Constraint[]{
                    requiredSkillLevelOfEmployeesForShifts(constraintFactory)
            };
        }

        private Constraint requiredSkillLevelOfEmployeesForShifts(ConstraintFactory constraintFactory) {
            return constraintFactory.from(Shift.class)
                    .groupBy(Shift::getEmployee, sum(Shift::getRequiredSkillLevel))
                    .filter((employee, requiredSkillLevel) -> requiredSkillLevel > employee.getSkillLevel())
                    .penalize("requiredSkillLevelForShifts",
                    HardSoftScore.ONE_HARD,
                    (employee, requiredSkillLevel) -> requiredSkillLevel - employee.getSkillLevel());
        }


    }


    @RestController
    @RequestMapping("/api")
    public class RostersController {

        @Autowired
        private SolverManager<Roster, UUID> solverManager;

        @PostMapping("/solve")
        public Roster solve(@RequestBody Roster problem) {
            UUID problemId = UUID.randomUUID();
            // Submit the problem to start solving
            SolverJob<Roster, UUID> solverJob = solverManager.solve(problemId, problem);
            Roster solution;
            try {
                // Wait until the solving ends
                solution = solverJob.getFinalBestSolution();
            } catch (InterruptedException | ExecutionException e) {
                throw new IllegalStateException("Solving failed.", e);
            }
            return solution;
        }

    }

共有1个答案

权浩邈
2023-03-14

DRL(scorerules.DRL)和ConstraintProvider是互斥的。您已经开始使用constraintprovider实现约束,所以让我们继续使用它,并在其中添加您可能需要的任何新约束。ConstraintProvider是新的Constraint Streams API的一部分,它允许您在Java中定义约束,并且易于使用ConstraintVerifier进行测试。

<?xml version="1.0" encoding="UTF-8"?>
<solver>
  <solutionClass>com.your.domain.Roster</solutionClass>
  <entityClass>com.your.domain.Shift</entityClass>

  <scoreDirectorFactory>
    <constraintProviderClass>com.your.domain.ConstraintProvider</constraintProviderClass>
  </scoreDirectorFactory>
</solver>

 类似资料:
  • 我使用testAd ID(ca-app-pub-3940256099942544/1033173712)从admob不是我的admob ID,我需要使用addTestDevice()太,而在移动设备测试?它甚至显示了测试广告屏幕,而不是实时广告。 因为我这样做了,我整天都在使用我的应用程序进行测试,晚上我收到了账户暂停邮件。

  • 上下文:我正在研究SAML服务提供商实现。我们正在实施SAML Web SSO配置文件,其中包含用于生成AuthnRequest的HTTP-ReDirect绑定和用于接受Saml响应的HTTP-Post绑定(Dropbox for Business等流行产品使用的典型设置)。我们的SPendpoint将对网络上的任何人公开访问,我们的断言消费者服务URL是HTTPS。 SAML 规范非常明确地说明

  • 我试图使用扩展EmptyInterceptor的拦截器类从hibernate获取审计记录。我的问题是,hibernate是否自动配置和调用拦截器类中的方法,或者我是否必须在hibernate中进行任何配置。cfg。xml还是任何地方?

  • 问题内容: 我尝试搜索,但没有找到明确的答案。在Windows Server 2016上,没有实际安装Chrome浏览器。我下载了正确的“ chromedriver.exe”并将其放置在“ D:\ Apps \ chromedriver.exe”中。我已将完整路径添加为“ D:\ Apps \ chromedriver.exe”到我的环境PATH中。 当我尝试启动使用最新Selenium的Wind

  • 我想使用新的log4j2-Java日志框架。一切正常,但我从一小时后就尝试加载一个自定义配置文件来配置日志记录(如日志级别)。 这是我的log4j2.xml: 我尝试了以下方法,但没有任何效果: 移动log4j2.xml文件,使其位于默认包中。 将log4j2.xml文件移动到项目中的任意位置 将log4j2.xml文件命名为log4j.xml 在项目中创建一个文件夹,将log4j2.xml文件放

  • 问题内容: 使用JAXB时是否始终需要ObjectFactory类? 没有它,我得到这个异常: javax.xml.bind.JAXBException:“ com.abc”不包含ObjectFactory.class或jaxb.in​​dex 我搜集到的ObjectFactory可以说是矫kill过正。但是鉴于这个例外,我猜您需要它。.但不确定为什么吗? 问题答案: 当您使用factory方法时