Java Spring Boot(STS)中无法识别ConstraintCollector
我正在尝试使用Optaplanner constraintprovider,它可以正常工作,直到我想使用Java Spring Boot(STS)中无法识别ConstraintCollector,java,spring-boot,optaplanner,Java,Spring Boot,Optaplanner,我正在尝试使用Optaplanner constraintprovider,它可以正常工作,直到我想使用count()ConstraintCollector 我试图在groupBy-子句中使用它,但得到了错误:方法count()对于类型hamxConstraintProvider是未定义的 我认为这应该“起作用”?还是我应该写自己的计数方法?我在示例中找不到这种情况,但似乎也无法解决。我是否忽略了一个重要因素 import org.optaplanner.core.api.score.strea
count()
ConstraintCollector
我试图在groupBy
-子句中使用它,但得到了错误:方法count()对于类型hamxConstraintProvider是未定义的
我认为这应该“起作用”?还是我应该写自己的计数方法?我在示例中找不到这种情况,但似乎也无法解决。我是否忽略了一个重要因素
import org.optaplanner.core.api.score.stream.Constraint;
import org.optaplanner.core.api.score.stream.ConstraintFactory;
import org.optaplanner.core.api.score.stream.ConstraintProvider;
import org.optaplanner.core.api.score.stream.uni.UniConstraintCollector;
import org.optaplanner.core.api.score.stream.bi.BiConstraintCollector;
import org.optaplanner.core.api.score.stream.ConstraintCollectors.*;
import org.optaplanner.core.api.score.stream.Joiners.*;
...
public class hamxConstraintProvider implements ConstraintProvider{
@Override
public Constraint[] defineConstraints(ConstraintFactory constraintFactory) {
return new Constraint[] {
skillUnavailable(constraintFactory),
balancedJobs(constraintFactory)
};
}
...
private Constraint balancedJobs(ConstraintFactory factory) {
return factory.from(Job.class)
.groupBy(Job::getEmployee,count())
.penalize("unbalancedEmployeeUsage", HardSoftScore.ONE_SOFT,count);
}
count()
和countLong()
是ConstraintCollector的方法。如果它已编译但未运行,则可能没有向SolverConfig提供Spring的类加载器
在下一个版本7.32中,我们将发布optaplanner spring boot starter,这将使spring boot集成更加容易(它只是自动注入了一个SolverManager
(或SolverFactory
,但前者是steriods上的后者),而不是
import org.optaplanner.core.api.score.stream.ConstraintCollectors.*;
import org.optaplanner.core.api.score.stream.Joiners.*;
使用静态导入:
前者导入类,后者导入静态方法。您使用的是哪个版本的OptaPlanner?它是否编译?要平衡作业,您必须惩罚
count*count
(因此count²),请参阅文档“公平性”部分。仅使用count
将不会产生任何影响。它不会编译,STS ide会立即将其作为错误发出信号。我正在使用Optaplanner 7.30.0。最终的count²提示银行,还没走到那一步,但帮了我一个头疼的问题:-)添加约束收集器。
成功了,但是,count*count
仍被标记为错误(无法解析为变量
),并且程序运行时不会崩溃;分数不受影响。或者看起来是这样。。。顺便说一下,爪哇11点。哇,谢谢!这帮了大忙:不知道静态导入!修复了第1部分(count()),但count*count仍然是一个问题。我是否遗漏了什么,是否必须在某个地方声明并分配计数?奇怪的是,它会编译,但不会对分数产生影响可能是计划解决方案上的空列表或遗漏的ProblemFactCollectionProperty注释
import static org.optaplanner.core.api.score.stream.ConstraintCollectors.*;
import static org.optaplanner.core.api.score.stream.Joiners.*;