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

Simon French french.simon at gmail.com
Thu Aug 16 05:21:38 EDT 2007


Hi Mark,
Any news on this one? I know its just a puzzle, but I would have hoped
drools would cope with it.
I was hoping to use the golfer example as a training aid to people in work.

Regards

Simon

On 09/08/07, Simon French <french.simon at gmail.com> wrote:
>
> 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.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
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20070816/41f765a4/attachment.html 


More information about the rules-users mailing list