First of all, question is related to timetabling problem. I have requirement that says that after a scheduling step all scheduled lessons have to meet hard constraints, no matter how long algorithm worked. And a question is, how can I achieve this? My solver configuration looks like this
<?xml version="1.0" encoding="UTF-8"?>
<solver>
<solutionClass>com.krakfin.praca.mgr.cp.algorytm.solver.TimetableSolution</solutionClass>
<entityClass>com.krakfin.praca.mgr.cp.algorytm.domain.Lesson</entityClass>
<scoreDirectorFactory>
<scoreDefinitionType>HARD_MEDIUM_SOFT</scoreDefinitionType>
<scoreDrl>com/krakfin/praca/mgr/cp/algorytm/solver/algorytmScoreRules.drl</scoreDrl>
<initializingScoreTrend>ONLY_DOWN</initializingScoreTrend>
</scoreDirectorFactory>
<environmentMode>FAST_ASSERT</environmentMode>
<constructionHeuristic>
<constructionHeuristicType>FIRST_FIT_DECREASING</constructionHeuristicType>
</constructionHeuristic>
<localSearch>
<unionMoveSelector>
<changeMoveSelector>
<valueSelector>
<variableName>dzienNrLekcji</variableName>
</valueSelector>
</changeMoveSelector>
<changeMoveSelector>
<valueSelector>
<variableName>sala</variableName>
</valueSelector>
</changeMoveSelector>
</unionMoveSelector>
<termination>
<!--Default value if not set-->
<secondsSpentLimit>180</secondsSpentLimit>
<bestScoreLimit>0hard/0medium/0soft</bestScoreLimit>
</termination>
<acceptor>
<moveTabuSize>7</moveTabuSize>
</acceptor>
<forager>
<acceptedCountLimit>100</acceptedCountLimit>
</forager>
</localSearch>
</solver>
but for example, if I run algorithm for 1 minute result looks like (-6hard/-24medium/365soft). Is there any way to make solver not schedule as many lessons but meet all hard constraints?