В настоящее время я реализую свой второй проект в OptaPlanner. Я извлекая следующее сообщение об ошибке:OptaPlanner: java.lang.IllegalArgumentException
Exception in thread "main" java.lang.IllegalArgumentException:
A planning entity is an instance of a entitySubclass (class com.company.Assignment)
that is not configured as a planning entity.
If that class (Assignment) (or superclass thereof) is not a entityClass
([class com.company.Car]), check your Solution implementation's annotated methods.
If it is, check your solver configuration.
Мой SolverConfig.xml это:
<?xml version="1.0" encoding="UTF-8"?>
<solver>
<solutionClass>com.company.Planning</solutionClass>
<entityClass>com.company.Car</entityClass>
<scoreDirectorFactory>
<scoreDefinitionType>HARD_SOFT</scoreDefinitionType>
<easyScoreCalculatorClass>com.company.PlanningEasyScoreCalculator</easyScoreCalculatorClass>
<initializingScoreTrend>ONLY_DOWN</initializingScoreTrend>
</scoreDirectorFactory>
<constructionHeuristic>
<constructionHeuristicType>FIRST_FIT</constructionHeuristicType>
</constructionHeuristic>
<localSearch>
<termination>
<secondsSpentLimit>10</secondsSpentLimit>
</termination>
<changeMoveSelector>
<entitySelector>
<entityClass>com.company.Car</entityClass>
</entitySelector>
<valueSelector>
<variableName>assignment</variableName>
</valueSelector>
</changeMoveSelector>
<acceptor>
<entityTabuSize>7</entityTabuSize>
</acceptor>
<forager>
<acceptedCountLimit>1000</acceptedCountLimit>
</forager>
</localSearch>
</solver>
Класс "Автомобиль" помечается "@PlanningEntity". Класс «Планирование» аннотируется с помощью «@PlanningSolution». Класс «Назначение» - мой проблемный факт. Решение «@PlanningEntityCollectionProperty» находится на получателе, который запускает список «Автомобиль».
Класс "Main" выглядит следующим образом:
public class Main {
public static final String SOLVER_CONFIG_XML = "com/company/PlanningSolverConfig.xml";
public static ScoreDirector scoreDirector;
public static void main(String[] args) {
// Read data from XLS file and initialize the problem
ReadDataFromXls Reader = new ReadDataFromXls();
Planning planningSituation = new Planning(Reader.ReadAssignments(),Reader.ReadCars());
// Build the solver
Solver solver = SolverFactory.createFromXmlResource(SOLVER_CONFIG_XML).buildSolver();
// Solve the problem and get the best solution
solver.solve(planningSituation);
Planning solvedPlanning = (Planning) solver.getBestSolution();
// Display the result
System.out.println("TODO");
}
}
Сообщение об ошибке с 6.3.0.CR1
в основном то же + ошибка относительно SLF4J
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Exception in thread "main" java.lang.IllegalArgumentException: A planning entity is an instance of an entitySubclass (class com.company.Assignment) that is not configured as a planning entity.
If that class (Assignment) (or superclass thereof) is not a entityClass ([class com.company.Car]), check your Solution implementation's annotated methods.
If it is, check your solver configuration.
EDIT: Мой первый проект в OptaPlanner был " От одного до многих "(проект имеет разработчика, у разработчика может быть несколько проектов). Этот проект является проблемой «один к одному» (автомобиль необходим для перехода к заданию, задание переводится автомобилем).
EDIT: Я изменил модель своей задачи планирования. Теперь класс «Назначение» является моим «объектом планирования», а класс «Автомобиль» является «фактом планирования». Сообщение об ошибке остается неизменным, кроме того, что переключаются места «Автомобиль» и «Назначение» :)
Если я правильно помню, это сообщение об ошибке стало более понятным в '6.3.0.CR1', которое было выпущено несколько дней назад. Попробуйте эту версию и сообщите об этом сообщение об ошибке. Это должно быть неправильная конфигурация вашей модели домена. –
В основном то же сообщение об ошибке (вставлено в сообщение выше). –