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