[rules-users] Drools 6.0.0 activation-group + salience bug or feature?

Mark Proctor mproctor at codehaus.org
Tue May 6 19:49:20 EDT 2014


That’s what an activation-group does. The first rule (with the highest salience) fires, the others are cancelled.

Out of interest, what’s the game? Something online we can look at? I have an interest in games development for Drools, and have been slowly adding examples. Space invaders was my latest one:
https://www.youtube.com/watch?v=wORlAZoxttA
https://github.com/droolsjbpm/drools/tree/master/drools-examples/src/main/java/org/drools/games/invaders

Mark
On 6 May 2014, at 23:12, Jan Šťastný <newohybat at gmail.com> wrote:

> Hi,
> I came across in my view strange behaviour of rules defined with 
> activation-group and salience. I use this combination to set the 
> priority of exclusively fired rules "Democracy City Tiles Production" 
> and "Basic City Tiles Production".
> Their definitions:
> rule "Democracy City Tiles Production"
>     dialect "mvel"
>     ruleflow-group "manageProductions"
>     activation-group "cityProduction"
>     salience 5
>     when
>         PlayerDTO($owner:id, government=="democracy")
>         $city:CityDTO(
>             owner==$owner
>             ,$cityId:id
>             ,$managedTiles:managedTiles
>         )
>         accumulate(
>                     TileDTO (
>                             id memberOf $managedTiles
>                             ,$foodProd:foodProduction
>                             ,$resourcesProd:resourcesProduction
>                             ,$tradeProd:tradeProduction
>                     ) 
> @watch(foodProduction,resourcesProduction,tradeProduction)
>                     ,$sumFood : sum($foodProd)
>                     ,$sumResources : sum($resourcesProd)
>                     ,$sumTrade : 
> sum(($tradeProd<1)?$tradeProd:($tradeProd+1))
>         )
>         UpdateCityProduction(cityId==$cityId)
>     then
>         modify($city){
>             setFoodProduction($sumFood)
>             ,setResourcesProduction($sumResources)
>             ,setTradeProduction($sumTrade)
>         }
> end
> 
> and
> 
> rule "Basic City Tiles Production"
>     dialect "mvel"
>     ruleflow-group "manageProductions"
>     activation-group "cityProduction"
>     when
>         PlayerDTO($owner:id)
>         $city:CityDTO(
>             owner==$owner
>             ,$cityId:id
>             ,$managedTiles:managedTiles
>         )
>         accumulate(
>                     TileDTO (
>                             id memberOf $managedTiles
>                             ,$foodProd:foodProduction
>                             ,$resourcesProd:resourcesProduction
>                             ,$tradeProd:tradeProduction
>                     ) 
> @watch(foodProduction,resourcesProduction,tradeProduction)
>                     ,$sumFood : sum($foodProd)
>                     ,$sumResources : sum($resourcesProd)
>                     ,$sumTrade : sum($tradeProd)
>         )
>         UpdateCityProduction(cityId==$cityId)
>     then
>         modify($city){
>             setFoodProduction($sumFood)
>             ,setResourcesProduction($sumResources)
>             ,setTradeProduction($sumTrade)
>         }
> end
> 
> But problem occurs when two CityDTO objects are in the session. I would 
> like to fire one rule for each CityDTO, but the activation-group cancels 
> all the activations after first is fired. So only one activation in 
> place of two fires. Here is the log:
> 
> ==>[BeforeActivationFiredEvent:  getActivation()=[[ Democracy City Tiles 
> Production active=false ] [ [fact 
> 0:12:36803987:36803987:12:DEFAULT:NON_TRAIT:UpdateCityProduction( 
> cityId=5 )]
> [fact 
> 0:16:2083264739:2083264739:16:null:NON_TRAIT:[Ljava.lang.Object;@7c2c18e3]
> [fact 0:11:792938926:966:11:DEFAULT:NON_TRAIT:CityDTO [id=5, 
> name=marefy, cityCentre=null, owner=1, improvements=[], 
> currentImprovement=null, enabledImprovements=[], homeUnits=[], 
> currentUnit=null, enabledUnitTypes=[], tradeRoutes=[], managedTiles=[1, 
> 2], size=5, weLoveDay=false, disorder=false, foodProduction=0, 
> foodConsumption=0, foodSurplus=0, foodStock=0, resourcesProduction=0, 
> resourcesConsumption=0, resourcesSurplus=null, tradeProduction=0, 
> corruption=0, luxuriesAmount=0, luxuriesSpent=0, taxesAmount=0, 
> researchAmount=0, peopleHappy=2, peopleUnhappy=1, peopleContent=1, 
> peopleEntertainers=0, peopleTaxmen=1, peopleScientists=0, 
> pollutionChance=0, improvementsUpkeep=0, unitsSupport=0]]
> [fact 0:9:1762763035:99463566:9:DEFAULT:NON_TRAIT:PlayerDTO [id=1, 
> name=honza, government=democracy, enabledGovernments=null, 
> currentAdvance=null, advances=null, enabledAdvances=null, treasury=0, 
> research=0, researchSpent=null, turnsAvailable=null, luxuriesRatio=0, 
> taxesRatio=0, researchRatio=0]] ] ], 
> getKnowledgeRuntime()=org.drools.core.impl.StatefulKnowledgeSessionImpl at 6a5b07f2]
> ==>[ActivationCancelledEvent: getCause()=CLEAR, getActivation()=[[ Basic 
> City Tiles Production active=false ] [ [fact 
> 0:15:807492131:807492131:15:null:NON_TRAIT:[Ljava.lang.Object;@30215a23]
> [fact 0:11:792938926:966:11:DEFAULT:NON_TRAIT:CityDTO [id=5, 
> name=marefy, cityCentre=null, owner=1, improvements=[], 
> currentImprovement=null, enabledImprovements=[], homeUnits=[], 
> currentUnit=null, enabledUnitTypes=[], tradeRoutes=[], managedTiles=[1, 
> 2], size=5, weLoveDay=false, disorder=false, foodProduction=0, 
> foodConsumption=0, foodSurplus=0, foodStock=0, resourcesProduction=0, 
> resourcesConsumption=0, resourcesSurplus=null, tradeProduction=0, 
> corruption=0, luxuriesAmount=0, luxuriesSpent=0, taxesAmount=0, 
> researchAmount=0, peopleHappy=2, peopleUnhappy=1, peopleContent=1, 
> peopleEntertainers=0, peopleTaxmen=1, peopleScientists=0, 
> pollutionChance=0, improvementsUpkeep=0, unitsSupport=0]]
> [fact 0:12:36803987:36803987:12:DEFAULT:NON_TRAIT:UpdateCityProduction( 
> cityId=5 )] ] ], 
> getKnowledgeRuntime()=org.drools.core.impl.StatefulKnowledgeSessionImpl at 6a5b07f2]
> ==>[ActivationCancelledEvent: getCause()=CLEAR, getActivation()=[[ Basic 
> City Tiles Production active=false ] [ [fact 
> 0:23:833001332:833001332:23:null:NON_TRAIT:[Ljava.lang.Object;@31a69774]
> [fact 0:18:1816369501:968:18:DEFAULT:NON_TRAIT:CityDTO [id=7, name=Brno, 
> cityCentre=null, owner=1, improvements=[], currentImprovement=null, 
> enabledImprovements=[], homeUnits=[], currentUnit=null, 
> enabledUnitTypes=[], tradeRoutes=[], managedTiles=[3, 4], size=1, 
> weLoveDay=false, disorder=false, foodProduction=0, foodConsumption=0, 
> foodSurplus=0, foodStock=0, resourcesProduction=0, 
> resourcesConsumption=0, resourcesSurplus=null, tradeProduction=0, 
> corruption=0, luxuriesAmount=0, luxuriesSpent=0, taxesAmount=0, 
> researchAmount=0, peopleHappy=0, peopleUnhappy=0, peopleContent=1, 
> peopleEntertainers=0, peopleTaxmen=0, peopleScientists=0, 
> pollutionChance=0, improvementsUpkeep=0, unitsSupport=0]]
> [fact 
> 0:20:1314789527:1314789527:20:DEFAULT:NON_TRAIT:UpdateCityProduction( 
> cityId=7 )] ] ], 
> getKnowledgeRuntime()=org.drools.core.impl.StatefulKnowledgeSessionImpl at 6a5b07f2]
> ==>[ActivationCancelledEvent: getCause()=CLEAR, getActivation()=[[ 
> Democracy City Tiles Production active=false ] [ [fact 
> 0:20:1314789527:1314789527:20:DEFAULT:NON_TRAIT:UpdateCityProduction( 
> cityId=7 )]
> [fact 
> 0:19:1857434733:1857434733:19:null:NON_TRAIT:[Ljava.lang.Object;@6eb6346d]
> [fact 0:18:1816369501:968:18:DEFAULT:NON_TRAIT:CityDTO [id=7, name=Brno, 
> cityCentre=null, owner=1, improvements=[], currentImprovement=null, 
> enabledImprovements=[], homeUnits=[], currentUnit=null, 
> enabledUnitTypes=[], tradeRoutes=[], managedTiles=[3, 4], size=1, 
> weLoveDay=false, disorder=false, foodProduction=0, foodConsumption=0, 
> foodSurplus=0, foodStock=0, resourcesProduction=0, 
> resourcesConsumption=0, resourcesSurplus=null, tradeProduction=0, 
> corruption=0, luxuriesAmount=0, luxuriesSpent=0, taxesAmount=0, 
> researchAmount=0, peopleHappy=0, peopleUnhappy=0, peopleContent=1, 
> peopleEntertainers=0, peopleTaxmen=0, peopleScientists=0, 
> pollutionChance=0, improvementsUpkeep=0, unitsSupport=0]]
> [fact 0:9:1762763035:99463566:9:DEFAULT:NON_TRAIT:PlayerDTO [id=1, 
> name=honza, government=democracy, enabledGovernments=null, 
> currentAdvance=null, advances=null, enabledAdvances=null, treasury=0, 
> research=0, researchSpent=null, turnsAvailable=null, luxuriesRatio=0, 
> taxesRatio=0, researchRatio=0]] ] ], 
> getKnowledgeRuntime()=org.drools.core.impl.StatefulKnowledgeSessionImpl at 6a5b07f2]
> 
> 
> Is it a bug?
> Thanks
> Jan
> _______________________________________________
> 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