Search in sources :

Example 6 with TaskAssigningSolution

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();
}
Also used : TerminationConfig(org.optaplanner.core.config.solver.termination.TerminationConfig) TaskAssigningSolution(org.kie.kogito.taskassigning.core.model.TaskAssigningSolution) LocalSearchPhaseConfig(org.optaplanner.core.config.localsearch.LocalSearchPhaseConfig) ConstructionHeuristicPhaseConfig(org.optaplanner.core.config.constructionheuristic.ConstructionHeuristicPhaseConfig) SolverConfig(org.optaplanner.core.config.solver.SolverConfig)

Example 7 with TaskAssigningSolution

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;
}
Also used : Group(org.kie.kogito.taskassigning.core.model.Group) User(org.kie.kogito.taskassigning.core.model.User) TaskAssigningSolution(org.kie.kogito.taskassigning.core.model.TaskAssigningSolution) BigInteger(java.math.BigInteger) TaskAssignment(org.kie.kogito.taskassigning.core.model.TaskAssignment)

Example 8 with TaskAssigningSolution

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);
}
Also used : TaskAssigningSolution(org.kie.kogito.taskassigning.core.model.TaskAssigningSolution) File(java.io.File)

Example 9 with TaskAssigningSolution

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);
}
Also used : TaskAssigningSolution(org.kie.kogito.taskassigning.core.model.TaskAssigningSolution)

Example 10 with TaskAssigningSolution

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);
}
Also used : TaskAssigningSolution(org.kie.kogito.taskassigning.core.model.TaskAssigningSolution) ArrayList(java.util.ArrayList) BeforeEach(org.junit.jupiter.api.BeforeEach)

Aggregations

TaskAssigningSolution (org.kie.kogito.taskassigning.core.model.TaskAssigningSolution)65 Test (org.junit.jupiter.api.Test)30 User (org.kie.kogito.taskassigning.core.model.User)24 TaskAssignment (org.kie.kogito.taskassigning.core.model.TaskAssignment)23 ArrayList (java.util.ArrayList)15 AssignTaskProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.AssignTaskProblemFactChange)12 TaskUtil.fromTaskData (org.kie.kogito.taskassigning.service.util.TaskUtil.fromTaskData)12 AddTaskProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.AddTaskProblemFactChange)11 TestUtil.mockTaskData (org.kie.kogito.taskassigning.service.TestUtil.mockTaskData)11 ProblemFactChange (org.optaplanner.core.api.solver.ProblemFactChange)11 RemoveTaskProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.RemoveTaskProblemFactChange)10 AddUserProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.AddUserProblemFactChange)9 DisableUserProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.DisableUserProblemFactChange)7 ReleaseTaskProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.ReleaseTaskProblemFactChange)7 RemoveUserProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.RemoveUserProblemFactChange)7 UserPropertyChangeProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.UserPropertyChangeProblemFactChange)7 List (java.util.List)5 BeforeEach (org.junit.jupiter.api.BeforeEach)5 Task (org.kie.kogito.taskassigning.core.model.Task)5 UserDataEvent (org.kie.kogito.taskassigning.service.event.UserDataEvent)5