/* BE - Bayesia Engine - 2012 - Bayesia S.A.S
* www.bayesia.com
* This example is provided to show how to use the BE Modeling api.
* To use it, the BE.jar, xercesImpl.jar and xmlParserAPIs.jar must be in the classpath.
*/
import com.bayesia.api.*;
public class ExampleModeling {
public static void main(String[] args) {
if (args.length != 4) {
System.err.println("You must provide the host and port of the BayesiaLicenseServer and a user name and password corresponding to an access to the license specified on the BayesiaLicenseServer!");
System.exit(0);
}
APIModeling api = new APIModeling(args[0], Integer.parseInt(args[1]), args[2], args[3]);
api.setComment("Simple network for lumb cancer diagnosis.");
// Creates new nodes
System.out.println("Creating nodes...");
// Creates node Visit Asia
api.addChanceLabelNode("Visit Asia", new String[] {"No", "Yes"});
api.setNodeComment("Visit Asia", "Have you been in Asia recently?");
// Creates node Tuberculosis
api.addChanceLabelNode("Tuberculosis", new String[] {"No", "Yes"});
api.setNodeComment("Tuberculosis", "Do you have tuberculosis?");
// Creates node Age
float[][] intervals = new float[3][2];
intervals[0][0] = 0;
intervals[0][1] = intervals[1][0] = 35;
intervals[1][1] = intervals[2][0] = 60;
intervals[2][1] = 99;
api.addChanceIntervalNode("Age", new String[] {"<=35", "<=60", ">60"}, intervals);
api.setNodeComment("Age", "How old are you?");
// Long names are added to each state
api.setStateLongNames("Age", new String[] {"Young", "Adult", "Elderly"});
// Creates node Smoking
api.addChanceLabelNode("Smoking", new String[] {"No", "Yes"});
api.setNodeComment("Smoking", "Do you smoke?");
// Creates node Bronchitis
api.addChanceLabelNode("Bronchitis", new String[] {"No", "Yes"});
api.setNodeComment("Bronchitis", "Do you have a bronchitis?");
// Creates node Cancer
api.addChanceLabelNode("Cancer", new String[] {"No", "Yes"});
api.setNodeComment("Cancer", "Do you have a cancer?");
// Creates node Dyspnea
api.addChanceLabelNode("Dyspnea", new String[] {"No", "Yes"});
api.setNodeComment("Dyspnea", "Do you have dyspnea?");
// Creates node TbOrCa
api.addChanceLabelNode("TbOrCa", new String[] {"False", "True"});
api.setNodeComment("TbOrCa", "Do you have a cancer or tuberculosis?");
// Creates node X-Ray
api.addChanceLabelNode("X-Ray", new String[] {"Abnormal", "Normal"});
api.setNodeComment("X-Ray", "How is your X-Ray?");
// Adds relationships between nodes
System.out.println("Creating arcs...");
api.addArc("Visit Asia", "Tuberculosis");
api.addArc("Age", "Cancer");
api.addArc("Age", "Smoking");
api.addArc("Smoking", "Cancer");
api.addArc("Smoking", "Bronchitis");
api.addArc("Bronchitis", "Dyspnea");
api.addArc("Tuberculosis", "TbOrCa");
api.addArc("Cancer", "TbOrCa");
api.addArc("TbOrCa", "Dyspnea");
api.addArc("TbOrCa", "X-Ray");
// Creates the conditional probability tables
System.out.println("Creating conditional probability tables...");
double[] visitAsiaTable = new double[] {0.99, 0.01};
api.setConditionalProbabilityTable("Visit Asia", visitAsiaTable);
double[] ageTable = new double[] {0.35, 0.30, 0.35};
api.setConditionalProbabilityTable("Age", ageTable);
double[] tuberculosisTable = new double[] {0.99, 0.95, 0.01, 0.05};
api.setConditionalProbabilityTable("Tuberculosis", tuberculosisTable);
double[] smokingTable = new double[] {0.40, 0.50, 0.75, 0.60, 0.50, 0.25};
api.setConditionalProbabilityTable("Smoking", smokingTable);
double[] bronchitisTable = new double[] {0.70, 0.40, 0.30, 0.60};
api.setConditionalProbabilityTable("Bronchitis", bronchitisTable);
double[] cancerTable = new double[] {0.995, 0.99, 0.95, 0.985, 0.94, 0.85, 0.005, 0.01, 0.05, 0.015, 0.06, 0.15};
api.setConditionalProbabilityTable("Cancer", cancerTable);
double[] dyspneaTable = new double[] {0.90, 0.20, 0.30, 0.10, 0.10, 0.80, 0.70, 0.90};
api.setConditionalProbabilityTable("Dyspnea", dyspneaTable);
double[] xRayTable = new double[] {0.05, 0.98, 0.95, 0.02};
api.setConditionalProbabilityTable("X-Ray", xRayTable);
// Creates the conditional probability table of TbOrCa with a formula
api.setFormula("TbOrCa", "?Tuberculosis? OR ?Cancer?", false, 1000, 0, false, 0, false);
// Set no observation cost for TbOrCa
api.setNodeCost("TbOrCa", null);
// Display the nodes on a rectangular grid
api.arrangeNodePositions();
// Saves the network
api.save("AsiaAge.xbl");
System.out.println("Network saved as AsiaAge.xbl");
api.close();
}
} |