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

Mark Proctor mproctor at codehaus.org
Thu Aug 16 05:48:04 EDT 2007


not yet.

Mark
Simon French wrote:
> 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 
> <mailto: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
>     <mailto: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
>>         <mailto: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
>>>
>>>
>>>              <mailto:rules-users at lists.jboss.org>
>>>             https://lists.jboss.org/mailman/listinfo/rules-users
>>>               
>>
>>
>>             _______________________________________________
>>             rules-users mailing list
>>             rules-users at lists.jboss.org
>>             <mailto:rules-users at lists.jboss.org>
>>             https://lists.jboss.org/mailman/listinfo/rules-users
>>
>>
>>         ------------------------------------------------------------------------
>>
>>         _______________________________________________
>>         rules-users mailing list
>>         rules-users at lists.jboss.org
>>
>>          <mailto:rules-users at lists.jboss.org>
>>         https://lists.jboss.org/mailman/listinfo/rules-users
>>           
>
>
>         _______________________________________________
>         rules-users mailing list
>         rules-users at lists.jboss.org <mailto: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/686238a2/attachment.html 


More information about the rules-users mailing list