package org.drools.chance.kbase.usecases; import org.drools.chance.Chance; import org.drools.chance.common.ChanceStrategyFactory; import org.drools.chance.kbase.AbstractChanceTest; import org.drools.chance.rule.constraint.core.connectives.factories.fuzzy.linguistic.FuzzyConnectiveFactory; import org.drools.factmodel.traits.TraitFactory; import org.drools.runtime.StatefulKnowledgeSession; import org.drools.time.SessionPseudoClock; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; import java.util.Map; import java.util.Random; import java.util.concurrent.TimeUnit; import static junit.framework.Assert.assertEquals; public class ImperfectECTest extends AbstractChanceTest { @BeforeClass public static void setFactories() { Chance.initialize(); } @Test public void testEC() throws InterruptedException { String[] drls = new String[] { "org/drools/chance/ec/testEC.drl" }; StatefulKnowledgeSession kSession = initBasicChanceTest( drls ); Map map = (Map) kSession.getGlobal( MAP ); kSession.fireAllRules(); kSession.getWorkingMemoryEntryPoint( "hour" ).insert(20.5); kSession.fireAllRules(); kSession.getWorkingMemoryEntryPoint( "hour" ).insert(21.0); kSession.fireAllRules(); kSession.insert( "check" ); kSession.fireAllRules(); assertEquals(1, map.size()); assertEquals( 0.75 , (Double) map.get( "EC" ), 1e-6 ); } @Test @Ignore public void testEC2() throws InterruptedException { Random rand = new Random(); rand.setSeed(123456); ChanceStrategyFactory.setDefaultFactory( new FuzzyConnectiveFactory() ); String[] drls = new String[] { "org/drools/chance/ec/EC_Fuzzy.drl", "org/drools/chance/ec/testEC2.drl" }; StatefulKnowledgeSession kSession = initTimedChanceTest(drls, false); SessionPseudoClock clock = (SessionPseudoClock) kSession.getSessionClock(); Map map = (Map) kSession.getGlobal( MAP ); kSession.setGlobal( "clock", clock ); kSession.fireAllRules(); int T; T = 20; for ( int j = 0; j < T; j++ ) { clock.advanceTime( 1, TimeUnit.SECONDS ); System.out.println( "Time is now " + clock.getCurrentTime() ); kSession.getWorkingMemoryEntryPoint( "handY" ).insert( 5.0*j + rand.nextGaussian() ); kSession.fireAllRules(); } T = 10; for ( int j = 0; j < T; j++ ) { clock.advanceTime(1, TimeUnit.SECONDS); System.out.println( "Time is now " + clock.getCurrentTime() ); kSession.getWorkingMemoryEntryPoint( "handY" ).insert(100.0 + 10 * rand.nextGaussian()); kSession.fireAllRules(); } T = 12; for ( int j = 0; j < T; j++ ) { clock.advanceTime( 1, TimeUnit.SECONDS ); System.out.println( "Time is now " + clock.getCurrentTime() ); kSession.getWorkingMemoryEntryPoint( "handY" ).insert(100.0 - 5.0 * j + rand.nextGaussian()); kSession.fireAllRules(); } System.err.println( reportWMObjects( kSession ) ); kSession.insert( "check" ); kSession.fireAllRules(); } }