<br>    Geoffrey,<br><br>    Can you check again please (revision #32046)? Let me know if you find further problems and thanks for testing that.<br><br>    Edson<br><br><div class="gmail_quote">2010/3/10 Geoffrey De Smet <span dir="ltr">&lt;<a href="mailto:ge0ffrey.spam@gmail.com">ge0ffrey.spam@gmail.com</a>&gt;</span><br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">Edson,<br>
<br>
NQueens now works (thanks),<br>
but Examination [1] and SmartTravelingTournament still fail.<br>
<br>
To run Examination, just create a java application config with these<br>
settings:<br>
<div class="im">Main class:<br>
org.drools.planner.examples.examination.app.ExaminationBenchmarkApp<br>
</div>VM parameters: -Xms256m -Xmx512m -server<br>
Program parameters: short<br>
Working directory: ...drools/drools-planner/drools-planner-examples<br>
<br>
<br>
<br>
<br>
[1] 2010-03-10 19:35:51,685 [main] INFO  Initialization time spend (196)<br>
<div class="im">for score (0hard/-8154soft). Updating best solution and best score.<br>
</div><div class="im">Exception in thread &quot;main&quot; java.lang.NullPointerException<br>
</div>        at org.drools.reteoo.AccumulateNode.getFirstMatch(AccumulateNode.java:913)<br>
        at org.drools.reteoo.AccumulateNode.splitList(AccumulateNode.java:861)<br>
        at<br>
org.drools.reteoo.AccumulateNode.evaluateResultConstraints(AccumulateNode.java:581)<br>
        at<br>
org.drools.reteoo.AccumulateNode.removePreviousMatchesForRightTuple(AccumulateNode.java:845)<br>
        at<br>
org.drools.reteoo.AccumulateNode.modifyRightTuple(AccumulateNode.java:432)<br>
<div class="im">        at org.drools.reteoo.BetaNode.modifyObject(BetaNode.java:317)<br>
</div><div class="im">        at<br>
org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateModifyObject(CompositeObjectSinkAdapter.java:444)<br>
        at<br>
org.drools.reteoo.CompositeObjectSinkAdapter.propagateModifyObject(CompositeObjectSinkAdapter.java:412)<br>
        at org.drools.reteoo.ObjectTypeNode.modifyObject(ObjectTypeNode.java:262)<br>
        at org.drools.reteoo.EntryPointNode.modifyObject(EntryPointNode.java:174)<br>
        at<br>
org.drools.common.AbstractWorkingMemory.update(AbstractWorkingMemory.java:1392)<br>
        at<br>
org.drools.common.AbstractWorkingMemory.update(AbstractWorkingMemory.java:1288)<br>
        at<br>
</div>org.drools.planner.examples.examination.solver.move.ExaminationMoveHelper.moveRoom(ExaminationMoveHelper.java:24)<br>
        at<br>
org.drools.planner.examples.examination.solver.move.RoomChangeMove.doMove(RoomChangeMove.java:37)<br>
<div class="im">        at<br>
org.drools.planner.core.localsearch.decider.DefaultDecider.doMove(DefaultDecider.java:119)<br>
        at<br>
org.drools.planner.core.localsearch.decider.DefaultDecider.decideNextStep(DefaultDecider.java:95)<br>
        at<br>
org.drools.planner.core.localsearch.DefaultLocalSearchSolver.solveImplementation(DefaultLocalSearchSolver.java:105)<br>
        at org.drools.planner.core.AbstractSolver.solve(AbstractSolver.java:41)<br>
        at<br>
</div><div class="im">org.drools.planner.benchmark.SolverBenchmarkSuite.benchmark(SolverBenchmarkSuite.java:196)<br>
        at<br>
org.drools.planner.benchmark.XmlSolverBenchmarker.benchmark(XmlSolverBenchmarker.java:72)<br>
        at<br>
org.drools.planner.examples.common.app.CommonBenchmarkApp.process(CommonBenchmarkApp.java:25)<br>
        at<br>
</div><div class="im">org.drools.planner.examples.examination.app.ExaminationBenchmarkApp.main(ExaminationBenchmarkApp.java:27)<br>
</div><div class="im">        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br>
        at<br>
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)<br>
        at<br>
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br>
        at java.lang.reflect.Method.invoke(Method.java:597)<br>
        at com.intellij.rt.execution.application.AppMain.main(AppMain.java:110)<br>
<br>
<br>
</div>[2] 2010-03-10 19:43:47,038 [main] INFO  Initialization time spend (26)<br>
for score (0hard/-93463soft). Updating best solution and best score.<br>
<div><div></div><div class="h5">Exception in thread &quot;main&quot; java.lang.NullPointerException<br>
        at<br>
org.drools.reteoo.SingleLeftTupleSinkAdapter.propagateModifyChildLeftTuple(SingleLeftTupleSinkAdapter.java:198)<br>
        at org.drools.reteoo.JoinNode.modifyLeftTuple(JoinNode.java:304)<br>
        at org.drools.reteoo.BetaNode.modifyLeftTuple(BetaNode.java:336)<br>
        at<br>
org.drools.reteoo.CompositeLeftTupleSinkAdapter.doPropagateModifyObject(CompositeLeftTupleSinkAdapter.java:204)<br>
        at<br>
org.drools.reteoo.CompositeLeftTupleSinkAdapter.propagateModifyObject(CompositeLeftTupleSinkAdapter.java:219)<br>
        at<br>
org.drools.reteoo.LeftInputAdapterNode.modifyObject(LeftInputAdapterNode.java:154)<br>
        at<br>
org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateModifyObject(CompositeObjectSinkAdapter.java:444)<br>
        at<br>
org.drools.reteoo.CompositeObjectSinkAdapter.propagateModifyObject(CompositeObjectSinkAdapter.java:412)<br>
        at org.drools.reteoo.ObjectTypeNode.modifyObject(ObjectTypeNode.java:262)<br>
        at org.drools.reteoo.EntryPointNode.modifyObject(EntryPointNode.java:174)<br>
        at<br>
org.drools.common.AbstractWorkingMemory.update(AbstractWorkingMemory.java:1392)<br>
        at<br>
org.drools.common.AbstractWorkingMemory.update(AbstractWorkingMemory.java:1288)<br>
        at<br>
org.drools.planner.examples.travelingtournament.solver.smart.move.MultipleMatchListRotateMove.rotateList(MultipleMatchListRotateMove.java:59)<br>
        at<br>
org.drools.planner.examples.travelingtournament.solver.smart.move.MultipleMatchListRotateMove.doMove(MultipleMatchListRotateMove.java:44)<br>
        at<br>
org.drools.planner.core.localsearch.decider.DefaultDecider.doMove(DefaultDecider.java:117)<br>
        at<br>
org.drools.planner.core.localsearch.decider.DefaultDecider.decideNextStep(DefaultDecider.java:95)<br>
        at<br>
org.drools.planner.core.localsearch.DefaultLocalSearchSolver.solveImplementation(DefaultLocalSearchSolver.java:105)<br>
        at org.drools.planner.core.AbstractSolver.solve(AbstractSolver.java:41)<br>
        at<br>
org.drools.planner.benchmark.SolverBenchmarkSuite.benchmark(SolverBenchmarkSuite.java:196)<br>
        at<br>
org.drools.planner.benchmark.XmlSolverBenchmarker.benchmark(XmlSolverBenchmarker.java:72)<br>
        at<br>
org.drools.planner.examples.common.app.CommonBenchmarkApp.process(CommonBenchmarkApp.java:25)<br>
        at<br>
org.drools.planner.examples.travelingtournament.app.smart.SmartTravelingTournamentBenchmarkApp.main(SmartTravelingTournamentBenchmarkApp.java:28)<br>
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br>
        at<br>
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)<br>
        at<br>
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br>
        at java.lang.reflect.Method.invoke(Method.java:597)<br>
        at com.intellij.rt.execution.application.AppMain.main(AppMain.java:110)<br>
<br>
<br>
With kind regards,<br>
Geoffrey De Smet<br>
<br>
<br>
</div></div>Edson Tirelli schreef:<br>
<div class="im">&gt;<br>
&gt;    Geoffrey,<br>
&gt;<br>
&gt;    All planner tests are green now (revision #32010).<br>
&gt;<br>
&gt;    Thanks,<br>
&gt;       Edson<br>
&gt;<br>
</div>&gt; 2010/3/8 Edson Tirelli &lt;<a href="mailto:ed.tirelli@gmail.com">ed.tirelli@gmail.com</a> &lt;mailto:<a href="mailto:ed.tirelli@gmail.com">ed.tirelli@gmail.com</a>&gt;&gt;<br>
<div class="im">&gt;<br>
&gt;<br>
&gt;        Hey Geoffrey,<br>
&gt;<br>
&gt;        The fixes for accumulate are already there. It is no longer<br>
&gt;     cloning the tuple memory and whenever possible, it uses indexing<br>
&gt;     instead of full iteration.<br>
&gt;<br>
&gt;        Working on the NPE now.<br>
&gt;<br>
&gt;<br>
&gt;        Edson<br>
&gt;<br>
&gt;     2010/3/7 Geoffrey De Smet &lt;<a href="mailto:ge0ffrey.spam@gmail.com">ge0ffrey.spam@gmail.com</a><br>
</div><div><div></div><div class="h5">&gt;     &lt;mailto:<a href="mailto:ge0ffrey.spam@gmail.com">ge0ffrey.spam@gmail.com</a>&gt;&gt;<br>
&gt;<br>
&gt;         Edson,<br>
&gt;<br>
&gt;          &gt; I believe fixed the infinite loop<br>
&gt;          &gt;&gt; problem. Would you please take a look if it works for you?<br>
&gt;<br>
&gt;         Yes, it&#39;s no longer there, thanks :)<br>
&gt;         Examination now suffers from the same NPE as the NQueens smoke test.<br>
&gt;<br>
&gt;         On one PAS testdata I actually had 5%, but on another PAS<br>
&gt;         testdata only 1%.<br>
&gt;<br>
&gt;         I believe the cloning in accumulates fix will allow me to do the<br>
&gt;         score<br>
&gt;         calculation as it should be done (one rule instead of two rules)<br>
&gt;         and also further help performance.<br>
&gt;         I &#39;ll run some experiments in that direction as soon as you give<br>
&gt;         me the<br>
&gt;         sign that cloning in accumulates has been fixed.<br>
&gt;<br>
&gt;         With kind regards,<br>
&gt;         Geoffrey De Smet<br>
&gt;<br>
&gt;<br>
&gt;         Edson Tirelli schreef:<br>
&gt;          &gt;<br>
&gt;          &gt;    Geoffrey,<br>
&gt;          &gt;<br>
&gt;          &gt;    I just committed some code that I believe fixed the<br>
&gt;         infinite loop<br>
&gt;          &gt; problem. Would you please take a look if it works for you? I<br>
&gt;         will take a<br>
&gt;          &gt; look at the other problems now... thanks for reporting that.<br>
&gt;          &gt;<br>
&gt;          &gt;    Regarding the performance, the main benefit of true modify<br>
&gt;         is not a<br>
&gt;          &gt; straight gain on performance, but the reduction of the garbage<br>
&gt;          &gt; collection stress. Just to explain, the code now is actually more<br>
&gt;          &gt; complex, but the idea is that the algorithm pays off by<br>
&gt;         instantiating a<br>
&gt;          &gt; lot less objects now, specially LeftTuples. I would not be<br>
&gt;         surprised if<br>
&gt;          &gt; the 4% gain you see is due to less object instantiation+garbage<br>
&gt;          &gt; collection work. This is obviously dependent on the use case,<br>
&gt;         but one<br>
&gt;          &gt; really interesting statistic to see would be if you can<br>
&gt;         profile how many<br>
&gt;          &gt; instances of LeftTuple were created with the previous<br>
&gt;         algorithm compared<br>
&gt;          &gt; to now.<br>
&gt;          &gt;<br>
&gt;          &gt;    Having said that, there are some performance improvements for<br>
&gt;          &gt; specific cases, like on accumulate that before would<br>
&gt;         frequently clone<br>
&gt;          &gt; lists of tuples and iterate and now it avoids both the<br>
&gt;         cloning and the<br>
&gt;          &gt; iteration on specific cases. For those cases, we expect gains<br>
&gt;         of 30% on<br>
&gt;          &gt; the node, but that is just the node, not the whole kbase.<br>
&gt;          &gt;<br>
&gt;          &gt;    Also, as you mentioned, true modify opens the door for<br>
&gt;         several other<br>
&gt;          &gt; optimizations that we will work on as soon as it is stable again.<br>
&gt;          &gt;<br>
&gt;          &gt;    Thanks,<br>
&gt;          &gt;       Edson<br>
&gt;          &gt;<br>
&gt;          &gt; 2010/3/7 Geoffrey De Smet &lt;<a href="mailto:ge0ffrey.spam@gmail.com">ge0ffrey.spam@gmail.com</a><br>
&gt;         &lt;mailto:<a href="mailto:ge0ffrey.spam@gmail.com">ge0ffrey.spam@gmail.com</a>&gt;<br>
&gt;          &gt; &lt;mailto:<a href="mailto:ge0ffrey.spam@gmail.com">ge0ffrey.spam@gmail.com</a><br>
&gt;         &lt;mailto:<a href="mailto:ge0ffrey.spam@gmail.com">ge0ffrey.spam@gmail.com</a>&gt;&gt;&gt;<br>
&gt;          &gt;<br>
&gt;          &gt;     Found another issue with the true modify changes: 3 of my<br>
&gt;         examples don&#39;t<br>
&gt;          &gt;     work (NQueens, Travelingtournament, Examination), due to<br>
&gt;         distinct<br>
&gt;          &gt;     causes.<br>
&gt;          &gt;<br>
&gt;          &gt;     PatientAdmissionScheduling does work and it&#39;s about 4%<br>
&gt;         faster on first<br>
&gt;          &gt;     sight.<br>
&gt;          &gt;     It&#39;s a linear improvement, not an exponential improvement.<br>
&gt;          &gt;     Nothing world shocking (yet), but every little bit helps :)<br>
&gt;          &gt;     Edson and Mark believe that true modify allows for new<br>
&gt;         optimization,<br>
&gt;          &gt;     which I believe might be an exponential improvement.<br>
&gt;          &gt;<br>
&gt;          &gt;     Once examination works I&#39;ll test if I can remove the TMS<br>
&gt;         workaround I<br>
&gt;          &gt;     needed before.<br>
&gt;          &gt;     This will be a huge performance boost, but only for that<br>
&gt;         specific<br>
&gt;          &gt;     example.<br>
&gt;          &gt;<br>
&gt;          &gt;<br>
&gt;          &gt;     Here&#39;s the bug list:<br>
&gt;          &gt;<br>
&gt;          &gt;     1) Infinite loop in<br>
&gt;          &gt;<br>
&gt;         org.drools.core.util.LeftTupleList.get(LeftTupleList.java:102)<br>
&gt;          &gt;<br>
&gt;          &gt;     2) NPE in<br>
&gt;          &gt;<br>
&gt;         org.drools.core.util.RightTupleList.matches(RightTupleList.java:190)<br>
&gt;          &gt;     because this.first is null in<br>
&gt;          &gt;     return this.hashCode == tupleHashCode &amp;&amp; this.index.equal(<br>
&gt;          &gt;     this.first.getFactHandle().getObject(),<br>
&gt;          &gt;<br>
&gt;          &gt;     tuple );<br>
&gt;          &gt;<br>
&gt;          &gt;     3) NPE in<br>
&gt;          &gt;<br>
&gt;         org.drools.reteoo.SingleLeftTupleSinkAdapter#propagateModifyChildLeftTuple,<br>
&gt;          &gt;     line 198:<br>
&gt;          &gt;     the leftTuple or the sink is null<br>
&gt;          &gt;            childLeftTuple.getLeftTupleSink().modifyLeftTuple(<br>
&gt;          &gt;     childLeftTuple,<br>
&gt;          &gt;<br>
&gt;         context,<br>
&gt;          &gt;<br>
&gt;          &gt;     workingMemory );<br>
&gt;          &gt;<br>
&gt;          &gt;     Here are the stacktraces:<br>
&gt;          &gt;<br>
&gt;          &gt;     1)<br>
&gt;          &gt;<br>
&gt;          &gt;       1.<br>
&gt;          &gt;          To run:<br>
&gt;          &gt;       2.<br>
&gt;          &gt;          module: drools-planner-examples<br>
&gt;          &gt;       3.<br>
&gt;          &gt;          main class:<br>
&gt;          &gt;<br>
&gt;          org.drools.planner.examples.examination.app.ExaminationBenchmarkApp<br>
&gt;          &gt;       4.<br>
&gt;          &gt;          VM params: -Xms256m -Xmx512m -server<br>
&gt;          &gt;       5.<br>
&gt;          &gt;          program params: short<br>
&gt;          &gt;       6.<br>
&gt;          &gt;          working dir:<br>
&gt;          &gt;<br>
&gt;          &gt;<br>
&gt;          /home/ge0ffrey/projects/jboss/drools/drools-planner/drools-planner-examples<br>
&gt;          &gt;       7.<br>
&gt;          &gt;<br>
&gt;          &gt;       8.<br>
&gt;          &gt;<br>
&gt;          &gt;       9.<br>
&gt;          &gt;          More logging? open log4j-benchmark.xml and turn on<br>
&gt;         debug logging<br>
&gt;          &gt;          for org.drools.planner<br>
&gt;          &gt;      10.<br>
&gt;          &gt;<br>
&gt;          &gt;      11.<br>
&gt;          &gt;<br>
&gt;          &gt;      12.<br>
&gt;          &gt;          2010-03-03 19:47:34,625 [main] INFO  Solving with<br>
&gt;         random seed (0).<br>
&gt;          &gt;      13.<br>
&gt;          &gt;          2010-03-03 19:47:34,626 [main] DEBUG Solution is already<br>
&gt;          &gt;     initialized.<br>
&gt;          &gt;      14.<br>
&gt;          &gt;          2010-03-03 19:47:34,752 [main] INFO  Initialization<br>
&gt;         time spend<br>
&gt;          &gt;          (129) for score (0hard/-8154soft). Updating best<br>
&gt;         solution and best<br>
&gt;          &gt;          score.<br>
&gt;          &gt;      15.<br>
&gt;          &gt;          2010-03-03 19:47:34,948 [main] DEBUG     Move (489<br>
&gt;         {D180|S47} @ 17<br>
&gt;          &gt;          {D210} + 4 {C77} =&gt; 25 {D210}) with score<br>
&gt;         (-47hard/-8190soft) and<br>
&gt;          &gt;          acceptChance (1.0).<br>
&gt;          &gt;      16.<br>
&gt;          &gt;          2010-03-03 19:47:34,972 [main] DEBUG     Move (373<br>
&gt;         {D180|S157} @<br>
&gt;          &gt;          23 {D210} + 0 {C260} =&gt; 16 {D210}) with score<br>
&gt;         (-158hard/-8219soft)<br>
&gt;          &gt;          and acceptChance (1.0).<br>
&gt;          &gt;      17.<br>
&gt;          &gt;          2010-03-03 19:47:34,985 [main] DEBUG     Move (530<br>
&gt;         {D120|S152} @<br>
&gt;          &gt;          16 {D210} + 0 {C260} =&gt; 39 {D210}) with score<br>
&gt;         (-153hard/-8481soft)<br>
&gt;          &gt;          and acceptChance (1.0).<br>
&gt;          &gt;      18.<br>
&gt;          &gt;          2010-03-03 19:47:35,001 [main] DEBUG     Move (132<br>
&gt;         {D120|S61} @ 53<br>
&gt;          &gt;          {D210} + 5 {C65} =&gt; 24 {D210}) with score<br>
&gt;         (-64hard/-8243soft) and<br>
&gt;          &gt;          acceptChance (1.0).<br>
&gt;          &gt;      19.<br>
&gt;          &gt;          2010-03-03 19:47:35,011 [main] DEBUG     Move (553<br>
&gt;         {D180|S169} @<br>
&gt;          &gt;          51 {D210} + 0 {C260} =&gt; 37 {D210}) with score<br>
&gt;         (-168hard/-8323soft)<br>
&gt;          &gt;          and acceptChance (1.0).<br>
&gt;          &gt;      20.<br>
&gt;          &gt;          2010-03-03 19:52:03<br>
&gt;          &gt;      21.<br>
&gt;          &gt;          Full thread dump Java HotSpot(TM) Server VM<br>
&gt;         (14.2-b01 mixed mode):<br>
&gt;          &gt;      22.<br>
&gt;          &gt;<br>
&gt;          &gt;      23.<br>
&gt;          &gt;          ...<br>
&gt;          &gt;      24.<br>
&gt;          &gt;<br>
&gt;          &gt;      25.<br>
&gt;          &gt;          &quot;main&quot; prio=10 tid=0x08b2b800 nid=0x1104 runnable<br>
&gt;         [0xb6aa6000]<br>
&gt;          &gt;      26.<br>
&gt;          &gt;             java.lang.Thread.State: RUNNABLE<br>
&gt;          &gt;      27.<br>
&gt;          &gt;                  at<br>
&gt;          &gt;<br>
&gt;          &gt;<br>
&gt;          org.drools.common.DefaultFactHandle.hashCode(DefaultFactHandle.java:136)<br>
&gt;          &gt;      28.<br>
&gt;          &gt;                  at<br>
&gt;         org.drools.reteoo.LeftTuple.hashCode(LeftTuple.java:445)<br>
&gt;          &gt;      29.<br>
&gt;          &gt;                  at<br>
&gt;         org.drools.reteoo.LeftTuple.equals(LeftTuple.java:461)<br>
&gt;          &gt;      30.<br>
&gt;          &gt;                  at<br>
&gt;          &gt;<br>
&gt;          org.drools.core.util.LeftTupleList.get(LeftTupleList.java:102)<br>
&gt;          &gt;      31.<br>
&gt;          &gt;                  at<br>
&gt;          &gt;<br>
&gt;          org.drools.core.util.LeftTupleList.contains(LeftTupleList.java:96)<br>
&gt;          &gt;      32.<br>
&gt;          &gt;                  at<br>
&gt;          &gt;<br>
&gt;          &gt;<br>
&gt;          org.drools.reteoo.EvalConditionNode.modifyLeftTuple(EvalConditionNode.java:235)<br>
&gt;          &gt;      33.<br>
&gt;          &gt;                  at<br>
&gt;          &gt;<br>
&gt;          &gt;<br>
&gt;          org.drools.reteoo.SingleLeftTupleSinkAdapter.propagateModifyChildLeftTuple(SingleLeftTupleSinkAdapter.java:209)<br>
&gt;          &gt;      34.<br>
&gt;          &gt;                  at<br>
&gt;          &gt;<br>
&gt;          org.drools.reteoo.JoinNode.modifyRightTuple(JoinNode.java:221)<br>
&gt;          &gt;      35.<br>
&gt;          &gt;                  at<br>
&gt;          &gt;     org.drools.reteoo.BetaNode.modifyObject(BetaNode.java:317)<br>
&gt;          &gt;      36.<br>
&gt;          &gt;                  at<br>
&gt;          &gt;<br>
&gt;          &gt;<br>
&gt;          org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateModifyObject(CompositeObjectSinkAdapter.java:444)<br>
&gt;          &gt;      37.<br>
&gt;          &gt;                  at<br>
&gt;          &gt;<br>
&gt;          &gt;<br>
&gt;          org.drools.reteoo.CompositeObjectSinkAdapter.propagateModifyObject(CompositeObjectSinkAdapter.java:412)<br>
&gt;          &gt;      38.<br>
&gt;          &gt;                  at<br>
&gt;          &gt;<br>
&gt;          &gt;<br>
&gt;          org.drools.reteoo.ObjectTypeNode.modifyObject(ObjectTypeNode.java:262)<br>
&gt;          &gt;      39.<br>
&gt;          &gt;                  at<br>
&gt;          &gt;<br>
&gt;          &gt;<br>
&gt;          org.drools.reteoo.EntryPointNode.modifyObject(EntryPointNode.java:174)<br>
&gt;          &gt;      40.<br>
&gt;          &gt;                  at<br>
&gt;          &gt;<br>
&gt;          &gt;<br>
&gt;          org.drools.common.AbstractWorkingMemory.update(AbstractWorkingMemory.java:1392)<br>
&gt;          &gt;      41.<br>
&gt;          &gt;                  at<br>
&gt;          &gt;<br>
&gt;          &gt;<br>
&gt;          org.drools.common.AbstractWorkingMemory.update(AbstractWorkingMemory.java:1288)<br>
&gt;          &gt;      42.<br>
&gt;          &gt;                  at<br>
&gt;          &gt;<br>
&gt;          &gt;<br>
&gt;          org.drools.planner.examples.examination.solver.move.ExaminationMoveHelper.movePeriod(ExaminationMoveHelper.java:17)<br>
&gt;          &gt;      43.<br>
&gt;          &gt;                  at<br>
&gt;          &gt;<br>
&gt;          &gt;<br>
&gt;          org.drools.planner.examples.examination.solver.move.PeriodChangeMove.doMove(PeriodChangeMove.java:37)<br>
&gt;          &gt;      44.<br>
&gt;          &gt;                  at<br>
&gt;          &gt;<br>
&gt;          &gt;<br>
&gt;          org.drools.planner.core.localsearch.decider.DefaultDecider.doMove(DefaultDecider.java:117)<br>
&gt;          &gt;      45.<br>
&gt;          &gt;                  at<br>
&gt;          &gt;<br>
&gt;          &gt;<br>
&gt;          org.drools.planner.core.localsearch.decider.DefaultDecider.decideNextStep(DefaultDecider.java:95)<br>
&gt;          &gt;      46.<br>
&gt;          &gt;                  at<br>
&gt;          &gt;<br>
&gt;          &gt;<br>
&gt;          org.drools.planner.core.localsearch.DefaultLocalSearchSolver.solveImplementation(DefaultLocalSearchSolver.java:105)<br>
&gt;          &gt;      47.<br>
&gt;          &gt;                  at<br>
&gt;          &gt;<br>
&gt;          &gt;<br>
&gt;          org.drools.planner.core.AbstractSolver.solve(AbstractSolver.java:41)<br>
&gt;          &gt;      48.<br>
&gt;          &gt;                  at<br>
&gt;          &gt;<br>
&gt;          &gt;<br>
&gt;          org.drools.planner.benchmark.SolverBenchmarkSuite.benchmark(SolverBenchmarkSuite.java:196)<br>
&gt;          &gt;      49.<br>
&gt;          &gt;                  at<br>
&gt;          &gt;<br>
&gt;          &gt;<br>
&gt;          org.drools.planner.benchmark.XmlSolverBenchmarker.benchmark(XmlSolverBenchmarker.java:72)<br>
&gt;          &gt;      50.<br>
&gt;          &gt;                  at<br>
&gt;          &gt;<br>
&gt;          &gt;<br>
&gt;          org.drools.planner.examples.common.app.CommonBenchmarkApp.process(CommonBenchmarkApp.java:25)<br>
&gt;          &gt;      51.<br>
&gt;          &gt;                  at<br>
&gt;          &gt;<br>
&gt;          &gt;<br>
&gt;          org.drools.planner.examples.examination.app.ExaminationBenchmarkApp.main(ExaminationBenchmarkApp.java:27)<br>
&gt;          &gt;      52.<br>
&gt;          &gt;                  at<br>
&gt;         sun.reflect.NativeMethodAccessorImpl.invoke0(Native<br>
&gt;          &gt;     Method)<br>
&gt;          &gt;      53.<br>
&gt;          &gt;                  at<br>
&gt;          &gt;<br>
&gt;          &gt;<br>
&gt;          sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)<br>
&gt;          &gt;      54.<br>
&gt;          &gt;                  at<br>
&gt;          &gt;<br>
&gt;          &gt;<br>
&gt;          sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br>
&gt;          &gt;      55.<br>
&gt;          &gt;                  at<br>
&gt;         java.lang.reflect.Method.invoke(Method.java:597)<br>
&gt;          &gt;      56.<br>
&gt;          &gt;                  at<br>
&gt;          &gt;<br>
&gt;          &gt;<br>
&gt;          com.intellij.rt.execution.application.AppMain.main(AppMain.java:110)<br>
&gt;          &gt;<br>
&gt;          &gt;<br>
&gt;          &gt;<br>
&gt;          &gt;     2) Run NQueensSmokeTest<br>
&gt;          &gt;<br>
&gt;          &gt;     java.lang.NullPointerException<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         org.drools.core.util.RightTupleList.matches(RightTupleList.java:190)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         org.drools.core.util.RightTupleIndexHashTable.get(RightTupleIndexHashTable.java:301)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         org.drools.core.util.RightTupleIndexHashTable.getFirst(RightTupleIndexHashTable.java:87)<br>
&gt;          &gt;        at<br>
&gt;         org.drools.reteoo.JoinNode.modifyLeftTuple(JoinNode.java:260)<br>
&gt;          &gt;        at<br>
&gt;         org.drools.reteoo.BetaNode.modifyLeftTuple(BetaNode.java:336)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         org.drools.reteoo.CompositeLeftTupleSinkAdapter.doPropagateModifyObject(CompositeLeftTupleSinkAdapter.java:204)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         org.drools.reteoo.CompositeLeftTupleSinkAdapter.propagateModifyObject(CompositeLeftTupleSinkAdapter.java:219)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         org.drools.reteoo.LeftInputAdapterNode.modifyObject(LeftInputAdapterNode.java:154)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateModifyObject(CompositeObjectSinkAdapter.java:444)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         org.drools.reteoo.CompositeObjectSinkAdapter.propagateModifyObject(CompositeObjectSinkAdapter.java:412)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         org.drools.reteoo.ObjectTypeNode.modifyObject(ObjectTypeNode.java:262)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         org.drools.reteoo.EntryPointNode.modifyObject(EntryPointNode.java:174)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         org.drools.common.AbstractWorkingMemory.update(AbstractWorkingMemory.java:1392)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         org.drools.common.AbstractWorkingMemory.update(AbstractWorkingMemory.java:1288)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         org.drools.planner.examples.nqueens.solver.move.YChangeMove.doMove(YChangeMove.java:38)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         org.drools.planner.core.localsearch.decider.DefaultDecider.doMove(DefaultDecider.java:119)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         org.drools.planner.core.localsearch.decider.DefaultDecider.decideNextStep(DefaultDecider.java:95)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         org.drools.planner.core.localsearch.DefaultLocalSearchSolver.solveImplementation(DefaultLocalSearchSolver.java:105)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         org.drools.planner.core.AbstractSolver.solve(AbstractSolver.java:41)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         org.drools.planner.examples.nqueens.NQueensSmokeTest.testSmoke(NQueensSmokeTest.java:30)<br>
&gt;          &gt;        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native<br>
&gt;         Method)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         com.intellij.junit3.JUnit3IdeaTestRunner.doRun(JUnit3IdeaTestRunner.java:108)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         com.intellij.junit3.JUnit3IdeaTestRunner.startRunnerWithArgs(JUnit3IdeaTestRunner.java:42)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:165)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:60)<br>
&gt;          &gt;        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native<br>
&gt;         Method)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         com.intellij.rt.execution.application.AppMain.main(AppMain.java:110)<br>
&gt;          &gt;<br>
&gt;          &gt;     3) Run SmartTravelingTournamentBenchmarkApp<br>
&gt;          &gt;<br>
&gt;          &gt;     Exception in thread &quot;main&quot; java.lang.NullPointerException<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         org.drools.reteoo.SingleLeftTupleSinkAdapter.propagateModifyChildLeftTuple(SingleLeftTupleSinkAdapter.java:198)<br>
&gt;          &gt;        at<br>
&gt;         org.drools.reteoo.JoinNode.modifyLeftTuple(JoinNode.java:304)<br>
&gt;          &gt;        at<br>
&gt;         org.drools.reteoo.BetaNode.modifyLeftTuple(BetaNode.java:336)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         org.drools.reteoo.CompositeLeftTupleSinkAdapter.doPropagateModifyObject(CompositeLeftTupleSinkAdapter.java:204)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         org.drools.reteoo.CompositeLeftTupleSinkAdapter.propagateModifyObject(CompositeLeftTupleSinkAdapter.java:219)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         org.drools.reteoo.LeftInputAdapterNode.modifyObject(LeftInputAdapterNode.java:154)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateModifyObject(CompositeObjectSinkAdapter.java:444)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         org.drools.reteoo.CompositeObjectSinkAdapter.propagateModifyObject(CompositeObjectSinkAdapter.java:412)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         org.drools.reteoo.ObjectTypeNode.modifyObject(ObjectTypeNode.java:262)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         org.drools.reteoo.EntryPointNode.modifyObject(EntryPointNode.java:174)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         org.drools.common.AbstractWorkingMemory.update(AbstractWorkingMemory.java:1392)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         org.drools.common.AbstractWorkingMemory.update(AbstractWorkingMemory.java:1288)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         org.drools.planner.examples.travelingtournament.solver.smart.move.MultipleMatchListRotateMove.rotateList(MultipleMatchListRotateMove.java:59)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         org.drools.planner.examples.travelingtournament.solver.smart.move.MultipleMatchListRotateMove.doMove(MultipleMatchListRotateMove.java:44)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         org.drools.planner.core.localsearch.decider.DefaultDecider.doMove(DefaultDecider.java:117)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         org.drools.planner.core.localsearch.decider.DefaultDecider.decideNextStep(DefaultDecider.java:95)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         org.drools.planner.core.localsearch.DefaultLocalSearchSolver.solveImplementation(DefaultLocalSearchSolver.java:105)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         org.drools.planner.core.AbstractSolver.solve(AbstractSolver.java:41)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         org.drools.planner.benchmark.SolverBenchmarkSuite.benchmark(SolverBenchmarkSuite.java:196)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         org.drools.planner.benchmark.XmlSolverBenchmarker.benchmark(XmlSolverBenchmarker.java:72)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         org.drools.planner.examples.common.app.CommonBenchmarkApp.process(CommonBenchmarkApp.java:25)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         org.drools.planner.examples.travelingtournament.app.smart.SmartTravelingTournamentBenchmarkApp.main(SmartTravelingTournamentBenchmarkApp.java:28)<br>
&gt;          &gt;        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native<br>
&gt;         Method)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br>
&gt;          &gt;        at java.lang.reflect.Method.invoke(Method.java:597)<br>
&gt;          &gt;        at<br>
&gt;          &gt;<br>
&gt;         com.intellij.rt.execution.application.AppMain.main(AppMain.java:110)<br>
&gt;          &gt;<br>
&gt;          &gt;     --<br>
&gt;          &gt;     With kind regards,<br>
&gt;          &gt;     Geoffrey De Smet<br>
&gt;          &gt;<br>
&gt;          &gt;     _______________________________________________<br>
&gt;          &gt;     rules-dev mailing list<br>
&gt;          &gt;     <a href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a><br>
&gt;         &lt;mailto:<a href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a>&gt;<br>
&gt;         &lt;mailto:<a href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a><br>
&gt;         &lt;mailto:<a href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a>&gt;&gt;<br>
&gt;          &gt;     <a href="https://lists.jboss.org/mailman/listinfo/rules-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-dev</a><br>
&gt;          &gt;<br>
&gt;          &gt;<br>
&gt;          &gt;<br>
&gt;          &gt;<br>
&gt;          &gt; --<br>
&gt;          &gt;  Edson Tirelli<br>
&gt;          &gt;  JBoss Drools Core Development<br>
&gt;          &gt;  JBoss by Red Hat @ <a href="http://www.jboss.com" target="_blank">www.jboss.com</a> &lt;<a href="http://www.jboss.com" target="_blank">http://www.jboss.com</a>&gt;<br>
&gt;         &lt;<a href="http://www.jboss.com" target="_blank">http://www.jboss.com</a>&gt;<br>
&gt;          &gt;<br>
&gt;          &gt;<br>
&gt;          &gt;<br>
&gt;         ------------------------------------------------------------------------<br>
&gt;          &gt;<br>
&gt;          &gt; _______________________________________________<br>
&gt;          &gt; rules-dev mailing list<br>
&gt;          &gt; <a href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a> &lt;mailto:<a href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a>&gt;<br>
&gt;          &gt; <a href="https://lists.jboss.org/mailman/listinfo/rules-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-dev</a><br>
&gt;<br>
&gt;         _______________________________________________<br>
&gt;         rules-dev mailing list<br>
&gt;         <a href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a> &lt;mailto:<a href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a>&gt;<br>
&gt;         <a href="https://lists.jboss.org/mailman/listinfo/rules-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-dev</a><br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;     --<br>
&gt;      Edson Tirelli<br>
&gt;      JBoss Drools Core Development<br>
&gt;      JBoss by Red Hat @ <a href="http://www.jboss.com" target="_blank">www.jboss.com</a> &lt;<a href="http://www.jboss.com" target="_blank">http://www.jboss.com</a>&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt;  Edson Tirelli<br>
&gt;  JBoss Drools Core Development<br>
&gt;  JBoss by Red Hat @ <a href="http://www.jboss.com" target="_blank">www.jboss.com</a> &lt;<a href="http://www.jboss.com" target="_blank">http://www.jboss.com</a>&gt;<br>
&gt;<br>
&gt;<br>
&gt; ------------------------------------------------------------------------<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; rules-dev mailing list<br>
&gt; <a href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a><br>
&gt; <a href="https://lists.jboss.org/mailman/listinfo/rules-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-dev</a><br>
<br>
_______________________________________________<br>
rules-dev mailing list<br>
<a href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/rules-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-dev</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>  Edson Tirelli<br>  JBoss Drools Core Development<br>  JBoss by Red Hat @ <a href="http://www.jboss.com">www.jboss.com</a><br>