I didn't find about it there. But I still have to find the fail in my project, i put 1 workorder and 1 engineer and i'm still getting heapspace. Since i'm taking base on cloudcomputer example, this is looking very odd, when running the 400/1200 computer/process, it did it without any problem. Checking here the VisualVM, i noticed also that it is kept to, relatively, low usage of memory, that's why i'm lost here, even if this did use the base memory of planner init (don't really know if this is right, is just a guess that planner requires a memory to init), to maintain the planner running in my problematics shouldn't take that amount of memory if compared to the example.


2013/1/29 Geoffrey De Smet <ge0ffrey.spam@gmail.com>
So loading your dataset costs you 1400 MB already, before doing anything with Planner?
Starting from that, the space that Planner uses on top of that, looks relatively normal.

I had a similar case a couple of months ago on machinereassignment and posted about in on G+:
  https://plus.google.com/112811208792575157490 (maybe you find it in the archive)
My domain model was taking far more space than needed.
After loading the dataset (before calling planner), do a memory heap profile with VisualVM.


Op 29-01-13 13:16, André Fróes schreef:
i've set the xmx  even to 1024m and still heap space. Enabling the VisualVM, I couldn't get my main method to be displayed there, it just doesn't show up there at visualvm local, but I can see the graphic increasing significantly. Here's how it is before and after i run the main method:

Before start:

Imagem
            inline 1

After it ends:

Imagem
            inline 2

I'm missing something when constructing my logic or comparator, even when reducing the number of workorders it still happening:
WorkOrder now (graphic):

List<WorkOrder> workOrderList = new ArrayList<WorkOrder>();
workOrderList.add(new WorkOrder(6L, 1, 2));
workOrderList.add(new WorkOrder(7L, 2, 6));
workOrderList.add(new WorkOrder(8L, 3, 3));
workOrderList.add(new WorkOrder(9L, 4, 3));
workOrderList.add(new WorkOrder(10L, 5, 2));
total: 16 hours (last attribute)

Engineers now (graphic)

List<Engineer> engineerList = new ArrayList<Engineer>();
engineerList.add(new Engineer(1L, "Aladin", 8));
engineerList.add(new Engineer(2L, "Chuck Norris", 8));
engineerList.add(new Engineer(3L, "Rambo", 8));
engineerList.add(new Engineer(4L, "Mr. Miyagi", 8));
engineerList.add(new Engineer(5L, "Monkey D. Ruffy", 8));
total: 40 hour (here will be done the schedule of the 16 hours above)



2013/1/29 Geoffrey De Smet <ge0ffrey.spam@gmail.com>
Run with the VM argument -Xmx512m

Use VisualVM to monitor a graph of how the memory evolves.
Read this too: http://blog.athico.com/2012/07/scaling-planner-with-jit-selectors-in.html

Op 28-01-13 20:19, André Fróes schreef:
i forgot adding the main class:
-----------------

public static void main(String[] args) {
String t = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+ "<solver>"
+ "  <solutionClass>com.swa.planner.domain.Distributor</solutionClass>"
+ "  <planningEntityClass>com.swa.planner.domain.Engineer</planningEntityClass>"
+ "  <scoreDirectorFactory>"
+ "    <scoreDefinitionType>HARD_AND_SOFT</scoreDefinitionType>"
+ "    <scoreDrl>/com/swa/planner/domain/rule/distributorScoreRules.drl</scoreDrl>"
+ "  </scoreDirectorFactory>"
// + "  <termination>"
// + "    <maximumSecondsSpend>120</maximumSecondsSpend>"
// + "  </termination>"
+ "  <constructionHeuristic>"
+ "    <constructionHeuristicType>FIRST_FIT_DECREASING</constructionHeuristicType>"
+ "    <constructionHeuristicPickEarlyType>FIRST_LAST_STEP_SCORE_EQUAL_OR_IMPROVING</constructionHeuristicPickEarlyType>"
+ "  </constructionHeuristic>"
+ "  <localSearch>"
+ "    <acceptor>"
+ "      <planningEntityTabuSize>7</planningEntityTabuSize>"
+ "    </acceptor>"
+ "    <forager>"
+ "      <minimalAcceptedSelection>1000</minimalAcceptedSelection>"
+ "    </forager>" + "  </localSearch>" + "</solver>";

byte b[] = t.getBytes();
ByteArrayInputStream bt = new ByteArrayInputStream(b);
SolverFactory solverFactory = new XmlSolverFactory().configure(bt);
Solver solver = solverFactory.buildSolver();
List<Engineer> engineerList = new ArrayList<Engineer>();
engineerList.add(new Engineer(1L, "Aladin", 8));
engineerList.add(new Engineer(2L, "Chuck Norris", 8));
engineerList.add(new Engineer(3L, "Rambo", 8));
engineerList.add(new Engineer(4L, "Mr. Miyagi", 8));
engineerList.add(new Engineer(5L, "Monkey D. Ruffy", 8));
List<WorkOrder> workOrderList = new ArrayList<WorkOrder>();
workOrderList.add(new WorkOrder(6L, 1, 2));
workOrderList.add(new WorkOrder(7L, 1, 6));
workOrderList.add(new WorkOrder(8L, 1, 3));
workOrderList.add(new WorkOrder(9L, 1, 3));
workOrderList.add(new WorkOrder(10L, 1, 2));
workOrderList.add(new WorkOrder(11L, 1, 8));
workOrderList.add(new WorkOrder(12L, 1, 8));
workOrderList.add(new WorkOrder(13L, 1, 2));
workOrderList.add(new WorkOrder(14L, 1, 2));
workOrderList.add(new WorkOrder(15L, 1, 4));

Distributor distributor = new Distributor();
distributor.setId(0L);
distributor.setEngineerList(engineerList);
distributor.setWorkOrderList(workOrderList);

solver.setPlanningProblem(distributor);
solver.solve();
Distributor solvedWorkOrderDistribution = (Distributor) solver.getBestSolution();

System.out.printf("\nSolved distribution with %d work orders and %d engineers:\n%s",
workOrderList.size(), engineerList.size(),
toDisplayString(solvedWorkOrderDistribution));
}

public static String toDisplayString(Distributor distributor) {
StringBuilder displayString = new StringBuilder();
for (Engineer engineer : distributor.getEngineerList()) {
WorkOrder order = engineer.getWorkOrder();
displayString.append("  ").append(engineer.getLabel()).append(" : ")
.append(order == null ? null : order.getLabel())
.append("\n");
}
return displayString.toString();
}



2013/1/28 André Fróes <arfmoraes@gmail.com>
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?



_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users




_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users