<div dir="ltr">I changed the palnning variable to workorder since engineer woul never (most of them) change from 8h/day, so I transformed WorkOrder into planning entity, i no longer get heap space anymore, but 1 engineer receives every workorder.<div>
<br></div><div>---------------</div><div><div>13:54:12.785 [main] INFO ... - ... (249), score (null), new best score (null), random seed (0).</div><div>13:54:12.850 [main] DEBUG ... - ... spend (318), score (0hard/0soft), initialized planning entity ([WorkOrder-7]).</div>
<div>13:54:12.851 [main] DEBUG ... - ... spend (320), score (0hard/0soft), initialized planning entity ([WorkOrder-9]).</div><div>13:54:12.852 [main] DEBUG ... - ... spend (321), score (0hard/0soft), initialized planning entity ([WorkOrder-8]).</div>
<div>13:54:12.853 [main] DEBUG ... - ... spend (322), score (0hard/0soft), initialized planning entity ([WorkOrder-6]).</div><div>13:54:12.853 [main] INFO ... - ... ended: step total (4), time spend (322), best score (0hard/0soft).</div>
<div>13:54:13.074 [main] DEBUG ... - ... move count (1000/1000) for picked step ([WorkOrder-7] => [Engineer-5]).</div><div>13:54:13.395 [main] DEBUG ... - ... move count (1000/1926) for picked step ([WorkOrder-8] => [Engineer-3]).</div>
<div>13:54:13.783 [main] DEBUG ... - ... move count (1000/3686) for picked step ([WorkOrder-6] => [Engineer-2]).</div><div>13:54:14.263 [main] DEBUG ... - ... move count (1000/7516) for picked step ([WorkOrder-9] => [Engineer-2]).</div>
<div>13:55:05.169 [main] DEBUG ... - ... move count (0/3094018) for picked step ([WorkOrder-6] => [Engineer-5]).</div><div>13:55:05.169 [main] INFO ... - ... Phase localSearch ended: step total (5), time spend (52638), best score (0hard/0soft).</div>
<div>13:55:05.169 [main] INFO ... - ... (52638), best score (0hard/0soft), average calculate count per second (59047).</div><div><br></div><div>Solved distribution with 4 work orders and 5 engineers:</div><div> Work Order 1 : Engineer Aladin</div>
<div> Work Order 2 : Engineer Aladin</div><div> Work Order 3 : Engineer Aladin</div><div> Work Order 4 : Engineer Aladin</div></div><div>------------</div><div><br></div><div style>as you can see, i guess, at the debug the sorting is made correctly, but when displaying it is not being showed right, I also added this to my xml config:</div>
<div style><br></div><div style><div><termination>"</div><div> <maximumSecondsSpend>20</maximumSecondsSpend></div><div></termination></div><div><br></div><div>-------------</div><div><br></div>
<div style>now i'm trying to figure the result why is it not being displayed right.</div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/1/29 André Fróes <span dir="ltr"><<a href="mailto:arfmoraes@gmail.com" target="_blank">arfmoraes@gmail.com</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">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.
</div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><br><div class="gmail_quote">2013/1/29 Geoffrey De Smet <span dir="ltr"><<a href="mailto:ge0ffrey.spam@gmail.com" target="_blank">ge0ffrey.spam@gmail.com</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000">
So loading your dataset costs you 1400 MB already, before doing
anything with Planner?<br>
Starting from that, the space that Planner uses on top of that,
looks relatively normal.<br>
<br>
I had a similar case a couple of months ago on machinereassignment
and posted about in on G+:<br>
<a href="https://plus.google.com/112811208792575157490" target="_blank">https://plus.google.com/112811208792575157490</a> (maybe you find it
in the archive)<br>
My domain model was taking far more space than needed.<br>
After loading the dataset (before calling planner), do a memory heap
profile with VisualVM.<br>
<br>
<br>
<div>Op 29-01-13 13:16, André Fróes schreef:<br>
</div>
<blockquote type="cite">
<div dir="ltr">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:
<div>
<br>
</div>
<div>Before start:</div>
<div><br>
</div>
<div class="gmail_extra"><img src="cid:part1.09090508.07060708@gmail.com" alt="Imagem
inline 1" height="297" width="731"></div>
<div class="gmail_extra"><br>
</div>
<div class="gmail_extra">
After it ends:</div>
<div class="gmail_extra"><br>
</div>
<div class="gmail_extra"><img src="cid:part2.07040205.07070402@gmail.com" alt="Imagem
inline 2" height="294" width="731"></div>
<div class="gmail_extra"><br>
</div>
<div class="gmail_extra">
I'm missing something when constructing my logic or
comparator, even when reducing the number of workorders it
still happening:</div>
<div class="gmail_extra">
<div class="gmail_extra"><span style="white-space:pre-wrap"> </span></div>
<div class="gmail_extra"><span style="white-space:pre-wrap">WorkOrder now (graphic):</span></div>
<div class="gmail_extra"><span style="white-space:pre-wrap"><br>
</span></div>
<div class="gmail_extra">List<WorkOrder> workOrderList =
new ArrayList<WorkOrder>();</div>
<div class="gmail_extra">workOrderList.add(new WorkOrder(6L,
1, 2));</div>
<div class="gmail_extra">workOrderList.add(new WorkOrder(7L,
2, 6));</div>
<div class="gmail_extra">workOrderList.add(new WorkOrder(8L,
3, 3));</div>
<div class="gmail_extra">workOrderList.add(new WorkOrder(9L,
4, 3));</div>
<div class="gmail_extra">workOrderList.add(new WorkOrder(10L,
5, 2));</div>
<div class="gmail_extra">total: 16 hours (last
attribute)</div>
<div class="gmail_extra">
<br>
</div>
<div class="gmail_extra">Engineers now (graphic)</div>
<div class="gmail_extra"><br>
</div>
</div>
<div class="gmail_extra">
<div class="gmail_extra">List<Engineer> engineerList =
new ArrayList<Engineer>();</div>
<div class="gmail_extra">engineerList.add(new Engineer(1L,
"Aladin", 8));</div>
<div class="gmail_extra">engineerList.add(new Engineer(2L,
"Chuck Norris", 8));</div>
<div class="gmail_extra">engineerList.add(new Engineer(3L,
"Rambo", 8));</div>
<div class="gmail_extra">engineerList.add(new Engineer(4L,
"Mr. Miyagi", 8));</div>
<div class="gmail_extra">engineerList.add(new Engineer(5L,
"Monkey D. Ruffy", 8));</div>
<div class="gmail_extra">
total: 40 hour (here will be done the schedule of the 16
hours above)</div>
</div>
<div class="gmail_extra"><br>
</div>
<div class="gmail_extra"><br>
<br>
<div class="gmail_quote">2013/1/29 Geoffrey De Smet <span dir="ltr"><<a href="mailto:ge0ffrey.spam@gmail.com" target="_blank">ge0ffrey.spam@gmail.com</a>></span><br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000"> Run with the VM
argument -Xmx512m<br>
<br>
Use VisualVM to monitor a graph of how the memory
evolves.<br>
Read this too:
<a href="http://blog.athico.com/2012/07/scaling-planner-with-jit-selectors-in.html" target="_blank">http://blog.athico.com/2012/07/scaling-planner-with-jit-selectors-in.html</a><br>
<br>
<div>Op 28-01-13 20:19, André Fróes schreef:<br>
</div>
<blockquote type="cite">
<div>
<div>
<div dir="ltr">i forgot adding the main class:
<div>-----------------</div>
<div><br>
</div>
<div>
<div>public static void main(String[] args) {</div>
<div><span style="white-space:pre-wrap"> </span>String
t = "<?xml version=\"1.0\"
encoding=\"UTF-8\"?>"</div>
<div><span style="white-space:pre-wrap"> </span>+
"<solver>"</div>
<div><span style="white-space:pre-wrap"> </span>+
"
<solutionClass>com.swa.planner.domain.Distributor</solutionClass>"</div>
<div><span style="white-space:pre-wrap"> </span>+
"
<planningEntityClass>com.swa.planner.domain.Engineer</planningEntityClass>"</div>
<div><span style="white-space:pre-wrap"> </span>+
" <scoreDirectorFactory>"</div>
<div><span style="white-space:pre-wrap"> </span>+
"
<scoreDefinitionType>HARD_AND_SOFT</scoreDefinitionType>"</div>
<div><span style="white-space:pre-wrap"> </span>+
"
<scoreDrl>/com/swa/planner/domain/rule/distributorScoreRules.drl</scoreDrl>"</div>
<div><span style="white-space:pre-wrap"> </span>+
" </scoreDirectorFactory>"</div>
<div>//<span style="white-space:pre-wrap"> </span>+
" <termination>"</div>
<div>//<span style="white-space:pre-wrap"> </span>+
"
<maximumSecondsSpend>120</maximumSecondsSpend>"</div>
<div>//<span style="white-space:pre-wrap"> </span>+
" </termination>"</div>
<div><span style="white-space:pre-wrap"> </span>+
" <constructionHeuristic>"</div>
<div><span style="white-space:pre-wrap"> </span>+
"
<constructionHeuristicType>FIRST_FIT_DECREASING</constructionHeuristicType>"</div>
<div><span style="white-space:pre-wrap"> </span>+
"
<constructionHeuristicPickEarlyType>FIRST_LAST_STEP_SCORE_EQUAL_OR_IMPROVING</constructionHeuristicPickEarlyType>"</div>
<div><span style="white-space:pre-wrap"> </span>+
" </constructionHeuristic>"</div>
<div><span style="white-space:pre-wrap"> </span>+
" <localSearch>"</div>
<div><span style="white-space:pre-wrap"> </span>+
" <acceptor>"</div>
<div><span style="white-space:pre-wrap"> </span>+
"
<planningEntityTabuSize>7</planningEntityTabuSize>"</div>
<div><span style="white-space:pre-wrap"> </span>+
" </acceptor>"</div>
<div><span style="white-space:pre-wrap"> </span>+
" <forager>"</div>
<div><span style="white-space:pre-wrap"> </span>+
"
<minimalAcceptedSelection>1000</minimalAcceptedSelection>"</div>
<div><span style="white-space:pre-wrap"> </span>+
" </forager>" + "
</localSearch>" + "</solver>";</div>
<div><br>
</div>
<div><span style="white-space:pre-wrap"> </span>byte
b[] = t.getBytes();</div>
<div><span style="white-space:pre-wrap"> </span>ByteArrayInputStream
bt = new ByteArrayInputStream(b);</div>
<div><span style="white-space:pre-wrap"> </span>SolverFactory
solverFactory = new
XmlSolverFactory().configure(bt);</div>
<div><span style="white-space:pre-wrap"> </span>Solver
solver = solverFactory.buildSolver();</div>
<div><span style="white-space:pre-wrap"> </span></div>
<div><span style="white-space:pre-wrap"> </span>List<Engineer>
engineerList = new
ArrayList<Engineer>();</div>
<div><span style="white-space:pre-wrap"> </span>engineerList.add(new
Engineer(1L, "Aladin", 8));</div>
<div><span style="white-space:pre-wrap"> </span>engineerList.add(new
Engineer(2L, "Chuck Norris", 8));</div>
<div><span style="white-space:pre-wrap"> </span>engineerList.add(new
Engineer(3L, "Rambo", 8));</div>
<div><span style="white-space:pre-wrap"> </span>engineerList.add(new
Engineer(4L, "Mr. Miyagi", 8));</div>
<div><span style="white-space:pre-wrap"> </span>engineerList.add(new
Engineer(5L, "Monkey D. Ruffy", 8));</div>
<div><span style="white-space:pre-wrap"> </span></div>
<div><span style="white-space:pre-wrap"> </span>List<WorkOrder>
workOrderList = new
ArrayList<WorkOrder>();</div>
<div><span style="white-space:pre-wrap"> </span>workOrderList.add(new
WorkOrder(6L, 1, 2));</div>
<div><span style="white-space:pre-wrap"> </span>workOrderList.add(new
WorkOrder(7L, 1, 6));</div>
<div><span style="white-space:pre-wrap"> </span>workOrderList.add(new
WorkOrder(8L, 1, 3));</div>
<div><span style="white-space:pre-wrap"> </span>workOrderList.add(new
WorkOrder(9L, 1, 3));</div>
<div><span style="white-space:pre-wrap"> </span>workOrderList.add(new
WorkOrder(10L, 1, 2));</div>
<div><span style="white-space:pre-wrap"> </span>workOrderList.add(new
WorkOrder(11L, 1, 8));</div>
<div><span style="white-space:pre-wrap"> </span>workOrderList.add(new
WorkOrder(12L, 1, 8));</div>
<div><span style="white-space:pre-wrap"> </span>workOrderList.add(new
WorkOrder(13L, 1, 2));</div>
<div><span style="white-space:pre-wrap"> </span>workOrderList.add(new
WorkOrder(14L, 1, 2));</div>
<div><span style="white-space:pre-wrap"> </span>workOrderList.add(new
WorkOrder(15L, 1, 4));</div>
<div><br>
</div>
<div><span style="white-space:pre-wrap"> </span>Distributor
distributor = new Distributor();</div>
<div><span style="white-space:pre-wrap"> </span>distributor.setId(0L);</div>
<div><span style="white-space:pre-wrap"> </span>distributor.setEngineerList(engineerList);</div>
<div><span style="white-space:pre-wrap"> </span>distributor.setWorkOrderList(workOrderList);</div>
<div><br>
</div>
<div><span style="white-space:pre-wrap"> </span>solver.setPlanningProblem(distributor);</div>
<div><span style="white-space:pre-wrap"> </span>solver.solve();</div>
<div><span style="white-space:pre-wrap"> </span>Distributor
solvedWorkOrderDistribution = (Distributor)
solver.getBestSolution();</div>
<div><br>
</div>
<div><span style="white-space:pre-wrap"> </span>System.out.printf("\nSolved
distribution with %d work orders and %d
engineers:\n%s",</div>
<div><span style="white-space:pre-wrap"> </span>workOrderList.size(),
engineerList.size(),</div>
<div><span style="white-space:pre-wrap"> </span>toDisplayString(solvedWorkOrderDistribution));</div>
<div><span style="white-space:pre-wrap"> </span>}</div>
<div><br>
</div>
<div><span style="white-space:pre-wrap"> </span>public
static String toDisplayString(Distributor
distributor) {</div>
<div><span style="white-space:pre-wrap"> </span>StringBuilder
displayString = new StringBuilder();</div>
<div><span style="white-space:pre-wrap"> </span>for
(Engineer engineer :
distributor.getEngineerList()) {</div>
<div><span style="white-space:pre-wrap"> </span>WorkOrder
order = engineer.getWorkOrder();</div>
<div><span style="white-space:pre-wrap"> </span>displayString.append("
").append(engineer.getLabel()).append(" :
")</div>
<div><span style="white-space:pre-wrap"> </span>.append(order
== null ? null : order.getLabel())</div>
<div><span style="white-space:pre-wrap"> </span>.append("\n");</div>
<div><span style="white-space:pre-wrap"> </span>}</div>
<div><span style="white-space:pre-wrap"> </span>return
displayString.toString();</div>
<div><span style="white-space:pre-wrap"> </span>}</div>
</div>
<div><br>
</div>
</div>
<div class="gmail_extra"><br>
<br>
<div class="gmail_quote"> 2013/1/28 André Fróes
<span dir="ltr"><<a href="mailto:arfmoraes@gmail.com" target="_blank">arfmoraes@gmail.com</a>></span><br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div dir="ltr">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:
<div> <br>
</div>
<div>-------------------</div>
<div>
<div>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).</div>
<div>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]).</div>
<div>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]).</div>
<div>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]).</div>
<div>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]).</div>
<div>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]).</div>
<div>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).</div>
<div>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]).</div>
<div>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]).</div>
<div>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]).</div>
<div>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]).</div>
<div>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]).</div>
<div>Exception in thread "main"
java.lang.OutOfMemoryError: Java heap
space</div>
<div><span style="white-space:pre-wrap">
</span>at
java.util.Arrays.copyOf(Unknown
Source)</div>
<div><span style="white-space:pre-wrap">
</span>at
java.util.Arrays.copyOf(Unknown
Source)</div>
<div><span style="white-space:pre-wrap">
</span>at
java.util.ArrayList.grow(Unknown
Source)</div>
<div><span style="white-space:pre-wrap">
</span>at
java.util.ArrayList.ensureCapacityInternal(Unknown
Source)</div>
<div> <span style="white-space:pre-wrap"> </span>at
java.util.ArrayList.add(Unknown
Source)</div>
<div><span style="white-space:pre-wrap">
</span>at
org.drools.planner.core.localsearch.decider.forager.AcceptedForager.addToMaxScoreUnacceptedList(AcceptedForager.java:143)</div>
<div><span style="white-space:pre-wrap">
</span>at
org.drools.planner.core.localsearch.decider.forager.AcceptedForager.addMove(AcceptedForager.java:101)</div>
<div><span style="white-space:pre-wrap">
</span>at
org.drools.planner.core.localsearch.decider.DefaultDecider.processMove(DefaultDecider.java:164)</div>
<div><span style="white-space:pre-wrap">
</span>at
org.drools.planner.core.localsearch.decider.DefaultDecider.doMove(DefaultDecider.java:144)</div>
<div><span style="white-space:pre-wrap">
</span>at
org.drools.planner.core.localsearch.decider.DefaultDecider.decideNextStep(DefaultDecider.java:116)</div>
<div><span style="white-space:pre-wrap">
</span>at
org.drools.planner.core.localsearch.DefaultLocalSearchSolverPhase.solve(DefaultLocalSearchSolverPhase.java:62)</div>
<div><span style="white-space:pre-wrap">
</span>at
org.drools.planner.core.solver.DefaultSolver.runSolverPhases(DefaultSolver.java:190)</div>
<div><span style="white-space:pre-wrap">
</span>at
org.drools.planner.core.solver.DefaultSolver.solve(DefaultSolver.java:155)</div>
<div><span style="white-space:pre-wrap">
</span>at
com.swa.planner.domain.WorkOrderTest.main(WorkOrderTest.java:66)</div>
</div>
<div>------------------------</div>
<div><br>
</div>
<div>it does distribute some engineers to
work orders, but after a while, it just
show the error.</div>
<div><br>
</div>
<div>The drl is very simple:</div>
<div><br>
</div>
<div>--------------------------</div>
<div>
<div>import
org.drools.planner.core.score.buildin.hardandsoft.HardAndSoftScoreHolder;</div>
<div>import
org.drools.planner.core.score.constraint.IntConstraintOccurrence;</div>
<div>import
org.drools.planner.core.score.constraint.ConstraintType;</div>
<div><br>
</div>
<div>import
com.swa.planner.domain.Distributor;</div>
<div>import
com.swa.planner.domain.Engineer;</div>
<div>import
com.swa.planner.domain.WorkOrder;</div>
<div><br>
</div>
<div>global HardAndSoftScoreHolder
scoreHolder;</div>
<div><br>
</div>
<div>rule "requiredTimeToFinish"</div>
<div><span style="white-space:pre-wrap">
</span>when</div>
<div><span style="white-space:pre-wrap">
</span>$workOrder : WorkOrder($time :
time)</div>
<div><span style="white-space:pre-wrap">
</span>$requiredTimeTotal :
Number(intValue > $time) from
accumulate(</div>
<div><span style="white-space:pre-wrap">
</span>Engineer (</div>
<div><span style="white-space:pre-wrap">
</span>workOrder == $workOrder, </div>
<div><span style="white-space:pre-wrap">
</span>$requiredTime : worktime),</div>
<div><span style="white-space:pre-wrap">
</span>sum($requiredTime)</div>
<div><span style="white-space:pre-wrap">
</span>)</div>
<div><span style="white-space:pre-wrap">
</span>then</div>
<div><span style="white-space:pre-wrap">
</span>insertLogical(new
IntConstraintOccurrence("requiredTimeToFinish",
ConstraintType.NEGATIVE_HARD,</div>
<div><span style="white-space:pre-wrap">
</span>$requiredTimeTotal.intValue() -
$time,</div>
<div><span style="white-space:pre-wrap">
</span>$workOrder));</div>
<div>end</div>
<div><br>
</div>
<div>rule "hardConstraintBroken"</div>
<div><span style="white-space:pre-wrap">
</span>salience -1</div>
<div><span style="white-space:pre-wrap">
</span>when</div>
<div><span style="white-space:pre-wrap">
</span>$hardTotal : Number() from
accumulate(</div>
<div><span style="white-space:pre-wrap">
</span>IntConstraintOccurrence(constraintType
== ConstraintType.NEGATIVE_HARD,
$weight : weight)</div>
<div><span style="white-space:pre-wrap">
</span>sum($weight)</div>
<div><span style="white-space:pre-wrap">
</span>)</div>
<div><span style="white-space:pre-wrap">
</span>then</div>
<div><span style="white-space:pre-wrap">
</span>scoreHolder.setHardConstraintsBroken($hardTotal.intValue());</div>
<div>end</div>
</div>
<div>--------------------------<br>
</div>
<div><br>
</div>
<div>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.</div>
<div><br>
</div>
<div>here's the implementation, also kept
as simple as possible (and probably
wrong):</div>
<div><br>
</div>
<div>------------</div>
<div>
<div>public class
WorkOrderStrengthComparator implements
Comparator<WorkOrder> {</div>
<div><br>
</div>
<div><span style="white-space:pre-wrap">
</span>public int compare(WorkOrder a,
WorkOrder b) {</div>
<div><span style="white-space:pre-wrap">
</span>return new
CompareToBuilder().append(a.getTime(),
b.getTime())</div>
<div><span style="white-space:pre-wrap">
</span>.append(b.getId(), a.getId())</div>
<div><span style="white-space:pre-wrap">
</span>.toComparison();</div>
<div><span style="white-space:pre-wrap">
</span>}</div>
<div><br>
</div>
<div>}</div>
</div>
<div>------------</div>
<div>
<div>public class
EngineerDifficultyComparator
implements Comparator<Engineer>
{</div>
<div><br>
</div>
<div><span style="white-space:pre-wrap">
</span>public int compare(Engineer a,
Engineer b) {</div>
<div><span style="white-space:pre-wrap">
</span>return new
CompareToBuilder().append(a.getWorktime(),
b.getWorktime())</div>
<div><span style="white-space:pre-wrap">
</span>.append(a.getId(), b.getId())</div>
<div> <span style="white-space:pre-wrap"> </span>.toComparison();</div>
<div><span style="white-space:pre-wrap">
</span>}</div>
<div><br>
</div>
<div>}</div>
</div>
<div>------------</div>
<div><br>
</div>
<div> i'm missing something at these
comparators ain't I?</div>
</div>
</blockquote>
</div>
<br>
</div>
<br>
<fieldset></fieldset>
<br>
</div>
</div>
<pre>_______________________________________________
rules-users mailing list
<a href="mailto:rules-users@lists.jboss.org" target="_blank">rules-users@lists.jboss.org</a>
<a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a>
</pre>
</blockquote>
<br>
</div>
<br>
_______________________________________________<br>
rules-users mailing list<br>
<a href="mailto:rules-users@lists.jboss.org" target="_blank">rules-users@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a><br>
<br>
</blockquote>
</div>
<br>
</div>
</div>
<br>
<fieldset></fieldset>
<br>
<pre>_______________________________________________
rules-users mailing list
<a href="mailto:rules-users@lists.jboss.org" target="_blank">rules-users@lists.jboss.org</a>
<a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a>
</pre>
</blockquote>
<br>
</div>
<br>_______________________________________________<br>
rules-users mailing list<br>
<a href="mailto:rules-users@lists.jboss.org" target="_blank">rules-users@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a><br>
<br></blockquote></div><br></div>
</div></div></blockquote></div><br></div>