<div dir="ltr">this is the full drl file:<div><br></div><div>------------</div><div><br></div><div><div>package com.swa.planner.domain.rule;</div><div><br></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.CloudBalance;</div>
<div>import com.swa.planner.domain.CloudComputer;</div><div>import com.swa.planner.domain.CloudProcess;</div><div><br></div><div>global HardAndSoftScoreHolder scoreHolder;</div><div><br></div><div>rule "requiredCpuPowerTotal"</div>
<div><span class="" style="white-space:pre">        </span>when</div><div><span class="" style="white-space:pre">                </span>$computer : CloudComputer($cpuPower : cpuPower)</div><div><span class="" style="white-space:pre">                </span>$requiredCpuPowerTotal : Number(intValue > $cpuPower) from accumulate(</div>
<div><span class="" style="white-space:pre">                        </span>CloudProcess (</div><div><span class="" style="white-space:pre">                                </span>computer == $computer, </div><div><span class="" style="white-space:pre">                                </span>$requiredCpuPower : requiredCpuPower),</div>
<div><span class="" style="white-space:pre">                        </span>sum($requiredCpuPower)</div><div><span class="" style="white-space:pre">                </span>)</div><div><span class="" style="white-space:pre">        </span>then</div><div><span class="" style="white-space:pre">                </span>insertLogical(new IntConstraintOccurrence("requiredCpuPowerTotal", ConstraintType.NEGATIVE_HARD,</div>
<div><span class="" style="white-space:pre">                                </span>$requiredCpuPowerTotal.intValue() - $cpuPower,</div><div><span class="" style="white-space:pre">                                </span>$computer));</div><div>end</div><div><br></div><div>rule "requiredMemoryTotal"</div>
<div><span class="" style="white-space:pre">        </span>when</div><div><span class="" style="white-space:pre">                </span>$computer : CloudComputer($memory : memory)</div><div><span class="" style="white-space:pre">                </span>$requiredMemoryTotal : Number(intValue > $memory) from accumulate(</div>
<div><span class="" style="white-space:pre">                                </span>CloudProcess ( </div><div><span class="" style="white-space:pre">                                                </span>computer == $computer, </div><div><span class="" style="white-space:pre">                                                </span>$requiredMemory : requiredMemory),</div>
<div><span class="" style="white-space:pre">                                        </span>sum($requiredMemory)</div><div><span class="" style="white-space:pre">                                </span>)</div><div><span class="" style="white-space:pre">        </span>then</div><div><span class="" style="white-space:pre">                </span>insertLogical(new IntConstraintOccurrence("requiredMemoryTotal", ConstraintType.NEGATIVE_HARD,</div>
<div><span class="" style="white-space:pre">                                </span>$requiredMemoryTotal.intValue() - $memory, </div><div><span class="" style="white-space:pre">                                </span>$computer));</div><div>end</div><div><br></div><div>rule "requiredNetworkBandwidth"</div>
<div><span class="" style="white-space:pre">        </span>when</div><div><span class="" style="white-space:pre">                </span>$computer : CloudComputer($networkBandwidth : networkBandwidth)</div><div><span class="" style="white-space:pre">                </span>$requiredNetworkBandwidthTotal : Number(intValue > $networkBandwidth) from accumulate(</div>
<div><span class="" style="white-space:pre">                                </span>CloudProcess (</div><div><span class="" style="white-space:pre">                                                        </span>computer == $computer,</div><div><span class="" style="white-space:pre">                                                        </span>$requiredNetworkBandwidth : requiredNetworkBandwidth)</div>
<div><span class="" style="white-space:pre">                                                </span>sum($requiredNetworkBandwidth)</div><div><span class="" style="white-space:pre">                                </span>)</div><div><span class="" style="white-space:pre">        </span>then</div><div>
<span class="" style="white-space:pre">                </span>insertLogical(new IntConstraintOccurrence("requiredNetworkBandwidth", ConstraintType.NEGATIVE_HARD, </div><div><span class="" style="white-space:pre">                                </span>$requiredNetworkBandwidthTotal.intValue() - $networkBandwidth, </div>
<div><span class="" style="white-space:pre">                                </span>$computer));</div><div>end</div><div><br></div><div>rule "hardConstraintBroken"</div><div><span class="" style="white-space:pre">                </span>salience -1</div><div>
<span class="" style="white-space:pre">        </span>when</div><div><span class="" style="white-space:pre">                </span>$hardTotal : Number() from accumulate(</div><div><span class="" style="white-space:pre">                        </span>IntConstraintOccurrence(constraintType == ConstraintType.NEGATIVE_HARD, $weight : weight)</div>
<div><span class="" style="white-space:pre">                        </span>sum($weight)</div><div><span class="" style="white-space:pre">                        </span>)</div><div><span class="" style="white-space:pre">        </span>then</div><div><span class="" style="white-space:pre">                </span>scoreHolder.setHardConstraintsBroken($hardTotal.intValue());</div>
<div>end</div><div><br></div><div><br></div><div>// Soft constraint</div><div><br></div><div>rule "computerCost"</div><div><span class="" style="white-space:pre">        </span>when</div><div><span class="" style="white-space:pre">                </span>$computer : CloudComputer($cost : cost)</div>
<div><span class="" style="white-space:pre">                </span>exists CloudProcess(computer == $computer)</div><div><span class="" style="white-space:pre">        </span>then</div><div><span class="" style="white-space:pre">                </span>insertLogical(new IntConstraintOccurrence("computerCost", ConstraintType.NEGATIVE_SOFT,</div>
<div><span class="" style="white-space:pre">                        </span>$cost,</div><div><span class="" style="white-space:pre">                        </span>$computer));</div><div>end</div><div><br></div><div>rule "softConstraintBroken"</div><div><span class="" style="white-space:pre">                </span>salience -1</div>
<div><span class="" style="white-space:pre">        </span>when</div><div><span class="" style="white-space:pre">                </span>$softTotal : Number() from accumulate(</div><div><span class="" style="white-space:pre">                                </span>IntConstraintOccurrence(ConstraintType == ConstraintType.NEGATIVE_SOFT, $weight : weight)</div>
<div><span class="" style="white-space:pre">                                </span>sum($weight)</div><div><span class="" style="white-space:pre">                                </span>)</div><div><span class="" style="white-space:pre">                </span>then</div><div><span class="" style="white-space:pre">                        </span>scoreHolder.setHardConstraintsBroken($softTotal.intValue());</div>
<div>end</div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/1/28 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">
com.swa.planner.domain.rule.Rule_requiredCpuPowerTotal_0a10acbeca924206a3becab080617987.defaultConsequence(Rule_requiredCpuPowerTotal_0a10acbeca924206a3becab080617987.java:14)
<span style="white-space:pre-wrap"><br>
What's in the then side of Rule_requiredCpuPowerTotal ?<br>
<br>
</span>
<div>Op 28-01-13 16:00, André Fróes schreef:<br>
</div><div><div class="h5">
<blockquote type="cite">
<div dir="ltr">Even adding that, the error still
<div><br>
</div>
<div>--------------</div>
<div>
<div>12:57:41.050 [main] INFO o.d.p.core.solver.DefaultSolver
- Solving started: time spend (152), score (null), new best
score (null), random seed (0).</div>
<div>Exception in thread "main" Exception executing
consequence for rule "requiredCpuPowerTotal" in
com.swa.planner.domain.rule: java.lang.NullPointerException</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.runtime.rule.impl.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:39)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:1297)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:1221)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1456)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:710)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:674)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.planner.core.score.director.drools.DroolsScoreDirector.calculateScore(DroolsScoreDirector.java:177)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.planner.core.solver.scope.DefaultSolverScope.calculateScore(DefaultSolverScope.java:92)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.planner.core.phase.AbstractSolverPhaseScope.calculateScore(AbstractSolverPhaseScope.java:120)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.planner.core.constructionheuristic.greedyFit.decider.DefaultGreedyDecider.processMove(DefaultGreedyDecider.java:136)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.planner.core.constructionheuristic.greedyFit.decider.DefaultGreedyDecider.doMove(DefaultGreedyDecider.java:110)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.planner.core.constructionheuristic.greedyFit.decider.DefaultGreedyDecider.decideNextStep(DefaultGreedyDecider.java:82)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.planner.core.constructionheuristic.greedyFit.DefaultGreedyFitSolverPhase.solve(DefaultGreedyFitSolverPhase.java:65)</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.CloudTest.main(CloudTest.java:67)</div>
<div>Caused by: java.lang.NullPointerException</div>
<div><span style="white-space:pre-wrap"> </span>at
java.lang.String.<init>(Unknown Source)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.mvel2.util.ErrorUtil.rewriteIfNeeded(ErrorUtil.java:12)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.mvel2.compiler.ExpressionCompiler._compile(ExpressionCompiler.java:302)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.mvel2.compiler.ExpressionCompiler.compile(ExpressionCompiler.java:62)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.mvel2.MVEL.compileExpression(MVEL.java:810)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.base.mvel.MVELCompilationUnit.compile(MVELCompilationUnit.java:435)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.base.mvel.MVELCompilationUnit.getCompiledExpression(MVELCompilationUnit.java:238)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.rule.constraint.MvelConstraint.createMvelConditionEvaluator(MvelConstraint.java:206)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.rule.constraint.MvelConstraint.evaluate(MvelConstraint.java:190)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.rule.constraint.MvelConstraint.isAllowed(MvelConstraint.java:157)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:137)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateAssertObject(CompositeObjectSinkAdapter.java:497)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:382)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:235)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.reteoo.EntryPointNode.assertObject(EntryPointNode.java:240)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:350)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.common.SimpleBeliefSystem.insert(SimpleBeliefSystem.java:38)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.common.TruthMaintenanceSystem.addLogicalDependency(TruthMaintenanceSystem.java:204)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.common.TruthMaintenanceSystem.addLogicalDependency(TruthMaintenanceSystem.java:176)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:231)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:903)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.base.DefaultKnowledgeHelper.insertLogical(DefaultKnowledgeHelper.java:245)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.base.DefaultKnowledgeHelper.insertLogical(DefaultKnowledgeHelper.java:210)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.base.DefaultKnowledgeHelper.insertLogical(DefaultKnowledgeHelper.java:205)</div>
<div><span style="white-space:pre-wrap"> </span>at
com.swa.planner.domain.rule.Rule_requiredCpuPowerTotal_0a10acbeca924206a3becab080617987.defaultConsequence(Rule_requiredCpuPowerTotal_0a10acbeca924206a3becab080617987.java:14)</div>
<div><span style="white-space:pre-wrap"> </span>at
com.swa.planner.domain.rule.Rule_requiredCpuPowerTotal_0a10acbeca924206a3becab080617987DefaultConsequenceInvokerGenerated.evaluate(Unknown
Source)</div>
<div><span style="white-space:pre-wrap"> </span>at
com.swa.planner.domain.rule.Rule_requiredCpuPowerTotal_0a10acbeca924206a3becab080617987DefaultConsequenceInvoker.evaluate(Unknown
Source)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:1287)</div>
<div><span style="white-space:pre-wrap"> </span>... 14
more</div>
</div>
<div><br>
</div>
<div>--------------</div>
<div><br>
</div>
<div>I added to cloudprocess computer variable:</div>
<div>--------------</div>
<div>
<div>package com.swa.planner.domain;</div>
<div><br>
</div>
<div>import
org.drools.planner.api.domain.entity.PlanningEntity;</div>
<div>import
org.drools.planner.api.domain.variable.PlanningVariable;</div>
<div>import org.drools.planner.api.domain.variable.ValueRange;</div>
<div>import
org.drools.planner.api.domain.variable.ValueRangeType;</div>
<div>import
org.drools.planner.examples.common.domain.AbstractPersistable;</div>
<div><br>
</div>
<div>@PlanningEntity(difficultyComparatorClass =
CloudProcessDifficultyComparator.class)</div>
<div>public class CloudProcess extends AbstractPersistable{</div>
<div><br>
</div>
<div><span style="white-space:pre-wrap"> </span>private
int requiredCpuPower;</div>
<div><span style="white-space:pre-wrap"> </span>private
int requiredMemory;</div>
<div><span style="white-space:pre-wrap"> </span>private
int requiredNetworkBandwidth;</div>
<div><br>
</div>
<div><span style="white-space:pre-wrap"> </span>private
CloudComputer computer;</div>
<div><br>
</div>
<div><span style="white-space:pre-wrap"> </span>public
CloudProcess(long id, int requiredCpuPower, int
requiredMemory,</div>
<div><span style="white-space:pre-wrap"> </span>int
requiredNetworkBandwidth) {</div>
<div><span style="white-space:pre-wrap"> </span>super();</div>
<div><span style="white-space:pre-wrap"> </span>setId(id);</div>
<div><span style="white-space:pre-wrap"> </span>this.requiredCpuPower
= requiredCpuPower;</div>
<div><span style="white-space:pre-wrap"> </span>this.requiredMemory
= requiredMemory;</div>
<div><span style="white-space:pre-wrap"> </span>this.requiredNetworkBandwidth
= requiredNetworkBandwidth;</div>
<div><span style="white-space:pre-wrap"> </span>}</div>
<div><span style="white-space:pre-wrap"> </span></div>
<div><span style="white-space:pre-wrap"> </span>public
CloudProcess() {<span style="white-space:pre-wrap"> </span>}</div>
<div><br>
</div>
<div><span style="white-space:pre-wrap"> </span>public
int getRequiredCpuPower() {</div>
<div><span style="white-space:pre-wrap"> </span>return
requiredCpuPower;</div>
<div><span style="white-space:pre-wrap"> </span>}</div>
<div><br>
</div>
<div><span style="white-space:pre-wrap"> </span>public
void setRequiredCpuPower(int requiredCpuPower) {</div>
<div><span style="white-space:pre-wrap"> </span>this.requiredCpuPower
= requiredCpuPower;</div>
<div><span style="white-space:pre-wrap"> </span>}</div>
<div><br>
</div>
<div><span style="white-space:pre-wrap"> </span>public
int getRequiredMemory() {</div>
<div><span style="white-space:pre-wrap"> </span>return
requiredMemory;</div>
<div><span style="white-space:pre-wrap"> </span>}</div>
<div><br>
</div>
<div><span style="white-space:pre-wrap"> </span>public
void setRequiredMemory(int requiredMemory) {</div>
<div><span style="white-space:pre-wrap"> </span>this.requiredMemory
= requiredMemory;</div>
<div><span style="white-space:pre-wrap"> </span>}</div>
<div><br>
</div>
<div><span style="white-space:pre-wrap"> </span>public
int getRequiredNetworkBandwidth() {</div>
<div><span style="white-space:pre-wrap"> </span>return
requiredNetworkBandwidth;</div>
<div><span style="white-space:pre-wrap"> </span>}</div>
<div><br>
</div>
<div><span style="white-space:pre-wrap"> </span>public
void setRequiredNetworkBandwidth(int
requiredNetworkBandwidth) {</div>
<div><span style="white-space:pre-wrap"> </span>this.requiredNetworkBandwidth
= requiredNetworkBandwidth;</div>
<div><span style="white-space:pre-wrap"> </span>}</div>
<div><br>
</div>
<div><span style="white-space:pre-wrap"> </span>public
String getLabel() {</div>
<div> return "Process " + id;</div>
<div> }</div>
<div><span style="white-space:pre-wrap"> </span></div>
<div><span style="white-space:pre-wrap"> </span>@PlanningVariable(strengthComparatorClass
= CloudComputerStrengthComparator.class)</div>
<div><span style="white-space:pre-wrap"> </span>@ValueRange(type
= ValueRangeType.FROM_SOLUTION_PROPERTY, solutionProperty =
"computerList")</div>
<div><span style="white-space:pre-wrap"> </span>public
CloudComputer getComputer() {</div>
<div><span style="white-space:pre-wrap"> </span>if
(computer == null) { return null; }</div>
<div><span style="white-space:pre-wrap"> </span>return
computer;</div>
<div><span style="white-space:pre-wrap"> </span>}</div>
<div><br>
</div>
<div><span style="white-space:pre-wrap"> </span>public
void setComputer(CloudComputer computer) {</div>
<div><span style="white-space:pre-wrap"> </span>this.computer
= computer;</div>
<div><span style="white-space:pre-wrap"> </span>}</div>
<div><span style="white-space:pre-wrap"> </span></div>
<div><span style="white-space:pre-wrap"> </span>public
CloudProcess clone(){</div>
<div><span style="white-space:pre-wrap"> </span>CloudProcess
clone = new CloudProcess();</div>
<div><span style="white-space:pre-wrap"> </span><a href="http://clone.id" target="_blank">clone.id</a>
= id;</div>
<div><span style="white-space:pre-wrap"> </span>clone.requiredCpuPower
= requiredCpuPower;</div>
<div><span style="white-space:pre-wrap"> </span>clone.requiredMemory
= requiredMemory;</div>
<div><span style="white-space:pre-wrap"> </span>clone.requiredNetworkBandwidth
= requiredNetworkBandwidth;</div>
<div><span style="white-space:pre-wrap"> </span>clone.computer
= computer;</div>
<div><span style="white-space:pre-wrap"> </span>return
clone;</div>
<div><span style="white-space:pre-wrap"> </span>}</div>
<div><span style="white-space:pre-wrap"> </span></div>
<div><span style="white-space:pre-wrap"> </span>public
int getRequiredMultiplicand() {</div>
<div> return requiredCpuPower * requiredMemory *
requiredNetworkBandwidth;</div>
<div> }</div>
<div>}</div>
<div>--------------<br>
</div>
<div><br>
</div>
<div>this is what i'm doing to run the example:</div>
<div><br>
</div>
<div>-------------</div>
<div>
<div>package com.swa.planner.domain;</div>
<div><br>
</div>
<div>import java.io.ByteArrayInputStream;</div>
<div>import java.util.ArrayList;</div>
<div>import java.util.List;</div>
<div><br>
</div>
<div>import org.drools.planner.config.SolverFactory;</div>
<div>import org.drools.planner.config.XmlSolverFactory;</div>
<div>import org.drools.planner.core.Solver;</div>
<div><br>
</div>
<div>public class CloudTest {</div>
<div><span style="white-space:pre-wrap"> </span>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.CloudBalance</solutionClass>"</div>
<div><span style="white-space:pre-wrap"> </span>+ "
<planningEntityClass>com.swa.planner.domain.CloudProcess</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/cloudBalancingScoreRules.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>" </div>
<div><span style="white-space:pre-wrap"> </span>+ "
</localSearch>" </div>
<div><span style="white-space:pre-wrap"> </span>+
"</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><br>
</div>
<div><span style="white-space:pre-wrap"> </span>List<CloudComputer>
computerList = new ArrayList<CloudComputer>();</div>
<div><span style="white-space:pre-wrap"> </span>computerList.add(new
CloudComputer(1L, "Computador 1", 3, 2, 2, 110));</div>
<div><span style="white-space:pre-wrap"> </span>computerList.add(new
CloudComputer(2L, "Computador 2", 12, 8, 3, 400));</div>
<div><span style="white-space:pre-wrap"> </span>computerList.add(new
CloudComputer(3L, "Computador 3", 6, 6, 4, 300));</div>
<div><span style="white-space:pre-wrap"> </span>computerList.add(new
CloudComputer(4L, "Computador 4", 18, 12, 8, 1000));</div>
<div><span style="white-space:pre-wrap"> </span>computerList.add(new
CloudComputer(5L, "Computador 5", 8, 4, 6, 800));</div>
<div><span style="white-space:pre-wrap"> </span>computerList.add(new
CloudComputer(6L, "Computador 6", 9, 7, 9, 1000));</div>
<div><br>
</div>
<div><span style="white-space:pre-wrap"> </span>List<CloudProcess>
processList = new ArrayList<CloudProcess>();</div>
<div><span style="white-space:pre-wrap"> </span>processList.add(new
CloudProcess(11L, 2, 2, 2));</div>
<div><span style="white-space:pre-wrap"> </span>processList.add(new
CloudProcess(12L, 4, 4, 2));</div>
<div><span style="white-space:pre-wrap"> </span>processList.add(new
CloudProcess(13L, 1, 1, 3));</div>
<div><span style="white-space:pre-wrap"> </span>processList.add(new
CloudProcess(14L, 7, 3, 5));</div>
<div><span style="white-space:pre-wrap"> </span>processList.add(new
CloudProcess(15L, 5, 8, 3));</div>
<div><span style="white-space:pre-wrap"> </span>processList.add(new
CloudProcess(16L, 9, 2, 2));</div>
<div><span style="white-space:pre-wrap"> </span>processList.add(new
CloudProcess(17L, 6, 5, 6));</div>
<div><br>
</div>
<div><span style="white-space:pre-wrap"> </span>CloudBalance
cloudBalance = new CloudBalance();</div>
<div><span style="white-space:pre-wrap"> </span>cloudBalance.setId(0L);</div>
<div><span style="white-space:pre-wrap"> </span>cloudBalance.setComputerList(computerList);</div>
<div><span style="white-space:pre-wrap"> </span>cloudBalance.setProcessList(processList);</div>
<div><br>
</div>
<div><span style="white-space:pre-wrap"> </span>//
Solve the problem</div>
<div><span style="white-space:pre-wrap"> </span>solver.setPlanningProblem(cloudBalance);</div>
<div><span style="white-space:pre-wrap"> </span>solver.solve();</div>
<div><span style="white-space:pre-wrap"> </span>CloudBalance
solvedCloudBalance = (CloudBalance)
solver.getBestSolution();</div>
<div><br>
</div>
<div><span style="white-space:pre-wrap"> </span>//
Display the result</div>
<div><span style="white-space:pre-wrap"> </span>System.out.println("\nSolved
cloudBalance with 5 computers and 6 processes:\n"</div>
<div><span style="white-space:pre-wrap"> </span>+
toDisplayString(solvedCloudBalance));</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(CloudBalance cloudBalance) {</div>
<div><span style="white-space:pre-wrap"> </span>StringBuilder
displayString = new StringBuilder();</div>
<div><span style="white-space:pre-wrap"> </span>for
(CloudProcess process : cloudBalance.getProcessList()) {</div>
<div><span style="white-space:pre-wrap"> </span>CloudComputer
computer = process.getComputer();</div>
<div><span style="white-space:pre-wrap"> </span>displayString.append("
").append(process.getLabel())</div>
<div><span style="white-space:pre-wrap"> </span>.append("
-> ")</div>
<div><span style="white-space:pre-wrap"> </span>.append(computer
== null ? null : computer.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>
<div><br>
</div>
</div>
<div>-------------</div>
</div>
</div>
<div class="gmail_extra"><br>
<br>
<div class="gmail_quote">2013/1/28 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"> The value of a
variable of an entity starts out as null during
construction heuristics, even if it's not nullable.<br>
<br>
The usual trick is to add null safe getters:<br>
<br>
public class BedDesignation {<br>
<br>
// bed is planning variable<br>
...<br>
public Departement getDepartment() {<br>
if (bed == null) { return null;}<br>
return bed.getRoom().getDepartement()<br>
}<br>
}<br>
<br>
<br>
<div>Op 28-01-13 15:13, André Fróes schreef:<br>
</div>
<blockquote type="cite">
<div dir="ltr">I've implemented it to see how it would
work, now I got another error:
<div><br>
</div>
<div>---------------</div>
<div><br>
</div>
<div>
<div>12:10:41.357 [main] INFO
o.d.p.core.solver.DefaultSolver - Solving
started: time spend (302), score (null), new best
score (null), random seed (0).</div>
<div>Exception in thread "main" Exception executing
consequence for rule "requiredCpuPowerTotal" in
com.swa.planner.domain.rule:
java.lang.NullPointerException</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.runtime.rule.impl.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:39)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:1297)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:1221)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1456)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:710)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:674)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.planner.core.score.director.drools.DroolsScoreDirector.calculateScore(DroolsScoreDirector.java:177)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.planner.core.solver.scope.DefaultSolverScope.calculateScore(DefaultSolverScope.java:92)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.planner.core.phase.AbstractSolverPhaseScope.calculateScore(AbstractSolverPhaseScope.java:120)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.planner.core.constructionheuristic.greedyFit.decider.DefaultGreedyDecider.processMove(DefaultGreedyDecider.java:136)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.planner.core.constructionheuristic.greedyFit.decider.DefaultGreedyDecider.doMove(DefaultGreedyDecider.java:110)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.planner.core.constructionheuristic.greedyFit.decider.DefaultGreedyDecider.decideNextStep(DefaultGreedyDecider.java:82)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.planner.core.constructionheuristic.greedyFit.DefaultGreedyFitSolverPhase.solve(DefaultGreedyFitSolverPhase.java:65)</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.CloudTest.main(CloudTest.java:65)</div>
<div>Caused by: java.lang.NullPointerException</div>
<div><span style="white-space:pre-wrap"> </span>at
java.lang.String.<init>(Unknown Source)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.mvel2.util.ErrorUtil.rewriteIfNeeded(ErrorUtil.java:12)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.mvel2.compiler.ExpressionCompiler._compile(ExpressionCompiler.java:302)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.mvel2.compiler.ExpressionCompiler.compile(ExpressionCompiler.java:62)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.mvel2.MVEL.compileExpression(MVEL.java:810)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.base.mvel.MVELCompilationUnit.compile(MVELCompilationUnit.java:435)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.base.mvel.MVELCompilationUnit.getCompiledExpression(MVELCompilationUnit.java:238)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.rule.constraint.MvelConstraint.createMvelConditionEvaluator(MvelConstraint.java:206)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.rule.constraint.MvelConstraint.evaluate(MvelConstraint.java:190)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.rule.constraint.MvelConstraint.isAllowed(MvelConstraint.java:157)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:137)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateAssertObject(CompositeObjectSinkAdapter.java:497)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:382)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:235)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.reteoo.EntryPointNode.assertObject(EntryPointNode.java:240)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:350)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.common.SimpleBeliefSystem.insert(SimpleBeliefSystem.java:38)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.common.TruthMaintenanceSystem.addLogicalDependency(TruthMaintenanceSystem.java:204)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.common.TruthMaintenanceSystem.addLogicalDependency(TruthMaintenanceSystem.java:176)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:231)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:903)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.base.DefaultKnowledgeHelper.insertLogical(DefaultKnowledgeHelper.java:245)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.base.DefaultKnowledgeHelper.insertLogical(DefaultKnowledgeHelper.java:210)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.base.DefaultKnowledgeHelper.insertLogical(DefaultKnowledgeHelper.java:205)</div>
<div><span style="white-space:pre-wrap"> </span>at
com.swa.planner.domain.rule.Rule_requiredCpuPowerTotal_d2d9e4332c804bacac7861ac867eb4bd.defaultConsequence(Rule_requiredCpuPowerTotal_d2d9e4332c804bacac7861ac867eb4bd.java:14)</div>
<div><span style="white-space:pre-wrap"> </span>at
com.swa.planner.domain.rule.Rule_requiredCpuPowerTotal_d2d9e4332c804bacac7861ac867eb4bdDefaultConsequenceInvokerGenerated.evaluate(Unknown
Source)</div>
<div><span style="white-space:pre-wrap"> </span>at
com.swa.planner.domain.rule.Rule_requiredCpuPowerTotal_d2d9e4332c804bacac7861ac867eb4bdDefaultConsequenceInvoker.evaluate(Unknown
Source)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:1287)</div>
<div><span style="white-space:pre-wrap"> </span>...
14 more</div>
</div>
<div><br>
</div>
<div>-----------------</div>
<div><br>
</div>
<div>this one i have no clue </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:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">
<div>Hello there, i'm getting this error:</div>
<div><br>
</div>
<div>-------------------</div>
<div>
<div> 11:26:50.394 [main] INFO
o.d.p.core.solver.DefaultSolver - Solving
started: time spend (187), score (null), new
best score (null), random seed (0).</div>
<div>Exception in thread "main"
java.lang.IllegalStateException: The
selectionOrder (DECREASING_DIFFICULTY) can
not be used on a PlanningEntity
(com.swa.planner.domain.CloudProcess) that
has no support for difficulty sorting. Check
the @PlanningEntity annotation.</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.planner.core.heuristic.selector.entity.PlanningEntitySelector.validate(PlanningEntitySelector.java:53)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.planner.core.heuristic.selector.entity.PlanningEntitySelector.phaseStarted(PlanningEntitySelector.java:45)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.planner.core.constructionheuristic.greedyFit.selector.GreedyPlanningEntitySelector.phaseStarted(GreedyPlanningEntitySelector.java:41)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.planner.core.constructionheuristic.greedyFit.DefaultGreedyFitSolverPhase.phaseStarted(DefaultGreedyFitSolverPhase.java:111)</div>
<div><span style="white-space:pre-wrap"> </span>at
org.drools.planner.core.constructionheuristic.greedyFit.DefaultGreedyFitSolverPhase.solve(DefaultGreedyFitSolverPhase.java:57)</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.CloudTest.main(CloudTest.java:51)</div>
<div>-------------------------</div>
<div><br>
</div>
<div>I know why it is happening though (at
least i think so), but will I have to
implement the comparator to every planner I
do or is there any other way to make it
work?</div>
<div><br>
</div>
<div>I'm reproducing the example from the
guide, when it passes the drools rules it
gives that message. I didn't implement
CloudComputerStrengthComparator
neither CloudProcessDifficultyComparator,
will I have to implement those so this
example works?</div>
</div>
</div>
</blockquote>
</div>
<br>
</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>
<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></div></div>
<br>_______________________________________________<br>
rules-users mailing list<br>
<a href="mailto:rules-users@lists.jboss.org">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>