[rules-users] How to track constraint truth [was: Non short circuit ANDing]
Wolfgang Laun
wolfgang.laun at gmail.com
Mon Feb 4 05:36:00 EST 2013
Anyway, I can experiment nicely with my hack, and this would be a good
starting point for investigating what kind of support users might need.
Given the definition of a rule set:
new RuleSet( "com.sample", "car" )
.add(new BasicPattern( "car", Car.class ) )
.addSplit( "colour == 'red', price < 2000, horsepower >= 150, abs
== true" );
and Car facts
new Car( "HotRod 1", "red", 1200, 160, true );
new Car( "HotRod 2", "red", 1100, 140, true );
new Car( "HotRod 3", "black", 3000, 100, false );
You might add evaluation rules such as the ones below, likely examples
for what users might require:
rule "success, or near miss"
when
$c: Collector( "car"; failureCount <= 1 )
then
System.out.println( "Candidate for the car I want: " + $c.get( "car" ) );
$c.missing();
end
------------------------------
Candidate for the car I want: Car [id = HotRod 1, colour=red,
price=1200, horsepower=160, abs=true]
Candidate for the car I want: Car [id = HotRod 2, colour=red,
price=1100, horsepower=140, abs=true]
missed: horsepower >= 150 in Car, values: getHorsepower() = 140
-------------------------------
rule "no chance"
when
$c: Collector( "car"; successCount == 0 )
then
System.out.println( "Absolutely not: " + $c.get( "car" ) );
$c.missing();
end
-------------------------------
Absolutely not: Car [id = HotRod 3, colour=black, price=3000,
horsepower=100, abs=false]
missed: colour == 'red' in Car, values: getColour() = black
missed: price < 2000 in Car, values: getPrice() = 3000
missed: horsepower >= 150 in Car, values: getHorsepower() = 100
missed: abs == true in Car, values: isAbs() = false
-------------------------------
rule "collect good offers"
when
accumulate( $c: Collector( "car"; failureCount <= 1 ), $list:
collectList( $c.get("car") ) )
then
System.out.println( "Summary:" );
for( Object object: $list ) System.out.println( (Car)object );
end
-------------------------------
Summary:
Car [id = HotRod 2, colour=red, price=1100, horsepower=140, abs=true]
Car [id = HotRod 1, colour=red, price=1200, horsepower=160, abs=true]
-------------------------------
On 04/02/2013, Davide Sottara <dsotty at gmail.com> wrote:
> Hi Wolfgang,
> We're more on the same page than it might seem... :)
> The new - experimental - syntax was reviewed several times to make sure it
> was semantically
> equivalent (and thus replaceable) to an appropriate set of rules extending
> each other
> (see the links I posted previously), which in this case would be exactly
> the
> ones you recommended.
>
> It is just meant to be more compact - possibly facilitating its generation
> by builders or templates -
> but at the same time it supports a built-in implementation.
>
> It is however more general than this use case, which could use some extra
> automation as far as the
> management of the evaluations is concerned.
> Or, none at all, letting users adopt whatever solution is more appropriate.
>
> You suggested a more general CollectorFact, I used the more granular
> Fulfill/Viol...
> from a certain perspective they're equivalent, and definitely not the only
> option :)
> Davide
>
>
>
> --
> View this message in context:
> http://drools.46999.n3.nabble.com/rules-users-How-to-track-constraint-truth-was-Non-short-circuit-ANDing-tp4022021p4022031.html
> Sent from the Drools: User forum mailing list archive at Nabble.com.
> _______________________________________________
> 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