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@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@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users


_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users