/*
* Copyright 2011 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.drools.chance.distribution.belief;
import org.drools.chance.common.ChanceStrategyFactory;
import org.drools.chance.degree.DegreeType;
import org.drools.chance.distribution.belief.discrete.TBM;
import org.drools.chance.distribution.belief.discrete.TBMStrategyFactory;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class TBMStrategyFactoryTest {
@BeforeClass
public static void init() {
ChanceStrategyFactory.initDefaults();
String str = "{A,B}/0.3, {A}/0.2, {B,C,D}/0.1, {C,D}/0.35";
tbm = (TBM<String>) new TBMStrategyFactory<String>().buildStrategies( DegreeType.SIMPLE, String.class ).parse( str );
}
private static TBM tbm;
@Test
public void testDegree() {
assertEquals( 0.3, tbm.getDegree( "B", "A" ).getValue(), 1e-16 );
assertEquals( 0.3, tbm.getDegree( "A", "B" ).getValue(), 1e-16 );
assertEquals( 0.2, tbm.getDegree( "A" ).getValue(), 1e-16 );
assertEquals( 0.1, tbm.getDegree( "B", "C", "D" ).getValue(), 1e-16 );
assertEquals( 0.1, tbm.getDegree( "C", "D", "B" ).getValue(), 1e-16 );
assertEquals( 0.1, tbm.getDegree( "C", "B", "D" ).getValue(), 1e-16 );
assertEquals( 0.35, tbm.getDegree( "C", "D" ).getValue(), 1e-16 );
assertEquals( 0.35, tbm.getDegree( "D", "C" ).getValue(), 1e-16 );
assertEquals( 5, tbm.size() );
assertEquals( 4, tbm.universeSize() );
assertEquals( 16, tbm.domainSize().intValue() );
System.out.println( tbm );
}
@Test
public void testBelief() {
assertEquals( 0.5, tbm.getBelief( "B", "A" ).getValue(), 1e-16 );
assertEquals( 0.5, tbm.getBelief( "A", "B" ).getValue(), 1e-16 );
assertEquals( 0.2, tbm.getBelief( "A" ).getValue(), 1e-16 );
assertEquals( 0.45, tbm.getBelief( "B", "C", "D" ).getValue(), 1e-16 );
assertEquals( 0.45, tbm.getBelief( "C", "D", "B" ).getValue(), 1e-16 );
assertEquals( 0.45, tbm.getBelief( "C", "B", "D" ).getValue(), 1e-16 );
assertEquals( 0.35, tbm.getBelief( "C", "D" ).getValue(), 1e-16 );
assertEquals( 0.35, tbm.getBelief( "D", "C" ).getValue(), 1e-16 );
assertEquals( 1.0, tbm.getBelief( "D", "C", "B", "A" ).getValue(), 1e-16 );
System.out.println( tbm );
}
@Test
public void testPlausibility() {
assertEquals( 0.65, tbm.getPlausibility( "B", "A" ).getValue(), 1e-16 );
assertEquals( 0.65, tbm.getPlausibility( "A", "B" ).getValue(), 1e-16 );
assertEquals( 0.55, tbm.getPlausibility( "A" ).getValue(), 1e-16 );
assertEquals( 0.8, tbm.getPlausibility( "B", "C", "D" ).getValue(), 1e-16 );
assertEquals( 0.8, tbm.getPlausibility( "C", "D", "B" ).getValue(), 1e-16 );
assertEquals( 0.8, tbm.getPlausibility( "C", "B", "D" ).getValue(), 1e-16 );
assertEquals( 0.5, tbm.getPlausibility( "C", "D" ).getValue(), 1e-16 );
assertEquals( 0.5, tbm.getPlausibility( "D", "C" ).getValue(), 1e-16 );
assertEquals( 1.0, tbm.getPlausibility( "D", "C", "B", "A" ).getValue(), 1e-16 );
System.out.println( tbm );
}
String str = "{A,B}/0.3, {A}/0.2, {B,C,D}/0.1, {C,D}/0.35";
@Test
@Ignore
public void testCommonality() {
assertEquals( 0.35, tbm.getCommonality( "B", "A" ).getValue(), 1e-16 );
assertEquals( 0.35, tbm.getCommonality( "A", "B" ).getValue(), 1e-16 );
assertEquals( 0.55, tbm.getCommonality( "A" ).getValue(), 1e-16 );
assertEquals( 0.15, tbm.getCommonality( "B", "C", "D" ).getValue(), 1e-16 );
assertEquals( 0.15, tbm.getCommonality( "C", "D", "B" ).getValue(), 1e-16 );
assertEquals( 0.15, tbm.getCommonality( "C", "B", "D" ).getValue(), 1e-16 );
assertEquals( 0.5, tbm.getCommonality( "C", "D" ).getValue(), 1e-16 );
assertEquals( 0.5, tbm.getCommonality( "D", "C" ).getValue(), 1e-16 );
assertEquals( 1.0, tbm.getCommonality( "D", "C", "B", "A" ).getValue(), 1e-16 );
System.out.println( tbm );
}
}