[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