package trust.jfcm.examples;
import java.text.NumberFormat;
import java.util.Locale;
import java.io.InputStream;
import trust.jfcm.*;
import trust.jfcm.utils.FcmIO;
import trust.jfcm.utils.FcmRunner;
import trust.jfcm.utils.SimpleFcmRunner;
public class MedicalVisit {
FcmRunner runner;
CognitiveMap map;
public MedicalVisit() {
//String fcm_xml = "sociocog-trust.fcm-Emergency.xml";
String fcm_xml = "sociocog-trust.fcm-Routine.xml";
try{
InputStream xmlStream = getClass().getResourceAsStream(fcm_xml);
map = FcmIO.loadMapFromXml(xmlStream).get("sociocog-trust-tanh");
//map = FcmIO.loadMapFromXml(xmlStream).get("sociocog-trust-sigmoid");
runner = new SimpleFcmRunner(map, 0.000001, 1000);
System.out.println(map);
System.out.println("Trying to clone map...");
map = (CognitiveMap) map.clone();
runner = new SimpleFcmRunner(map, 0.000001, 1000);
System.out.println(map);
} catch(Exception e){
// TODO Auto-generated catch block
System.out.println("The resource:\'" + fcm_xml + "\' could not be located ");
e.printStackTrace();
}
}
/**
* Scenario for the Medical Doctor Pag 320
* @throws Exception
*/
public void set_scenario_Doctor() throws Exception {
map.resetConcepts();
//BELIEFS
//check if node ability exists
if(map.getConcepts().containsKey("ability")){
map.getConcepts().get("ab_de").setOutput(0.3);
map.getConcepts().get("ab_de").setFixedOutput(true);
map.getConcepts().get("ab_c").setOutput(0.7);
map.getConcepts().get("ab_c").setFixedOutput(true);
map.getConcepts().get("ab_r").setOutput(0.0);
map.getConcepts().get("ab_r").setFixedOutput(true);
map.getConcepts().get("ab_o_r").setOutput(0.0);
map.getConcepts().get("ab_o_r").setFixedOutput(true);
}
//check if node availability exists
if(map.getConcepts().containsKey("availability")){
map.getConcepts().get("av_de").setOutput(-0.3);
map.getConcepts().get("av_de").setFixedOutput(true);
map.getConcepts().get("av_c").setOutput(0.0);
map.getConcepts().get("av_c").setFixedOutput(true);
map.getConcepts().get("av_r").setOutput(0.0);
map.getConcepts().get("av_r").setFixedOutput(true);
map.getConcepts().get("av_o_r").setOutput(0.0);
map.getConcepts().get("av_o_r").setFixedOutput(true);
}
//check if node unharmfulness exists
if(map.getConcepts().containsKey("unharmfulness")){
map.getConcepts().get("un_de").setOutput(-0.2);
map.getConcepts().get("un_de").setFixedOutput(true);
map.getConcepts().get("un_c").setOutput(0.0);
map.getConcepts().get("un_c").setFixedOutput(true);
map.getConcepts().get("un_r").setOutput(0.0);
map.getConcepts().get("un_r").setFixedOutput(true);
map.getConcepts().get("un_o_r").setOutput(0.0);
map.getConcepts().get("un_o_r").setFixedOutput(true);
}
//check if node opportunity exists
if(map.getConcepts().containsKey("opportunity")){
map.getConcepts().get("op_de").setOutput(0.0);
map.getConcepts().get("op_de").setFixedOutput(true);
map.getConcepts().get("op_c").setOutput(0.0);
map.getConcepts().get("op_c").setFixedOutput(true);
map.getConcepts().get("op_r").setOutput(0.2);
map.getConcepts().get("op_r").setFixedOutput(true);
map.getConcepts().get("op_o_r").setOutput(0.0);
map.getConcepts().get("op_o_r").setFixedOutput(true);
}
// check if node danger exists
if(map.getConcepts().containsKey("danger")){
map.getConcepts().get("da_de").setOutput(0.0);
map.getConcepts().get("da_de").setFixedOutput(true);
map.getConcepts().get("da_c").setOutput(0.0);
map.getConcepts().get("da_c").setFixedOutput(true);
map.getConcepts().get("da_r").setOutput(-0.2);
map.getConcepts().get("da_r").setFixedOutput(true);
map.getConcepts().get("da_o_r").setOutput(0.0);
map.getConcepts().get("da_o_r").setFixedOutput(true);
}
}
/**
* Scenario for the Medical Machine Pag 320
* @throws Exception
*/
public void set_scenario_Machine() throws Exception {
map.resetConcepts();
//check if node ability exists
if(map.getConcepts().containsKey("ability")){
map.getConcepts().get("ab_de").setOutput(0.0);
map.getConcepts().get("ab_de").setFixedOutput(true);
map.getConcepts().get("ab_c").setOutput(0.6);
map.getConcepts().get("ab_c").setFixedOutput(true);
map.getConcepts().get("ab_r").setOutput(0.0);
map.getConcepts().get("ab_r").setFixedOutput(false);
map.getConcepts().get("ab_o_r").setOutput(0.0);
map.getConcepts().get("ab_o_r").setFixedOutput(true);
}
//check if node availability exists
if(map.getConcepts().containsKey("availability")){
map.getConcepts().get("av_de").setOutput(0.0);
map.getConcepts().get("av_de").setFixedOutput(true);
map.getConcepts().get("av_c").setOutput(0.6);
map.getConcepts().get("av_c").setFixedOutput(true);
map.getConcepts().get("av_r").setOutput(0.0);
map.getConcepts().get("av_r").setFixedOutput(true);
map.getConcepts().get("av_o_r").setOutput(0.0);
map.getConcepts().get("av_o_r").setFixedOutput(true);
}
//check if node unharmfulness exists
if(map.getConcepts().containsKey("unharmfulness")){
map.getConcepts().get("un_de").setOutput(0.0);
map.getConcepts().get("un_de").setFixedOutput(true);
map.getConcepts().get("un_c").setOutput(-0.3);
map.getConcepts().get("un_c").setFixedOutput(true);
map.getConcepts().get("un_r").setOutput(0.0);
map.getConcepts().get("un_r").setFixedOutput(true);
map.getConcepts().get("un_o_r").setOutput(0.0);
map.getConcepts().get("un_o_r").setFixedOutput(true);
}
//check if node opportunity exists
if(map.getConcepts().containsKey("opportunity")){
map.getConcepts().get("op_de").setOutput(0.0);
map.getConcepts().get("op_de").setFixedOutput(true);
map.getConcepts().get("op_c").setOutput(0.0);
map.getConcepts().get("op_c").setFixedOutput(true);
map.getConcepts().get("op_r").setOutput(0.2);
map.getConcepts().get("op_r").setFixedOutput(true);
map.getConcepts().get("op_o_r").setOutput(0.0);
map.getConcepts().get("op_o_r").setFixedOutput(true);
}
// check if node danger exists
if(map.getConcepts().containsKey("danger")){
map.getConcepts().get("da_de").setOutput(0.0);
map.getConcepts().get("da_de").setFixedOutput(true);
map.getConcepts().get("da_c").setOutput(-0.3);
map.getConcepts().get("da_c").setFixedOutput(true);
map.getConcepts().get("da_r").setOutput(-0.3);
map.getConcepts().get("da_r").setFixedOutput(true);
map.getConcepts().get("da_o_r").setOutput(0.0);
map.getConcepts().get("da_o_r").setFixedOutput(true);
}
}
public void test_scenario_Machine(boolean partialTree) throws Exception {
// TODO Auto-generated method stub
set_scenario_Machine();
// run map and show results
System.out.println("\n Initial values:" + map.toString() + "\n ");
showResults("Scenario-Machine", runner.converge());
System.out.println("\n\n***********\n Trust is:\n" + map.getConcepts().get("trust").getOutput() + "\n***********");
if(partialTree){
/* WITHOUT DANGER */
//reset scenario
set_scenario_Machine();
/* remove Danger subtree */
map.removeConnection("da_ef");
map.removeConcept("danger");
//run map and show results
System.out.println("--------------Partial Tree without Danger------------------");
System.out.println("\n Initial values:" + map.toString() + "\n ");
showResults("Scenario-Machine", runner.converge());
System.out.println("\n\n***********\n Trust (without Danger) is:\n" + map.getConcepts().get("trust").getOutput() + "\n***********");
/* WITHOUT DANGER and OPPORTUNITY */
//reset scenario
set_scenario_Machine();
/* remove opportinity subtree */
map.removeConnection("op_ef");
map.removeConcept("opportunity");
//run map and show results
System.out.println("--------------Partial Tree without Danger and Opportunity------------------");
System.out.println("\n Initial values:" + map.toString() + "\n ");
showResults("Scenario-Machine", runner.converge());
System.out.println("\n\n***********\n Trust (without Danger and Opportunity) is:\n" + map.getConcepts().get("trust").getOutput() + "\n***********");
/* WITHOUT DANGER and OPPORTUNITY and UNHARMFULNESS */
//reset scenario
set_scenario_Machine();
/* remove opportinity subtree */
map.removeConnection("un_if");
map.removeConcept("unharmfulness");
//run map and show results
System.out.println("--------------Partial Tree without Danger and Opportunity and Unharmfulness------------------");
System.out.println("\n Initial values:" + map.toString() + "\n ");
showResults("Scenario-Machine", runner.converge());
System.out.println("\n\n***********\n Trust (without Danger and Opportunity and Unharmfulness) is:\n" + map.getConcepts().get("trust").getOutput() + "\n***********");
/* WITHOUT DANGER and OPPORTUNITY and UNHARMFULNESS */
//reset scenario
set_scenario_Machine();
/* remove opportinity subtree */
map.removeConnection("av_if");
map.removeConcept("availability");
//run map and show results
System.out.println("--------------Partial Tree without Danger and Opportunity and Unharmfulness and Availability------------------");
System.out.println("\n Initial values:" + map.toString() + "\n ");
showResults("Scenario-Machine", runner.converge());
System.out.println("\n\n***********\n Trust (without Danger and Opportunity and Unharmfulness and Availability) is:\n" + map.getConcepts().get("trust").getOutput() + "\n***********");
}
}
public void test_scenario_Doctor(boolean partialTree) throws Exception{
//Print initial values
set_scenario_Doctor();
// run map and show results
System.out.println("\n Initial values:" + map.toString() + "\n ");
showResults("Scenario-Doctor", runner.converge());
System.out.println("\n\n***********\n Trust is:\n" + map.getConcepts().get("trust").getOutput() + "\n***********");
map.toString();
if(partialTree){
/* WITHOUT DANGER */
//reset scenario
set_scenario_Doctor();
/* remove Danger subtree */
map.removeConnection("da_ef");
map.removeConcept("danger");
//run map and show results
System.out.println("--------------Partial Tree without Danger------------------");
System.out.println("\n Initial values:" + map.toString() + "\n ");
showResults("Scenario-Doctor", runner.converge());
System.out.println("\n\n***********\n Trust (without Danger) is:\n" + map.getConcepts().get("trust").getOutput() + "\n***********");
/* WITHOUT DANGER and OPPORTUNITY */
//reset scenario
set_scenario_Doctor();
/* remove opportinity subtree */
map.removeConnection("op_ef");
map.removeConcept("opportunity");
//run map and show results
System.out.println("--------------Partial Tree without Danger and Opportunity------------------");
System.out.println("\n Initial values:" + map.toString() + "\n ");
showResults("Scenario-Doctor", runner.converge());
System.out.println("\n\n***********\n Trust (without Danger and Opportunity) is:\n" + map.getConcepts().get("trust").getOutput() + "\n***********");
/* WITHOUT DANGER and OPPORTUNITY and UNHARMFULNESS */
//reset scenario
set_scenario_Doctor();
/* remove opportinity subtree */
map.removeConnection("un_if");
map.removeConcept("unharmfulness");
//run map and show results
System.out.println("--------------Partial Tree without Danger and Opportunity and Unharmfulness------------------");
System.out.println("\n Initial values:" + map.toString() + "\n ");
showResults("Scenario-Doctor", runner.converge());
System.out.println("\n\n***********\n Trust (without Danger and Opportunity and Unharmfulness) is:\n" + map.getConcepts().get("trust").getOutput() + "\n***********");
/* WITHOUT DANGER and OPPORTUNITY and UNHARMFULNESS */
//reset scenario
set_scenario_Doctor();
/* remove opportinity subtree */
map.removeConnection("av_if");
map.removeConcept("availability");
//run map and show results
System.out.println("--------------Partial Tree without Danger and Opportunity and Unharmfulness and Availability------------------");
System.out.println("\n Initial values:" + map.toString() + "\n ");
showResults("Scenario-Doctor", runner.converge());
System.out.println("\n\n***********\n Trust (without Danger and Opportunity and Unharmfulness and Availability) is:\n" + map.getConcepts().get("trust").getOutput() + "\n***********");
}
}
/*
* Agent class
*/
public void run() {
try {
System.out.print("Scenario\tConverged");
//System.out.println(map);
//System.out.println("\nAlpha = " + ((HyperbolicTangentActivator)map.getConcept("ability").getConceptActivator()).getAlpha());
for (Concept c : map.getConcepts().values()) {
System.out.print("\t" + c.getName());
}
System.out.println();
//test_scenario_Doctor(true);
test_scenario_Machine(false);
} catch (Exception e) {
// TODO Auto-generated catch block
System.out.println("Some Problem Occurs in running the FCM...");
e.printStackTrace();
}
}
void showResults(String scenario, boolean converged) {
NumberFormat nf = NumberFormat.getNumberInstance(Locale.ENGLISH);
nf.setMaximumFractionDigits(8);
System.out.print(scenario + "\t" + converged);
for (Concept c : map.getConcepts().values()) {
System.out.print("\t");
System.out.print(c.getOutput() != null ? nf.format(c.getOutput()) : "");
}
}
public static void main(String[] args) {
MedicalVisit example = new MedicalVisit();
example.run();
}
}