use of org.kie.kogito.taskassigning.core.model.TaskAssigningSolution in project kogito-apps by kiegroup.
the class AbstractTaskAssigningCoreTest method createNonDaemonSolver.
protected Solver<TaskAssigningSolution> createNonDaemonSolver(int stepCountLimit) {
SolverConfig config = createBaseConfig();
ConstructionHeuristicPhaseConfig constructionHeuristicPhaseConfig = new ConstructionHeuristicPhaseConfig();
constructionHeuristicPhaseConfig.setConstructionHeuristicType(ConstructionHeuristicType.FIRST_FIT);
LocalSearchPhaseConfig phaseConfig = new LocalSearchPhaseConfig();
phaseConfig.setTerminationConfig(new TerminationConfig().withStepCountLimit(stepCountLimit));
config.setPhaseConfigList(Arrays.asList(constructionHeuristicPhaseConfig, phaseConfig));
SolverFactory<TaskAssigningSolution> solverFactory = SolverFactory.create(config);
return solverFactory.buildSolver();
}
use of org.kie.kogito.taskassigning.core.model.TaskAssigningSolution in project kogito-apps by kiegroup.
the class TaskAssigningGenerator method createTaskAssigningSolution.
private TaskAssigningSolution createTaskAssigningSolution(String fileName, int taskListSize, int groupListSize, int userListSize) {
List<Group> groupList = createGroupList(groupListSize);
List<User> userList = createUserList(userListSize, groupList);
List<TaskAssignment> taskAssignmentList = createTaskAssignmentList(taskListSize, userList, groupList);
TaskAssigningSolution solution = new TaskAssigningSolution("0", userList, taskAssignmentList);
BigInteger totalFacts = AbstractSolutionImporter.factorial(taskListSize + userListSize - 1);
BigInteger fixedFacts = AbstractSolutionImporter.factorial(userListSize - 1);
BigInteger possibleSolutionSize = (totalFacts == null || fixedFacts == null) ? null : totalFacts.divide(fixedFacts);
LOGGER.info("TaskAssigningSolution {} has {} tasks, {} groups, and {} users with a search space of {}.", fileName, taskListSize, groupListSize, userListSize, AbstractSolutionImporter.getFlooredPossibleSolutionSize(possibleSolutionSize));
return solution;
}
use of org.kie.kogito.taskassigning.core.model.TaskAssigningSolution in project kogito-apps by kiegroup.
the class TaskAssigningGenerator method writeTaskAssigningSolution.
private void writeTaskAssigningSolution(int taskListSize, int userListSize) {
String fileName = determineFileName(taskListSize, userListSize);
File outputFile = new File(outputDir, fileName + ".xml");
TaskAssigningSolution solution = createTaskAssigningSolution(fileName, taskListSize, USER_GROUP_SIZE, userListSize);
solutionFileIO.write(solution, outputFile);
LOGGER.info("Saved: {}", outputFile);
}
use of org.kie.kogito.taskassigning.core.model.TaskAssigningSolution in project kogito-apps by kiegroup.
the class SolverTest method testSolverStartAndSolution.
/**
* Tests that solver for the tasks assigning problem definition can be properly started, a solution can be produced,
* and that some minimal constrains are met by de solution.
*/
private void testSolverStartAndSolution(int stepCountLimit, String solutionResource) {
Solver<TaskAssigningSolution> solver = createNonDaemonSolver(stepCountLimit);
TaskAssigningSolution solution = readTaskAssigningSolution(solutionResource);
solution.getUserList().add(PLANNING_USER);
TaskAssigningSolution result = solver.solve(solution);
if (!result.getScore().isFeasible()) {
fail(String.format("With current problem definition and stepCountLimit of %s it's expected " + "that a feasible solution has been produced.", stepCountLimit));
}
assertConstraints(result);
}
use of org.kie.kogito.taskassigning.core.model.TaskAssigningSolution in project kogito-apps by kiegroup.
the class AddTaskProblemFactChangeTest method setUp.
@BeforeEach
void setUp() {
solution = new TaskAssigningSolution("1", new ArrayList<>(), new ArrayList<>());
lenient().when(scoreDirector.getWorkingSolution()).thenReturn(solution);
change = new AddTaskProblemFactChange(taskAssignment);
}
Aggregations