/*
* 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.degree.lpad;
import junit.framework.TestCase;
public class LpadDegreeTest extends TestCase {
public void testCombine() {
LpadDegree degree = new LpadDegree();
LpadDegree degreeA = new LpadDegree(0,1.0);
LpadDegree degreeB = new LpadDegree();
LpadDegree degreeC = new LpadDegree();
LpadDegree degreeG = new LpadDegree();
LpadDegree degree1 = new LpadDegree(1,0.1);
System.out.println("Degree on arc 1 " + degree1);
LpadDegree degree2 = new LpadDegree(2,0.2);
System.out.println("Degree on arc 2 " + degree2);
LpadDegree degree3 = new LpadDegree(3,0.3);
System.out.println("Degree on arc 3 " + degree3);
LpadDegree degree4 = new LpadDegree(4,0.4);
System.out.println("Degree on arc 4 " + degree4);
LpadDegree degree5 = new LpadDegree(5,0.5);
System.out.println("Degree on arc 5 " + degree5);
LpadDegree degree6 = new LpadDegree(6,0.6);
System.out.println("Degree on arc 6 " + degree6);
System.out.println("-------------------------------------------------------------------");
System.out.println("Degree at node A " + degreeA);
LpadDegree contrAG = LpadDegree.modusPonens(degreeA,degree1);
System.out.println("Contribution : A --> G " + contrAG);
degreeG = LpadDegree.merge(degreeG, contrAG);
LpadDegree contrAB = LpadDegree.modusPonens(degreeA,degree2);
System.out.println("Contribution : A --> B " + contrAB);
degreeB = LpadDegree.merge(degreeB, contrAB);
LpadDegree contrAC = LpadDegree.modusPonens(degreeA,degree3);
System.out.println("Contribution : A --> C " + contrAC);
degreeC = LpadDegree.merge(degreeC, contrAC);
System.out.println("Degree at node C " + degreeC);
LpadDegree contrCB = LpadDegree.modusPonens(degreeC,degree4);
System.out.println("Contribution : C --> B " + contrCB);
degreeB = LpadDegree.merge(degreeB, contrCB);
System.out.println("Degree at node B " + degreeB);
LpadDegree contrBG = LpadDegree.modusPonens(degreeB,degree5);
System.out.println("Contribution : B --> G " + contrBG);
degreeG = LpadDegree.merge(degreeG, contrBG);
LpadDegree contrCG = LpadDegree.modusPonens(degreeC,degree6);
System.out.println("Contribution : C --> G " + contrCG);
degreeG = LpadDegree.merge(degreeG, contrCG);
System.out.println("Degree at node G " + degreeG);
System.out.println("-------------------------------------------------------------------");
double a = degreeA.asSimpleDegree().getValue();
double b = degreeB.asSimpleDegree().getValue();
double c = degreeC.asSimpleDegree().getValue();
double g = degreeG.asSimpleDegree().getValue();
System.out.println("-------------------------------------------------------------------");
System.out.println("SIMPLE Degree at node A " + a);
System.out.println("SIMPLE Degree at node B " + b);
System.out.println("SIMPLE Degree at node C " + c);
System.out.println("SIMPLE Degree at node G " + g);
assertEquals(1.0,a);
assertEquals(0.296,b);
assertEquals(0.3,c);
assertEquals(0.35308,g);
}
public void testCombine2() {
LpadDegree degree = new LpadDegree();
LpadDegree degreeS = new LpadDegree(0,1.0);
LpadDegree degreeA = new LpadDegree();
LpadDegree degreeB = new LpadDegree();
LpadDegree degreeC = new LpadDegree();
LpadDegree degreeE = new LpadDegree();
LpadDegree degree1 = new LpadDegree(1,0.1);
System.out.println("Degree on arc 1 " + degree1);
LpadDegree degree2 = new LpadDegree(2,0.2);
System.out.println("Degree on arc 2 " + degree2);
LpadDegree degree3 = new LpadDegree(3,0.3);
System.out.println("Degree on arc 3 " + degree3);
LpadDegree degree4 = new LpadDegree(4,0.3);
System.out.println("Degree on arc 4 " + degree4);
LpadDegree degree5 = new LpadDegree(5,0.2);
System.out.println("Degree on arc 5 " + degree5);
LpadDegree degree6 = new LpadDegree(6,0.4);
System.out.println("Degree on arc 6 " + degree6);
System.out.println("-------------------------------------------------------------------");
System.out.println("Degree at node A " + degreeA);
LpadDegree contrSA = LpadDegree.modusPonens(degreeS,degree1);
System.out.println("Contribution : S --> A " + contrSA);
degreeA = LpadDegree.merge(degreeA, contrSA);
LpadDegree contrAB = LpadDegree.modusPonens(degreeA,degree2);
System.out.println("Contribution : A --> B " + contrAB);
degreeB = LpadDegree.merge(degreeB, contrAB);
LpadDegree contrAC = LpadDegree.modusPonens(degreeA,degree4);
System.out.println("Contribution : A --> C " + contrAC);
degreeC = LpadDegree.merge(degreeC, contrAC);
// System.out.println("Degree at node B " + degreeB);
System.out.println("Degree at node A " + degreeA);
LpadDegree contrBA = LpadDegree.modusPonens(degreeB,degree3);
System.out.println("Contribution : B --> A " + contrBA);
degreeA = LpadDegree.merge(degreeA, contrBA);
LpadDegree contrCA = LpadDegree.modusPonens(degreeC,degree5);
System.out.println("Contribution : C --> A " + contrCA);
degreeA = LpadDegree.merge(degreeA, contrCA);
System.out.println("Degree at node A " + degreeA);
LpadDegree contrAE = LpadDegree.modusPonens(degreeA,degree6);
System.out.println("Contribution : A --> E " + contrAE);
degreeE = LpadDegree.merge(degreeE, contrAE);
System.out.println("Degree at node E " + degreeE);
System.out.println("-------------------------------------------------------------------");
// double s = degreeS.asSimpleDegree().getValue();
// double a = degreeA.asSimpleDegree().getValue();
// double b = degreeB.asSimpleDegree().getValue();
// double c = degreeC.asSimpleDegree().getValue();
double e = degreeE.asSimpleDegree().getValue();
System.out.println("-------------------------------------------------------------------");
// System.out.println("SIMPLE Degree at node S " + s);
// System.out.println("SIMPLE Degree at node A " + a);
// System.out.println("SIMPLE Degree at node B " + b);
// System.out.println("SIMPLE Degree at node C " + c);
System.out.println("SIMPLE Degree at node E " + e);
// assertEquals(1.0,a);
// assertEquals(0.296,b);
// assertEquals(0.3,c);
// assertEquals(0.35308,g);
}
}