Drools - 能否执行随机动作结果的规则?

时间:2016-09-03 14:34:41

标签: drools rule-engine

是否可以定义可以随机确定哪些动作结果的规则?

例如:

rule "X"

dialect "mvel"

when

     check : tRiskCheckData( riskValue <= 5 , Money <= 50000 )

then

     %%  this action is executed to accept the request

     check.setReturnCode( 0 );  

但是,可以定义可以随机接受请求的规则吗?

如:

if  rand < 0.5
       check.setReturnCode( 0 ); %%accept the request
else 
       check.setReturnCode( 1 ); %%refuse the request

谢谢!

1 个答案:

答案 0 :(得分:1)

你应该定义一个包含java.util.Random对象的简单类Oracle,并在你可能调用的方法中使用它的nextDouble方法

boolean accept( double prob );

然后,您将此对象视为全局:

global Oracle pythia;

在调用fireAllRules:

之前设置它
kieSession.setGlobal( "pythia", new Oracle() );

并在右侧使用它:

if( pythia.accept( 0.5 ) ){
    check.setReturnCode( 0 ); // accept the request
} else { 
   check.setReturnCode( 1 );  // refuse the request
}

每个这样的决定你应该有一个随机对象,因为伪随机数的子序列可能表现出某些规律性。