[rules-users] Re: drools-solver - magic name of scoreCalculator => Solution has a Sore and is inserted into the working memory

Geoffrey De Smet ge0ffrey.spam at gmail.com
Sat Feb 21 06:07:58 EST 2009


Feed-back welcome :)

The score should be a Score instance of double. Add build-in support for 
HardAndSoftScore. Replace ScoreCalculator with ScoreHolder.
   https://jira.jboss.org/jira/browse/JBRULES-1158

Solution should have a getScore() and the score rules need to calculate 
the correct score for a solution instead of filling some magic global 
variable
   https://jira.jboss.org/jira/browse/JBRULES-1977

With kind regards,
Geoffrey De Smet


Geoffrey De Smet schreef:
> I am actually considering a couple of designs, which also happens to 
> solve the problem of the magic name of the scoreCalculator.
> 
> 1) a score will no longer be a double, but an instance of a new 
> interface Score. This will means that a score of an int hard and int 
> soft will be represented as it should be: an int hard and an int soft. 
> That has 2 advantages:
> - you could use implement their own Score, if the out-of-the-box types 
> don't suffice, say int hard, BigDecimal soft, double verySoft.
> - it would be possible to decide the step, not on a normal compareTo, 
> where hard is always higher then soft, but on (hard * hardAsSoftWeight + 
> soft), where hardAsSoftWeight changes:
> it's normally very high, but when  no hard constraints are broken in a 
> long time, it temporarily goes down.
> This allows the local search to take steps that break a hard constraints 
> for a while, passing through hard barriers. Experiments have proven that 
> this gives better results.
> 
> 2) a Solution has a Score. That Score can be uninitialized or dirty.
> A Solution is also inserted into the working memory (along with it's 
> facts).
> Every changing fact (Queen, Lesson, Exam, ...) will also need to hold a 
> reference to it's Solution.
> That way every ConstraintOccurrence can hold a reference to it's Solution.
> Then the calculateScore rule will update the score in a solution, 
> instead of putting it into a global. The solver still has a reference to 
> the solution, so it can retrieve the score.
> This allows for multiple solution instances to be put into same working 
> memory and there's no magic scoreCalculator.
> 
> What do you think? Criticism welcome :)
> 
> Of course, backward compatibility will be broken (as stated in the 
> manual), but everything will be documented into an upgradeRecipe.txt,
> so it shouldn't be to hard to upgrade to a newer version.
> 
> With kind regards,
> Geoffrey De Smet
> 
> 
> Greg Barton schreef:
>> Actually, I was wishing for something similar last night, but for the 
>> names of entry-points.  I think it would be nice if you could specify 
>> the names of things in DRL from the values of public static final 
>> Strings. (i.e. constants)  Do you dev folk think that's possible 
>> enough to make a jira request for it?
>>
>> --- On Fri, 2/13/09, Geoffrey De Smet <ge0ffrey.spam at gmail.com> wrote:
>>
>>> From: Geoffrey De Smet <ge0ffrey.spam at gmail.com>
>>> Subject: [rules-users] Re: drools-solver - magic name of scoreCalculator
>>> To: rules-users at lists.jboss.org
>>> Date: Friday, February 13, 2009, 9:37 AM
>>> Yes, it's not that good that it's a magic name.
>>> However, I don't know any other way to do it.
>>> Feel free to make a jira for it, especially if you know a
>>> better way to do it :)
>>>
>>> With kind regards,
>>> Geoffrey De Smet
>>>
>>>
>>> Andrew Waterman schreef:
>>>> Thanks Geoffrey!  I patched this yesterday with
>>> slf4j-jcl and slf4j-nop for no loging.  I'll post the
>>> mavne dependencies later this morning in case others wish to
>>> use non-log4j implementations. :)  I did noticeas well  that
>>> the "scoreCalculator" global is referenced by name
>>> from the solver.  Want me to file a jira issue on that?  It
>>> seems strange that the variable name shoudl be static like
>>> that to me.
>>>> best wishes,
>>>>
>>>> Andrew
>>>>
>>>> On Fri, Feb 13, 2009 at 7:55 AM, Geoffrey De Smet
>>> <ge0ffrey.spam at gmail.com
>>> <mailto:ge0ffrey.spam at gmail.com>> wrote:
>>>>     Adding the slf4j-log4j12 dependency to your
>>> pom.xml should fix it :)
>>>>            <dependency>
>>>>               
>>> <groupId>org.slf4j</groupId>
>>>>               
>>> <artifactId>slf4j-log4j12</artifactId>
>>>>                <scope>runtime</scope>
>>>>            </dependency>
>>>>
>>>>     Not sure how changing anything in
>>> drools-solver-examples could fix
>>>>     it, normally your project wouldn't depend on
>>> it, only on
>>>>     drools-solver-core.
>>>>
>>>>
>>>>     With kind regards,
>>>>     Geoffrey De Smet
>>>>
>>>>
>>>>     Greg Barton schreef:
>>>>
>>>>         I was getting the error below running the
>>> benchmarkNQueens.sh
>>>>         script in drools-solver-examples.  I got
>>> around it by taking the
>>>>         "<scope>runtime</scope>"
>>> line out of the slf4j-log4j12
>>>>         dependency in drools-solver-examples/pom.xml. 
>>> Not sure if
>>>>         that's the right way to get around it, but
>>> it worked. :)
>>>>         --- On Fri, 2/13/09, Geoffrey De Smet
>>> <ge0ffrey.spam at gmail.com
>>>>         <mailto:ge0ffrey.spam at gmail.com>>
>>> wrote:
>>>>             From: Geoffrey De Smet
>>> <ge0ffrey.spam at gmail.com
>>>>             <mailto:ge0ffrey.spam at gmail.com>>
>>>>             Subject: [rules-users] Re: drools-solver
>>> -- logger error
>>>>             (slf4j binding)?
>>>>             To: rules-users at lists.jboss.org
>>>>             <mailto:rules-users at lists.jboss.org>
>>>>             Date: Friday, February 13, 2009, 1:04 AM
>>>>             drools-score (like hibernate and many
>>> other lib projects)
>>>>             just depends on sl4j-api, which is a
>>> logging interface.
>>>>             It's up to the end-use product to
>>> decide which logging
>>>>             implementation to use under that and how
>>> to configure the
>>>>             logging (where to log to, how much to log,
>>> ...).
>>>>             In the drools solver examples I 've
>>> put slf4j-log4j
>>>>             underneat it, because I am familiar with
>>> log4j's
>>>>             configuration, take a look at their
>>> log4j.xml files. However
>>>>             they say that the logback implementation
>>> is better these
>>>>             days.
>>>>
>>>>
>>>>             PS: I 'll take a look at the other
>>> discussions this
>>>>             afternoon.
>>>>
>>>>             With kind regards,
>>>>             Geoffrey De Smet
>>>>
>>>>             Andrew Waterman schreef:
>>>>
>>>>                 Hi,
>>>>
>>>>                 I'm using the drools-solver.M5
>>> build through Maven
>>>>             and have gotten the following error while
>>> running my
>>>>             project:
>>>>
>>>>                 SLF4J: Failed to load class
>>>>
>>>>            
>>> "org.slf4j.impl.StaticLoggerBinder".
>>>>                 SLF4J: See
>>>>
>>>>            
>>> http://www.slf4j.org/codes.html#StaticLoggerBinder for
>>>>             further details.
>>>>
>>>>                 I've checked my dependency graph,
>>> and
>>>>             drools-solver references the sl4j-api, but
>>> no
>>>>             implementation.  I checked the
>>> mvnrepository, and there are
>>>>             several other slf4j related projects. 
>>> What is the preferred
>>>>             binding for JDK1.6?
>>>>
>>>>                 best wishes,
>>>>
>>>>                 Andrew
>>>>
>>>>                 ---------------------------------
>>>>                 Andrew Waterman
>>>>                 San Cristóbal de las Casas, Chiapas,
>>> Mexico
>>>>                 +52 1 967 107 5902
>>>>                 +1 510 342 5693
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>                
>>> _______________________________________________
>>>>                 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
>>>>
>>>>
>>>>
>>>> -- +1 510 342 5693
>>>>
>>>> PO Box 7775 #8750
>>>> San Francisco, California   94120-7775
>>>>
>>>> "Warning:  following standard input indefinitely
>>> is ineffective"
>>>> - /bin/tail error message
>>>>
>>>> "Against logic there is no armor like
>>> ignorance."
>>>>  - Laurence J. Pete
>>>>
>>>>
>>>>
>>> ------------------------------------------------------------------------
>>>> _______________________________________________
>>>> 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
> 




More information about the rules-users mailing list