[rules-users] Heap space

André Fróes arfmoraes at gmail.com
Mon Jan 28 14:14:08 EST 2013


Hello! After trying cloudComputer example i'm trying to implement my own
schedule distributor, but now i'm facing heap space error, but i see that
it does distribute some work orders. Here's the console error:

-------------------
17:05:02.776 [main] INFO  o.d.p.core.solver.DefaultSolver - Solving
started: time spend (255), score (null), new best score (null), random seed
(0).
17:05:02.821 [main] DEBUG o.d.p.c.c.g.DefaultGreedyFitSolverPhase -
Step index (0), time spend (309), score (0hard/0soft), initialized planning
entity ([Engineer-5]).
17:05:02.822 [main] DEBUG o.d.p.c.c.g.DefaultGreedyFitSolverPhase -
Step index (1), time spend (310), score (0hard/0soft), initialized planning
entity ([Engineer-4]).
17:05:02.824 [main] DEBUG o.d.p.c.c.g.DefaultGreedyFitSolverPhase -
Step index (2), time spend (311), score (0hard/0soft), initialized planning
entity ([Engineer-3]).
17:05:02.824 [main] DEBUG o.d.p.c.c.g.DefaultGreedyFitSolverPhase -
Step index (3), time spend (312), score (0hard/0soft), initialized planning
entity ([Engineer-2]).
17:05:02.825 [main] DEBUG o.d.p.c.c.g.DefaultGreedyFitSolverPhase -
Step index (4), time spend (313), score (0hard/0soft), initialized planning
entity ([Engineer-1]).
17:05:02.825 [main] INFO  o.d.p.c.c.g.DefaultGreedyFitSolverPhase - Phase
constructionHeuristic ended: step total (5), time spend (313), best score
(0hard/0soft).
17:05:03.020 [main] DEBUG o.d.p.c.l.DefaultLocalSearchSolverPhase -
Step index (0), time spend (508), score (0hard/0soft),     best score
(0hard/0soft), accepted/selected move count (1000/1000) for picked step
([Engineer-3] => [WorkOrder-12]).
17:05:03.315 [main] DEBUG o.d.p.c.l.DefaultLocalSearchSolverPhase -
Step index (1), time spend (803), score (0hard/0soft),     best score
(0hard/0soft), accepted/selected move count (1000/1703) for picked step
([Engineer-4] => [WorkOrder-8]).
17:05:03.736 [main] DEBUG o.d.p.c.l.DefaultLocalSearchSolverPhase -
Step index (2), time spend (1224), score (0hard/0soft),     best score
(0hard/0soft), accepted/selected move count (1000/2657) for picked step
([Engineer-1] => [WorkOrder-8]).
17:05:03.951 [main] DEBUG o.d.p.c.l.DefaultLocalSearchSolverPhase -
Step index (3), time spend (1439), score (0hard/0soft),     best score
(0hard/0soft), accepted/selected move count (1000/4315) for picked step
([Engineer-5] => [WorkOrder-9]).
17:05:04.251 [main] DEBUG o.d.p.c.l.DefaultLocalSearchSolverPhase -
Step index (4), time spend (1739), score (0hard/0soft),     best score
(0hard/0soft), accepted/selected move count (1000/9309) for picked step
([Engineer-2] => [WorkOrder-9]).
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Unknown Source)
at java.util.Arrays.copyOf(Unknown Source)
at java.util.ArrayList.grow(Unknown Source)
at java.util.ArrayList.ensureCapacityInternal(Unknown Source)
at java.util.ArrayList.add(Unknown Source)
at
org.drools.planner.core.localsearch.decider.forager.AcceptedForager.addToMaxScoreUnacceptedList(AcceptedForager.java:143)
at
org.drools.planner.core.localsearch.decider.forager.AcceptedForager.addMove(AcceptedForager.java:101)
at
org.drools.planner.core.localsearch.decider.DefaultDecider.processMove(DefaultDecider.java:164)
at
org.drools.planner.core.localsearch.decider.DefaultDecider.doMove(DefaultDecider.java:144)
at
org.drools.planner.core.localsearch.decider.DefaultDecider.decideNextStep(DefaultDecider.java:116)
at
org.drools.planner.core.localsearch.DefaultLocalSearchSolverPhase.solve(DefaultLocalSearchSolverPhase.java:62)
at
org.drools.planner.core.solver.DefaultSolver.runSolverPhases(DefaultSolver.java:190)
at
org.drools.planner.core.solver.DefaultSolver.solve(DefaultSolver.java:155)
at com.swa.planner.domain.WorkOrderTest.main(WorkOrderTest.java:66)
------------------------

it does distribute some engineers to work orders, but after a while, it
just show the error.

The drl is very simple:

--------------------------
import
org.drools.planner.core.score.buildin.hardandsoft.HardAndSoftScoreHolder;
import org.drools.planner.core.score.constraint.IntConstraintOccurrence;
import org.drools.planner.core.score.constraint.ConstraintType;

import com.swa.planner.domain.Distributor;
import com.swa.planner.domain.Engineer;
import com.swa.planner.domain.WorkOrder;

global HardAndSoftScoreHolder scoreHolder;

rule "requiredTimeToFinish"
when
$workOrder : WorkOrder($time : time)
$requiredTimeTotal : Number(intValue > $time) from accumulate(
Engineer (
workOrder == $workOrder,
$requiredTime : worktime),
sum($requiredTime)
)
then
insertLogical(new IntConstraintOccurrence("requiredTimeToFinish",
ConstraintType.NEGATIVE_HARD,
$requiredTimeTotal.intValue() - $time,
$workOrder));
end

rule "hardConstraintBroken"
salience -1
when
$hardTotal : Number() from accumulate(
IntConstraintOccurrence(constraintType == ConstraintType.NEGATIVE_HARD,
$weight : weight)
sum($weight)
)
then
scoreHolder.setHardConstraintsBroken($hardTotal.intValue());
end
--------------------------

i guess no error there, i believe that i'm missing when doing the strenght
and difficulty comparators dince i didn't really understood the
getMultiplicand thing of CloudComputer.

here's the implementation, also kept as simple as possible (and probably
wrong):

------------
public class WorkOrderStrengthComparator implements Comparator<WorkOrder> {

public int compare(WorkOrder a, WorkOrder b) {
return new CompareToBuilder().append(a.getTime(), b.getTime())
.append(b.getId(), a.getId())
.toComparison();
}

}
------------
public class EngineerDifficultyComparator implements Comparator<Engineer> {

public int compare(Engineer a, Engineer b) {
return new CompareToBuilder().append(a.getWorktime(), b.getWorktime())
.append(a.getId(), b.getId())
.toComparison();
}

}
------------

i'm missing something at these comparators ain't I?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20130128/a2bade29/attachment.html 


More information about the rules-users mailing list