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