[rules-users] Different results with same fact base

raffi christian.koehler at s2008.tu-chemnitz.de
Tue Dec 4 01:38:31 EST 2012


laune wrote
> I don't see how these two loops should result in different facts in WM
> unless there
> are other rules besides the one you have shown.

Yes, there are other rules. The complete result should be 4 recommendations
for every customer (uid) from the translogs. The recommended products are
for a newsletter. 4 products (4 slots) should be shown there, that is why I
have the /slot == 1/ statement. For simplicity I only showed the rules for
slot 1.
So in the end there are 4 slots, all with one recommendation for every
customer. My rules for slot 1, are the following (always two, because there
are products within a category and brand and also only within a category):

/rule "exclude products"
	salience 25
	when
		$p	: Product(netUnitPrice < 4.00)
		or
		$p	: Product(onlineFlag == false)
	then
		retract($p);
end/

/rule "filter products with category and brand for slot 1"
	salience 20
	activation-group "productfilter slot 1"
	when
		Translog($pid : itemID, $uid : userID)
                Product(pid == $pid, brand != "", $price : netUnitPrice,
$brand : brand)
                ProductCategory(pid == $pid, $cid : cid, $root : root)
                Category(cid == $cid, $cname : cname)
                FilterCriteria(categories_slot1 contains $root)
                FilterCriteria(brands contains $brand)
                not Recommendation(pid == $pid, slot == 1, uid == $uid)
	then
		insert(new Recommendation($pid, $price, $brand, $cname, $cid, (byte)1,
$root, $uid));
end

rule "filter products only with category for slot 1"
	salience 20
	activation-group "productfilter slot 1"
	when
		Translog($pid : itemID, $uid : userID)
                Product(pid == $pid, brand == "", $price : netUnitPrice)
                ProductCategory(pid == $pid, $cid : cid, $root : root)
                Category(cid == $cid, $cname : cname)
                FilterCriteria(categories_slot1 contains $root)
                not Recommendation(pid == $pid, slot == 1, uid == $uid)
	then
		insert(new Recommendation($pid, $price, "", $cname, $cid, (byte)1, $root,
$uid));
end/

/rule "calculate recomm value for slot 1 with category and brand"
	salience 15
	activation-group "calculate slot 1"
	when
		$recomm		: Recommendation(recommValue == 0, slot == 1, brand != "", 
										$price : price, $recomm_value : recommValue,
										$brand : brand, $root : root)
		$f			: FilterCriteria()
		$cat_map	        : HashMap() from $f.getCategories_slot1()
		$brand_map	: HashMap() from $f.getBrands()
	then
		modify ($recomm) {
			setRecommValue(((Double)$cat_map.get($root)).doubleValue()
							+ ((Double)$brand_map.get($brand)).doubleValue()
							+ $price)
		};
end

rule "calculate recomm value for slot 1 only with category"
	salience 15
	activation-group "calculate slot 1"
	when
		$recomm		: Recommendation(recommValue == 0, slot == 1, brand == "", 
										$price : price, $recomm_value : recommValue,
										$root : root)
		$f			: FilterCriteria()
		$cat_map	        : HashMap() from $f.getCategories_slot1()
	then
		modify ($recomm) {
			setRecommValue(((Double)$cat_map.get($root)).doubleValue()
							+ $price)
		};
end/


laune wrote
> Why do you expect more that one result from the first (!) version of
> "recomm for slot 1"? Are there several recommendations with the same
> maximum recommValue?

Yes that is possible, but with a different /$uid/. Because there is more
than one customer, coming from the Translog-facts.


laune wrote
> rule "filter products with category and brand for slot 1" isn't optimal.
> The
> patterns should be rearranged for earliest possible blocking of
> evaluation.

OK. That makes sense to me. Does it have a positive impact on performance of
the engine?
To call fireAllRules before inserting Translog-facts makes also sense to me,
thanks for advice.

Regards...



--
View this message in context: http://drools.46999.n3.nabble.com/Different-results-with-same-fact-base-tp4021000p4021063.html
Sent from the Drools: User forum mailing list archive at Nabble.com.


More information about the rules-users mailing list