this.session = createSession();
SessionPseudoClock clock = session.getSessionClock();
session.insert( new Player( 1 ) );
session.insert( new Player( 2 ) );
clock.advanceTime( 3*60, TimeUnit.SECONDS );
session.insert(new EventB(1));
session.fireAllRules();
clock.advanceTime( 3*60, TimeUnit.SECONDS );
session.fireAllRules();
session.dispose();
The above code gives the following output:
no B:2 in last 2 minutes
no B:1 in last 2 minutes
what I expect is:
no B:2 in last 2 minutes
no B:2 in last 2 minutes
no B:1 in last 2 minutes
Any ideas?
Best Regards,
Kevin Zhao
2010/10/29 Wolfgang Laun <wolfgang.laun(a)gmail.com>
System.out.println( "Test no B" );
session = kBase.newStatefulKnowledgeSession( config, null );
clock = session.getSessionClock();
session.insert( new Player( 1 ) );
clock.advanceTime( 3*60, TimeUnit.SECONDS );
session.fireAllRules();
session.dispose();
The rule fires with this test, (kBase in STREAM mode).
-W
2010/10/29 赵侃侃 <kevin223(a)gmail.com>
The "no B:x for 2 minutes" will not fire if nothing comes in even after
> 2minutes. e.g. if no characters get killed then no events will come in.
> If I add a timer to this rule, say like timer (2m 1s), then the rule will
> fire every second after 2 minutes.
>
> Best Regards,
> Kevin
>
> 2010/10/29 Wolfgang Laun <wolfgang.laun(a)gmail.com>
>
>> OK; your original version somehow put me off the right track.
>> This rule will fire as soon as there is no B:n according to the
>> Player index for 2 minutes.
>>
>> rule "no B:x for 2 minutes"
>> when
>> $b : Player( $index: index )
>> not ( EventB( index == $index) over window:time( 2m ) )
>> then
>> System.out.println( "no B:" + $index + " in last 2
minutes" );
>> end
>>
>> This would fire whenever there's no B at all for 2 minutes:
>>
>> rule "no B for 2 minutes"
>> when
>> not ( EventB() over window:time( 2m ) )
>> then
>> System.out.println( "no B:" + $index + " in last 2
minutes" );
>> end
>>
>>
>>
>> 2010/10/28 赵侃侃 <kevin223(a)gmail.com>
>>
>>> My last mail should actually read:
>>>
>>> A player may have multiple characters and the rule should fire when *
>>> ALL* of its characters live longer than 2 minutes. that's why
>>> "characters" do not have a unique identification and there
isn't any event
>>> representing a character birth.
>>>
>>> Best Regards,
>>> Kevin Zhao
>>>
>>> 在 2010年10月28日 下午9:50,赵侃侃 <kevin223(a)gmail.xn--com>:-0s6m5392c
>>>
>>> A player may have multiple characters and the rule should fire when any
>>>> of its characters live longer than 2 minutes. that's why
"characters" do
>>>> not have a unique identification and there isn't any event
representing a
>>>> character birth.
>>>>
>>>> Best Regards,
>>>> Kevin Zhao
>>>>
>>>> 2010/10/28 Wolfgang Laun <wolfgang.laun(a)gmail.com>
>>>>
>>>>> If EventB( index == 3 ) signifies that the "character"
owned by player
>>>>> 3 has been killed: what is the event that this character has been
born? Life
>>>>> is the time between birth and death; these two are well-defined
(well,
>>>>> mostly) events, and they ought to be represented by clean-cut events
in any
>>>>> application. Then it's no problem to write rules firing when a
"character"
>>>>> lives longer or shorter than any time. Also, "characters"
may have to have a
>>>>> unique identification beyond their player-owner.
>>>>>
>>>>> If you are constantly shifting your specs, we won't be getting
any
>>>>> closer to a solution, though.
>>>>>
>>>>>
>>>>> -W
>>>>>
>>>>>
>>>>> 2010/10/28 赵侃侃 <kevin223(a)gmail.com>
>>>>>
>>>>>> To be honest, I don't quite understand the rules you wrote.
Let me
>>>>>> explain this a little bit with a real world scenario.
>>>>>> Assume this is an on-line game that EventB indicates a
'kill' event
>>>>>> that a player is losing its character who might be killed by some
other
>>>>>> player.
>>>>>> The property index points to the player who owns this character.
What
>>>>>> I'm looking for here is to find out when a player's
character survives in 2
>>>>>> minutes. The number of players in a game is at least 2 but can be
up to any
>>>>>> number.
>>>>>>
>>>>>> Best Regards,
>>>>>> Kevin Zhao
>>>>>>
>>>>>> 2010/10/28 Wolfgang Laun <wolfgang.laun(a)gmail.com>
>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> 2010/10/28 赵侃侃 <kevin223(a)gmail.com>
>>>>>>>
>>>>>>>> Hello Wolfgang,
>>>>>>>>
>>>>>>>> Index is just like the index in an array. the value can
be any from
>>>>>>>> 0 to the array length.
>>>>>>>> for the previous example, the length is 1 so index can be
either 0
>>>>>>>> or 1. but in the real case, the length can be an
arbitrary number.
>>>>>>>>
>>>>>>>> another question, there are 2 rules here, do both of them
have to
>>>>>>>> be applied?
>>>>>>>>
>>>>>>>
>>>>>>> One creates and inserts the PatternConsumer which blocks
repeated
>>>>>>> usage of the pair of EventB facts that have been successfully
paired.
>>>>>>> Otherwise a sequence EventB:0, EventB:1, EventB:2 would fire
2 times.
>>>>>>>
>>>>>>> If the positive condition is more complex, e.g., you need
*all*
>>>>>>> index values 0,...,L-1 within 2m, then other conditions will
be required
>>>>>>> (and that's what I meant with "more
precisesly"). If any pair a,b from
>>>>>>> [0..L-1] will do, then the modified version (!=) should be
OK.
>>>>>>>
>>>>>>> -W
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>>
>>>>>>>> Best Regards,
>>>>>>>> Kevin Zhao
>>>>>>>>
>>>>>>>> 2010/10/28 Wolfgang Laun <wolfgang.laun(a)gmail.com>
>>>>>>>>
>>>>>>>> Kindly state your requirements precisely.
>>>>>>>>>
>>>>>>>>> Perhaps
>>>>>>>>> not ( EventB ( index != $index,... )
>>>>>>>>> is what you need.
>>>>>>>>> -W
>>>>>>>>>
>>>>>>>>> 2010/10/28 赵侃侃 <kevin223(a)gmail.com>
>>>>>>>>>
>>>>>>>>> I haven't tested this rule, but what about the
case that property
>>>>>>>>>> index would have arbitrary number of possible
values?
>>>>>>>>>>
>>>>>>>>>> 2010/10/27 Wolfgang Laun
<wolfgang.laun(a)gmail.com>
>>>>>>>>>>
>>>>>>>>>>> Omitting the Entry Points:
>>>>>>>>>>>
>>>>>>>>>>> rule "B-0-1-not OK"
>>>>>>>>>>> when
>>>>>>>>>>> $b : EventB( $index: index )
>>>>>>>>>>> not ( PatternConsumer( id ==
"B01", events contains $b ) )
>>>>>>>>>>> not ( EventB( index == (1 - $index), this
after[0s,2m] $b ) )
>>>>>>>>>>> then
>>>>>>>>>>> System.out.println( "B:" +
$index + ", but no B:" +
>>>>>>>>>>> (1-$index) );
>>>>>>>>>>> end
>>>>>>>>>>>
>>>>>>>>>>> rule "B-0-1"
>>>>>>>>>>> when
>>>>>>>>>>> $b1 : EventB( $index: index )
>>>>>>>>>>> $b2 : EventB( index == (1 - $index), this
after[0s,2m] $b1 )
>>>>>>>>>>> then
>>>>>>>>>>> insert( new PatternConsumer(
"B01", $b1, $b2 ) );
>>>>>>>>>>> System.out.println( "B:" +
$index + "+B:" + (1-$index) );
>>>>>>>>>>> end
>>>>>>>>>>>
>>>>>>>>>>> -W
>>>>>>>>>>>
>>>>>>>>>>> 2010/10/27 赵侃侃 <kevin223(a)gmail.com>:
>>>>>>>>>>> > Hello,
>>>>>>>>>>> > With the help from the community I
managed to get my first
>>>>>>>>>>> rule working, and
>>>>>>>>>>> > I'm trying to write my second rule
on my own but it just
>>>>>>>>>>> doesn't seem to
>>>>>>>>>>> > work correctly.
>>>>>>>>>>> > Here is the scenario, what I want is to
identify a pattern
>>>>>>>>>>> that there's no
>>>>>>>>>>> > EventB coming in within 2 minutes with a
particular index
>>>>>>>>>>> value.
>>>>>>>>>>> > For example, EventB would have a
property named index and
>>>>>>>>>>> assume the value
>>>>>>>>>>> > of index would be either 0 or 1.
>>>>>>>>>>> > Before firing the rules, I would
manually insert facts of
>>>>>>>>>>> possibleIndex with
>>>>>>>>>>> > value 0 and 1 into the workingMemory.
>>>>>>>>>>> > Within 2 minutes, if there only comes
one EventB with index
>>>>>>>>>>> valued 0 then
>>>>>>>>>>> > the system should report no EventB
coming in with index value
>>>>>>>>>>> 1 in last 2
>>>>>>>>>>> > minutes.
>>>>>>>>>>> > Vice versa, in the case of only coming
one EventB with index
>>>>>>>>>>> valued 1 then
>>>>>>>>>>> > the system should report no EventB
coming in with index value
>>>>>>>>>>> 0 in last 2
>>>>>>>>>>> > minutes.
>>>>>>>>>>> > If within 2 minutes, there comes 2
EventB with both value 0
>>>>>>>>>>> and 1 then
>>>>>>>>>>> > nothing should report.
>>>>>>>>>>> > Here is what I wrote, but it doesn't
seem to work correctly.
>>>>>>>>>>> > I used a timer to fire this rule every
10 seconds because I
>>>>>>>>>>> don't think the
>>>>>>>>>>> > rule would run automatically if I
don't add that. (not too
>>>>>>>>>>> sure though)
>>>>>>>>>>> > rule "no B in 2 minutes"
>>>>>>>>>>> > timer (0 10s)
>>>>>>>>>>> > when
>>>>>>>>>>> > possibleIndex( $index : index ) from
entry-point "Event
>>>>>>>>>>> stream"
>>>>>>>>>>> > $p : PatternConsumer ( name == 'no
B' && index == $index )
>>>>>>>>>>> > not ( EventB( index == $index &&
this after[0ms,2m] $p) over
>>>>>>>>>>> window:time(2m)
>>>>>>>>>>> > from entry-point "Event
stream" )
>>>>>>>>>>> > then
>>>>>>>>>>> > PatternConsumer pc = new
PatternConsumer( "no B", $index );
>>>>>>>>>>> > insert(pc);
>>>>>>>>>>> > System.out.println("no B in 2
minutes " + $index);
>>>>>>>>>>> > end
>>>>>>>>>>> > Best Regards,
>>>>>>>>>>> > Kevin Zhao
>>>>>>>>>>> >
_______________________________________________
>>>>>>>>>>> > rules-users mailing list
>>>>>>>>>>> > rules-users(a)lists.jboss.org
>>>>>>>>>>> >
https://lists.jboss.org/mailman/listinfo/rules-users
>>>>>>>>>>> >
>>>>>>>>>>> >
>>>>>>>>>>>
>>>>>>>>>>>
_______________________________________________
>>>>>>>>>>> rules-users mailing list
>>>>>>>>>>> rules-users(a)lists.jboss.org
>>>>>>>>>>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> _______________________________________________
>>>>>>>>>> rules-users mailing list
>>>>>>>>>> rules-users(a)lists.jboss.org
>>>>>>>>>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> rules-users mailing list
>>>>>>>>> rules-users(a)lists.jboss.org
>>>>>>>>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> rules-users mailing list
>>>>>>>> rules-users(a)lists.jboss.org
>>>>>>>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> rules-users mailing list
>>>>>>> rules-users(a)lists.jboss.org
>>>>>>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>>>>>>
>>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> rules-users mailing list
>>>>>> rules-users(a)lists.jboss.org
>>>>>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>>>>>
>>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> rules-users mailing list
>>>>> rules-users(a)lists.jboss.org
>>>>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>>>>
>>>>>
>>>>
>>>
>>> _______________________________________________
>>> rules-users mailing list
>>> rules-users(a)lists.jboss.org
>>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>>
>>>
>>
>> _______________________________________________
>> rules-users mailing list
>> rules-users(a)lists.jboss.org
>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>
>>
>
> _______________________________________________
> rules-users mailing list
> rules-users(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/rules-users
>
>
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users