[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
Tue Mar 10 12:48:45 EDT 2009
With kind regards,
Geoffrey De Smet
Andrew Waterman schreef:
> Hi Geoffrey,
>
> Sorry to be so late on this feedback. I like your suggestions, it would
> be quite nice to move away from the magic ScoreCalculator name. I'd
> like to be able to list the components that were fed into a score, as
> well. For example, I have a rule such as:
>
> rule
> "western border deforested"
> when
> $tok1 : Token ($id : id, border == BorderType.WEST,
> type in (TokenType.MODERATE_PASTURE, TokenType.INTENSIVE_PASTURE))
> $tok2 : Token (id > $id, $id2 : id, border == BorderType.WEST,
> type in (TokenType.MODERATE_PASTURE, TokenType.INTENSIVE_PASTURE))
> $tok3 : Token (id > $id2, border == BorderType.WEST,
> type in (TokenType.MODERATE_PASTURE,
> TokenType.INTENSIVE_PASTURE))
> then
> insertLogical (
> new UnweightedConstraintOccurrence("western border deforested",
> $tok1, $tok2, $tok3));
> end
>
> I would like to be able to query the score later, in my case when it is
> less than 0.0, in order to list out the specific constraints
> (identifying String and causal objects) that keep the problem from being
> solved, I believe I can do this today, by implementing my own
> ScoreCalculator, but it would be a nice feature of the Score object,
> especially when accessible from the Solution handle.
With the changes I have locally, you can implement the Score (better yet
HardAndSoftScore) interface and do exactly that.
The only problem is for some reason it's a lot slower and I am now
figuring out what's causing it before committing it to trunk.
>
> I'm not sure how happy I am with imposing references to the actions of
> the solver into outside facts, however. I would prefer to keep my
> inserted facts quite seperate from the solver code -- however I see
> nothing wrong with a reference inside a Move implementation. :)
I haven't started on this part yet, so these are just some ideas:
Move would have a reference to Solution and Solution would have a
reference to Score. Both seem natural.
But Token would need a reference to YourSolution, which is probably
what's bugging you since YourSolution isn't in your database (because
it's a singleton in your database anyway and all token records would
refence the same your_solution record).
But will it always remain a singleton? And don't you want to persist the
Score in the database as field in a your_solution record?
What do you think?
>
> best wishes,
>
> Andrew
>
> ---------------------------------
> Andrew Waterman
> San Cristóbal de las Casas, Chiapas, Mexico
> +52 1 967 107 5902
> +1 510 342 5693
>
>
>
>
>
>
>
>
> On Feb 21, 2009, at 5:07 AM, Geoffrey De Smet wrote:
>
>> 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
>>>> <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 - magic name of
>>>>> scoreCalculator
>>>>> To: rules-users at lists.jboss.org <mailto: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>
>>>>> <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>
>>>>>> <mailto:ge0ffrey.spam at gmail.com>>
>>>>> wrote:
>>>>>> From: Geoffrey De Smet
>>>>> <ge0ffrey.spam at gmail.com <mailto: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>
>>>>>> <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>
>>>>>>
>>>>> <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>
>>>>> <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>
>>>>> <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>
>>>>> <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 <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 <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
More information about the rules-users
mailing list