[rules-users] Problems Extending the Golfer example - Cartesian joins ??

Simon French french.simon at gmail.com
Thu Aug 9 11:26:43 EDT 2007


Hi Mark,
I gave the latest version a go but still having the same problem.
It appears Drools doesn't like it when the last name is asserted into
working memory.
The memory usage at this stage is just under 900meg.
After that drools gradually eats up all the available memory but no more
assertions are made.

Regards

Simon


On 03/08/07, Mark Proctor <mproctor at codehaus.org> wrote:
>
>  I must admit I didn't check against this example. But we did find a
> memory leak. Each activation remembers its parent activation, this chain was
> never getting nulled, which meant for recursive algorithms it went out of
> memory very quickly - this is now fixed. Maybe you can check trunk and make
> sure that fixes our problem? Trunk is broken at the moment, while we do MVEL
> updates, but should be fixed in a few hours. I'll message the list when it
> is - you won't need to build anything yourself as you will then be able to
> get the latest snapshot to try from here
> http://cruisecontrol.jboss.com/cc/artifacts/jboss-rules.
>
> Mark
> Simon French wrote:
>
> Hi Mark,
> After all the hard work you guys have put into drools recently I hope you
> had a good holiday.
> Has anybody had a chance to look at this?
>
> Simon
>
> On 20/07/07, Mark Proctor <mproctor at codehaus.org> wrote:
> >
> > we'll look into this to see where the memory is going. but won't be for
> > another week or so - I'm currently on holiday.
> >
> > Mark
> > Simon French wrote:
> >
> > Hi,
> > After attending a session with Mark Proctor in London I was inspired to
> > play around with Drools in a slightly different way than we use it for in
> > the workplace, and try and solve a puzzle.
> > Unfortunately I couldn't get Drools to solve it as I kept getting memory
> > problems (I believe are cartesian joins being the problem),
> > so I decided to extend the golfer example to see if I got the same
> > problem
> > I added two new names and a new integer property, club
> >
> >         // create all possible Golfer objects
> >                 String[] names = new String[] { "Fred", "Joe", "Bob",
> > "Tom", "Des", "Terry" };
> >                 String[] colors = new String[] { "red", "blue", "plaid",
> > "orange","black", "white" };
> >                 int[] positions = new int[] { 1, 2, 3, 4, 5, 6 };
> >                 int[] clubs = new int[] {9,8,7,4,5,5};
> >
> >                 for ( int n = 0; n < names.length; n++ ) {
> >                    for ( int c = 0; c < colors.length; c++ ) {
> >                           for ( int p = 0; p < positions.length; p++ ) {
> >                               for ( int q = 0; q < clubs.length; q++ ) {
> >                                   session.insert(new Golfer( names[n],
> > colors[c], positions[p], clubs[q]) );
> >
> > ....
> >
> >
> > Then changed the golder.drl to:
> >
> > package com.sample
> >
> > import com.sample.Golfer;
> >
> >
> > rule "Golfer Riddle"
> >     when
> >         // A golfer named Fred,
> >
> >         Golfer( name == "Fred",
> >                 $fredsPosition : position, $fredsColor : color,
> > $fredsClub : club   )
> >
> >         // Der Golfer hinter Fred trägt blau
> >         Golfer( $unknownsName : name != "Fred",
> >                 $unknownsPosition :  position == ( $fredsPosition + 1 ),
> >
> >                 $unknownsColor : color == "blue", color != $fredsColor,
> >                 $unknownsClub : club == 5 )
> >
> >         // Joe steht an zweiter Stelle
> >         Golfer( name == "Joe", $joesPosition : position == 2,
> >                 position != $fredsPosition,
> >                 $joesColor : color != $fredsColor,
> >                 $joesClub : club == 5 )
> >
> >         // Bob traegt Karo
> >         Golfer( name == "Bob",
> >                 name != $unknownsName,
> >                 $bobsPosition : position != $fredsPosition,
> >                 position != $unknownsPosition, position !=
> > $joesPosition,
> >                 $bobsColor : color == "plaid",
> >                 color != $fredsColor, color != $joesColor,
> >                 color != $unknownsColor,
> >                 $bobsClub : club < $joesClub )
> >
> >         // Tom ist nicht 1. oder 4., traegt kein Orange
> >         Golfer( $tomsName : name == "Tom",
> >                 $tomsPosition : position != 1, position != 4,
> >                 position != $fredsPosition, position != $joesPosition,
> >                 position !=
> > $bobsPosition,
> >                 $tomsColor : color != "orange", color != "blue",
> >                 color != $fredsColor, color != $joesColor,
> >                 color != $bobsColor )
> >
> >         Golfer ( $des : name == "Des", $desPosition : position <
> > $fredsPosition, $desColor : color != "blue",
> >                 color != $fredsColor, color != $joesColor,
> >                 color != $bobsColor )
> >         Golfer ( $terry : name == "Terry", $terryPosition : position <
> > $desPosition, $terryColor : color != "blue",
> >                 color != $fredsColor, color != $joesColor,
> >                 color != $bobsColor )
> >     then
> >         System.out.println( "Fred " + $fredsPosition + " " + $fredsColor
> > );
> >         System.out.println( "Joe " + $joesPosition + " " + $joesColor );
> >
> >         System.out.println( "Bob " + $bobsPosition + " " + $bobsColor );
> >         System.out.println( "Tom " + $tomsPosition + " " + $tomsColor
> > );
> >         System.out.println ( "Des " + $desPosition + " " + $desColor
> > );
> >         System.out.println( "terry " + $terryPosition + " " +
> > $terryColor );
> > end
> >
> >
> > After a couple of minutes of processing I got:-
> >
> > Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
> >
> > I also changed java memory allocation with -Xms1640M -Xmx1640M (The most
> > I can allocate on my PC), and tried running it as a stateless  session too.
> >
> > Is there anything else I can do, or is this simply pushing drools too
> > far (surely not!!) ?
> >
> > I'm very keen on pushing this technology as much as possible in our
> > workplace and I'd really appreciate any help.
> >
> > Thanks in advance
> >
> > Simon
> >
> >  ------------------------------
> >
> > _______________________________________________
> > rules-users mailing list
> > rules-users at lists.jboss.org
> > https://lists.jboss.org/mailman/listinfo/rules-users
> >
> >
> >
> > _______________________________________________
> > rules-users mailing list
> > rules-users at lists.jboss.org
> > https://lists.jboss.org/mailman/listinfo/rules-users
> >
> >
> ------------------------------
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.orghttps://lists.jboss.org/mailman/listinfo/rules-users
>
>
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20070809/6fb17764/attachment.html 


More information about the rules-users mailing list