public MainWindow() { InitializeComponent(); clips.Load("piwo.clp"); clips.Reset(); clips.Run(1); }
public Expert() { InitializeComponent(); Env.AddRouter(new DebugRouter()); Env.Load("D:\\AIU\\EXP\\expert\\colors.clp"); //Path to the clips program Env.Reset(); }
public HelperClass(string path) { //Class initalizer ConsoleTraceListener tl = new ConsoleTraceListener(); clipsEnvironment.AddRouter(new DebugRouter()); clipsEnvironment.Load(path); clipsEnvironment.Reset(); }
public MainForm() { ConsoleTraceListener tlex = new ConsoleTraceListener(); InitializeComponent(); _theEnv.AddRouter(new DebugRouter()); _theEnv.Load("autodemo.clp"); _theEnv.Reset(); }
public MainWindow() { InitializeComponent(); _theEnv.AddRouter(new DebugRouter()); _theEnv.Clear(); _theEnv.Load("zeby2.clp"); _theEnv.Reset(); NextUiState(); }
public MainForm() { ConsoleTraceListener tl = new ConsoleTraceListener(); InitializeComponent(); clips.AddRouter(new DebugRouter()); clips.Load("bazaaut.clp"); clips.Reset(); clips.Run(1); }
/// <summary> /// Load and execute rules! /// </summary> private void LoadRules() { //string path = Directory.GetCurrentDirectory(); //Console.Write(path); enviroment.Reset(); enviroment.Clear(); enviroment.Load("C:\\ISBARecoPrj\\ISBARecoPrj\\facts_threshold.clp"); enviroment.Load("C:\\ISBARecoPrj\\ISBARecoPrj\\rule_report_gene.clp"); enviroment.Reset(); enviroment.Run(); }
public MainForm() { ConsoleTraceListener tl = new ConsoleTraceListener(); InitializeComponent(); openFileDialogCLP.DefaultExt = ".clp"; openFileDialogCLP.Filter = "Clips files (*.clp) | *.clp"; DialogResult result = openFileDialogCLP.ShowDialog(); string filePath = string.Empty; if (result == DialogResult.OK) // Test result. { filePath = openFileDialogCLP.FileName; MessageBox.Show("Load CLP successfull from :" + filePath); } clipsEnvironment.AddRouter(new DebugRouter()); var path = @"ClipsScript.clp"; clipsEnvironment.Load(filePath); clipsEnvironment.Reset(); }
public MainForm() { //Initializing of all variables needed InitializeComponent(); environment = new Mommosoft.ExpertSystem.Environment(); //Load the clips file environment.Load("mobilephone.clp"); //Set initial stage UIState = 0; SetUIState(Defintions.PhaseStart); this.buttonRestart.Visible = false; //Initializing lists of information to be stored at each phase preferencesDetails = new List<String>(); preferencesPhoneList = new List<MobilePhoneRecommendation>(); phoneSpecsDetails = new List<String>(); phoneSpecsPhoneList = new List<MobilePhoneRecommendation>(); personalityDetails = new List<String>(); personalityPhoneList = new List<MobilePhoneRecommendation>(); results = new List<MobilePhoneRecommendation>(); iResultIterate = 0; phase3Results = new BindingList<MobileResultDisplay>(); /* * Watching of facts is done in output window. So make sure when build output window is shown * WactchItem is an enum. * @kwanghock */ environment.Watch(WatchItem.All); environment.Reset(); //assert test input to check everything ran correctly. @kwanghock //testInput(); environment.Run(); //Load the dropdown values for PhaseDetails LoadPhaseDetailsDropdown(); //Load dropdown values for mobile plans LoadPhasePlanDropdown(); //Test by getting all the facts see whether reflect correctly @kwanghock //test(); }
public override DecisionResult IdentifyTreatment() { List <Treatment> treatments = new List <Treatment>(); List <Action> actions = new List <Action>(); List <Reason> reasons = new List <Reason>(); string currentGFR = ""; string GFRTrend = "unknown"; bool Dialysis = false; double latest = testData.Offsets().Min(); List <Value> GfrValues = testData.Values("gfr"); double slope = 0; if (GfrValues.Count() == 0) { Action action = new Action(); action.text = "Please provide at least one GFR value."; actions.Add(action); } else if (GfrValues.Count() > 1) { List <double> weights = new List <double>(); List <double> offsets = new List <double>(); List <double> values = new List <double>(); foreach (Value value in GfrValues) { double days = (value.offset - latest) / 86400; double new_weight = Math.Pow((1 - test_trend_decay_per_day), (double)value.value); offsets.Add(value.offset); values.Add((double)value.value); weights.Add(Math.Max(0.125, new_weight)); } double[] lsrResults = LeastSquaresWeightedBestFitLine1(offsets.ToArray(), values.ToArray(), weights.ToArray()); //intercept = results[0]; slope = -lsrResults[1]; currentGFR = testData.Value("gfr", latest).value.ToString(); if (currentGFR == "-1") { currentGFR = ""; GFRTrend = ""; Dialysis = true; } else if (GfrValues.Count > 1 && currentGFR != "") { // double diff = (y_values[0] - intercept) / intercept; GFRTrend = "stable"; if (slope / (double)testData.Value("gfr", latest).value > 0.1) { GFRTrend = "increasing"; } if (slope / (double)testData.Value("gfr", latest).value < -0.1) { GFRTrend = "decreasing"; } } } else // Single GFR value { if (GfrValues.Count() > 0) { currentGFR = testData.Value("gfr", latest).value.ToString(); } if (currentGFR == "-1") { currentGFR = ""; GFRTrend = ""; Dialysis = true; } else { GFRTrend = "stable"; } } Value urineProduction = testData.Value("urine production", latest); double urineProductionValue = 0; if (urineProduction.value == null || !(urineProduction.value is double)) { Action action = new Action(); action.text = "Please provide urine production as a number."; actions.Add(action); } else { urineProductionValue = (double)urineProduction.value; } Value potassium = testData.Value("potassium", latest); double potassiumValue = 0; if (potassium.value == null || !(potassium.value is double)) { Action action = new Action(); action.text = "Please provide potassium as a number."; actions.Add(action); } else { potassiumValue = (double)potassium.value; } Value magnesium = testData.Value("magnesium", latest); double magnesiumValue = 0; if (magnesium.value == null || !(magnesium.value is double)) { Action action = new Action(); action.text = "Please provide magnesium as a number."; actions.Add(action); } else { magnesiumValue = (double)magnesium.value; } Value phosphorus = testData.Value("phosphorus", latest); double phosphorusValue = 0; if (phosphorus.value == null || !(phosphorus.value is double)) { Action action = new Action(); action.text = "Please provide phosphorus as a number."; actions.Add(action); } else { phosphorusValue = (double)phosphorus.value; } Value calcium = testData.Value("calcium, ionized", latest); double calciumValue = 0; if (calcium.value == null || !(calcium.value is double)) { Action action = new Action(); action.text = "Please provide calcium as a number."; actions.Add(action); } else { calciumValue = (double)calcium.value; } Value diarrhea = testData.Value("diarrhea", latest); string diarrheaValue = diarrhea.value as string; if (diarrheaValue == null || diarrheaValue == "") { diarrheaValue = "X"; } else { diarrheaValue = diarrheaValue.ToUpper(); if (diarrheaValue[0] != 'N' && diarrheaValue[0] != 'Y') { Action action = new Action(); action.text = "Please provide diarrhea as Yes, Y, No or N."; actions.Add(action); } else { diarrheaValue = diarrheaValue.Substring(0, 1); } } double recentKCL = 0; int recentKCLtreatements = 0; List <Value> kclTreatments = treatmentData.Values("kcl"); foreach (Value kclTreatment in kclTreatments) { if (kclTreatment.offset <= 2 * 86400) // 2 days { recentKCL += (double)kclTreatment.value; recentKCLtreatements++; } } if (actions.Count == 0) // no errors { // Clear old values //clips.Eval("(clear)"); //clips.Load("Hypokalemia.clp"); //clips.Eval("(reset)"); // load facts from deffacts constructs. clips.Clear(); clips.Load("Hypokalemia.clp"); clips.Reset(); // load facts from deffacts constructs. // Set values in CLIPS clips.AssertString("(diagnosis (patient " + patientID + ") (name HYPOKALEMIA))"); if (Dialysis) { clips.AssertString("(test-value (patient " + patientID + ") (name Dialysis) (value TRUE))"); } if (currentGFR != "") { clips.AssertString("(test-value (patient " + patientID + ") (name GFR) (value " + currentGFR + "))"); } if (GFRTrend != "") { clips.AssertString("(test-value (patient " + patientID + ") (name GFR-trend) (value " + GFRTrend.ToUpper() + "))"); } if (urineProduction != null) { clips.AssertString("(test-value (patient " + patientID + ") (name Urine-production) (value " + urineProductionValue + "))"); } if (potassium != null) { clips.AssertString("(test-value (patient " + patientID + ") (name Potassium) (value " + potassiumValue + "))"); } if (magnesium != null) { clips.AssertString("(test-value (patient " + patientID + ") (name Magnesium) (value " + magnesiumValue + "))"); } if (phosphorus != null) { clips.AssertString("(test-value (patient " + patientID + ") (name Phosphorus) (value " + phosphorusValue + "))"); } if (calcium != null) { clips.AssertString("(test-value (patient " + patientID + ") (name Calcium) (value " + calciumValue + "))"); } if (diarrhea != null) { clips.AssertString("(test-value (patient " + patientID + ") (name Diarrhea) (value " + diarrheaValue + "))"); } Value EnteralRoute = testData.Value("enteralroute", latest); if (EnteralRoute != null && (bool)EnteralRoute.value) { clips.AssertString("(available-routes (patient " + patientID + ") (type ENTERAL))"); } Value CentralRoute = testData.Value("centralroute", latest); if (CentralRoute != null && (bool)CentralRoute.value) { clips.AssertString("(available-routes (patient " + patientID + ") (type CENTRAL-IV))"); } Value PeripheralRoute = testData.Value("peripheralroute", latest); if (PeripheralRoute != null && (bool)PeripheralRoute.value) { clips.AssertString("(available-routes (patient " + patientID + ") (type PERIPHERAL-IV))"); } clips.AssertString("(test-value (patient " + patientID + ") (name Recent-KCL) (value " + recentKCL + "))"); clips.AssertString("(test-value (patient " + patientID + ") (name Recent-KCL-Treatements) (value " + recentKCLtreatements + "))"); //clips.Reset(); clips.Run(); // Get values from CLIPS MultifieldValue treatmentFacts = clips.Eval("(find-all-facts ((?treatment treatment)) TRUE)") as MultifieldValue; foreach (FactAddressValue fv in treatmentFacts) { Treatment treatment = new Treatment(); //treatment.index = (int)((NumberValue)fv.GetFactSlot("index")).GetIntegerValue(); //treatment.type = ((LexemeValue)fv.GetFactSlot("type")).GetLexemeValue(); //treatment.med = ((LexemeValue)fv.GetFactSlot("med")).GetLexemeValue(); //treatment.quantity = ((NumberValue)fv.GetFactSlot("quantity")).GetFloatValue(); //treatment.units = ((LexemeValue)fv.GetFactSlot("units")).GetLexemeValue(); //treatment.route = ((LexemeValue)fv.GetFactSlot("route")).GetLexemeValue(); object tempIndex = fv.GetFactSlot("index"); if (tempIndex is FloatValue) { FloatValue tempValue = (FloatValue)tempIndex; treatment.index = (float)(tempValue); } else { IntegerValue tempValue = (IntegerValue)tempIndex; treatment.index = (int)(tempValue); } treatment.type = (string)((SymbolValue)fv.GetFactSlot("type")); treatment.med = (string)((SymbolValue)fv.GetFactSlot("med")); PrimitiveValue quantitySlot = fv.GetFactSlot("quantity"); if (quantitySlot is FloatValue) { treatment.quantity = (double)((FloatValue)quantitySlot); } else { treatment.quantity = (int)((IntegerValue)quantitySlot); } treatment.units = (string)((SymbolValue)fv.GetFactSlot("units")); treatment.route = (string)((SymbolValue)fv.GetFactSlot("route")); treatments.Add(treatment); } MultifieldValue actionFacts = clips.Eval("(find-all-facts ((?action action)) TRUE)") as MultifieldValue; foreach (FactAddressValue fv in actionFacts) { Action action = new Action(); action.text = ((SymbolValue)fv.GetFactSlot("text")).ToString().Replace("GFR-trend", "Previous GFR"); actions.Add(action); } MultifieldValue reasonFacts = clips.Eval("(find-all-facts ((?reason reason)) TRUE)") as MultifieldValue; foreach (FactAddressValue fv in reasonFacts) { Reason reason = new Reason( (int)((IntegerValue)fv.GetFactSlot("level")), ((SymbolValue)fv.GetFactSlot("rule")).ToString(), ((SymbolValue)fv.GetFactSlot("text")).ToString().Replace("GFR-trend", "Previous GFR")); reasons.Add(reason); } } return(new DecisionResult(treatments, actions, reasons)); }
//private CLIPSNet.Environment _theEnv = new CLIPSNet.Environment(); public void Load(string fileName) { //_theEnv.AddRouter(new DebugRouter()); _theEnv.Load(fileName); _theEnv.Reset(); }
public override DecisionResult IdentifyTreatment() { List <Treatment> treatments = new List <Treatment>(); List <Action> actions = new List <Action>(); List <Reason> reasons = new List <Reason>(); //// Step 1 //string potassiumValue = null; //List<Value> Values = testData.Values("potassium"); //if (Values.Count > 0) //{ // potassiumValue = Values[0].ToString(); //} //// Step 2 //string Dialysis = "NO"; //Values = testData.Values("dialysis"); //if (Values.Count() > 0) //{ // Dialysis = Values[0].ToString().ToUpper(); //} //// Step 3 //string currentGFR = ""; //string GFRTrend = "Unknown"; //Values = testData.Values("gfr"); //double slope = 0; //if (Values.Count() > 0) //{ // currentGFR = Values[0].ToString(); //} //if (Values.Count() > 1) //{ // List<double> weights = new List<double>(); // List<double> offsets = new List<double>(); // List<double> values = new List<double>(); // foreach (Value value in Values) // { // double days = value.offset / 86400; // offsets.Add(days); // values.Add((double)value.value); // double new_weight = Math.Pow((1 - test_trend_decay_per_day), days); // weights.Add(Math.Max(0.125, new_weight)); // } // double[] lsrResults = LeastSquaresWeightedBestFitLine1(offsets.ToArray(), values.ToArray(), weights.ToArray()); // //intercept = results[0]; // slope = -lsrResults[1]; // // double diff = (y_values[0] - intercept) / intercept; // GFRTrend = "Stable"; // if (slope / (double)Values[0].value > 0.1) // { // GFRTrend = "Improving"; // } // if (slope / (double)Values[0].value < -0.1) // { // GFRTrend = "Worsening"; // } //} //Values = testData.Values("urine production"); //string urineProduction = null; //if (Values.Count() > 0) //{ // double urineProductionValue = (double)Values[0].value; // if (urineProductionValue > 0.5) urineProduction = "Normal"; // else if (urineProductionValue >= 0.4) urineProduction = "Marginal"; // else if (urineProductionValue >= 0.1) urineProduction = "Oliguric"; // else urineProduction = "Anuric"; //} //else //{ // urineProduction = "Unknown"; //} //// Step 4. //string TTTstate = "NONE"; //string timeToRewarming = "over-4-hours"; //Values = testData.Values("TTT-state"); //if (Values.Count() > 0) //{ // TTTstate = Values[0].ToString().ToUpper(); //} //Values = testData.Values("time-to-rewarming"); //if (Values.Count() > 0) //{ // timeToRewarming = Values[0].ToString(); //} //// Step 5. //string pastLoopDiuretic = "NO"; //Values = testData.Values("past-loop-diuretic"); //if (Values.Count() > 0) //{ // pastLoopDiuretic = Values[0].ToString().ToUpper(); //} //// Step 6. //string diarrheaValue = "NO"; //Values = testData.Values("past-diarrhea"); //if (Values.Count() > 0) //{ // diarrheaValue = Values[0].ToString().ToUpper(); //} //// Step 7. //string PastSupplementation = "NONE"; //string PotassiumTrend = "Stable"; //Values = treatmentData.Values("supplement24hrs"); //if (Values.Count() > 0 && Values[0].ToString() != "0") //{ // if(Values[0].value is double) // { // double value = (double)Values[0].value; // if (value == 0) PastSupplementation = "NONE"; // else if(value <= 30) PastSupplementation = "20mEq"; // else if (value <= 50) PastSupplementation = "40mEq"; // else PastSupplementation = "60mEq"; // } //} //Values = testData.Values("potassium"); //if (Values.Count() > 1) //{ // if((double)Values[0].value - (double)Values[1].value >= 0.3) // { // PotassiumTrend = "Increasing"; // } // if ((double)Values[0].value - (double)Values[1].value <= -0.3) // { // PotassiumTrend = "Decreasing"; // } //} //// Step 8. //Values = testData.Values("potassium"); //string potassiumRange = null; //if (Values.Count > 0) //{ // double potassium = (double)Values[0].value; // if (3.8 <= potassium) potassiumRange = "HIGH"; // else if (3.4 <= potassium && potassium < 3.8) potassiumRange = "MED"; // else if (3.0 <= potassium && potassium < 3.4) potassiumRange = "LOW"; // else potassiumRange = "VLOW"; //} //// Step 9. //// Removed by Tzvi //// Step 10. //string phosphorusRange = "UNKNOWN"; //Values = testData.Values("phosphorus"); //if (Values.Count > 0) //{ // double potassium = (double)Values[0].value; // if (2.0 <= potassium) phosphorusRange = "HIGH"; // else if (1.5 < potassium && potassium < 2.0) phosphorusRange = "MED"; // else phosphorusRange = "LOW"; //} //// Step 11. //string calciumValue = "1.0"; //Values = testData.Values("calcium, ionized"); //if (Values.Count() > 0) //{ // calciumValue = Values[0].ToString(); //} //if (actions.Count == 0) // no errors //{ // Clear old values //clips.Eval("(clear)"); //clips.Load("Hypokalemia.clp"); //clips.Eval("(reset)"); // load facts from deffacts constructs. clips.Clear(); clips.Load("HypokalemiaV2.clp"); clips.Reset(); // load facts from deffacts constructs. // Set values in CLIPS List <string> dataValues = DataValues(); foreach (string dataValue in dataValues) { clips.AssertString(dataValue); } //// clips.AssertString("(diagnosis (patient " + patientID + ") (name Hypokalemia))"); // if (Dialysis != "") // { // //(data-value (name dialysis) (patient 123456) (value NO)) // string dataValue = "(data-value (patient " + patientID + ") (name dialysis) (value " + Dialysis + "))"; // clips.AssertString(dataValue); // } // if (currentGFR != "") // { // //(data-value (name GFR) (patient 123456) (value 45)) // string dataValue = "(data-value (patient " + patientID + ") (name GFR) (value " + currentGFR + "))"; // clips.AssertString(dataValue); // } // if (GFRTrend != "") // { // //(data-value (name GFR-trend) (patient 123456) (value Stable)) // string dataValue = "(data-value (patient " + patientID + ") (name GFR-trend) (value " + GFRTrend + "))"; // clips.AssertString(dataValue); // } // if (urineProduction != null) // { // //(data-value (name Urine-production) (patient 123456) (value Normal)) // string dataValue = "(data-value (patient " + patientID + ") (name Urine-production) (value " + urineProduction + "))"; // clips.AssertString(dataValue); // } // if (potassiumValue != null) // { // //(data-value (name potassium) (patient 123456) (value 3.5)) // string dataValue = "(data-value (patient " + patientID + ") (name potassium) (value " + potassiumValue + "))"; // clips.AssertString(dataValue); // } // if (potassiumRange != null) // { // //(data-value (name potassium) (patient 123456) (value 3.5)) // string dataValue = "(data-value (patient " + patientID + ") (name potassium-range) (value " + potassiumRange + "))"; // clips.AssertString(dataValue); // } // if (phosphorusRange != null) // { // //(data-value (name phosphorus) (patient 123456) (value 2.5)) // string dataValue = "(data-value (patient " + patientID + ") (name phosphorus-range) (value " + phosphorusRange + "))"; // clips.AssertString(dataValue); // } // if (calciumValue != null) // { // //(data-value (name calcium) (patient 123456) (value 2.0)) // string dataValue = "(data-value (patient " + patientID + ") (name calcium) (value " + calciumValue + "))"; // clips.AssertString(dataValue); // } // if (diarrheaValue != null) // { // //(data-value (name past-diarrhea) (patient 123456) (value NO)) // string dataValue = "(data-value (patient " + patientID + ") (name past-diarrhea) (value " + diarrheaValue + "))"; // clips.AssertString(dataValue); // } // if (TTTstate != null) // { // //(data-value (name TTT-state) (patient 123456) (value COOLING)) // string dataValue = "(data-value (patient " + patientID + ") (name TTT-state) (value " + TTTstate + "))"; // clips.AssertString(dataValue); // } // if (timeToRewarming != null) // { // //(data-value (name time-to-rewarming) (patient 123456) (value over-4-hours)) // string dataValue = "(data-value (patient " + patientID + ") (name time-to-rewarming) (value " + timeToRewarming + "))"; // clips.AssertString(dataValue); // } // if (pastLoopDiuretic != null) // { // //(data-value (name past-loop-diuretic) (patient 123456) (value NO)) // string dataValue = "(data-value (patient " + patientID + ") (name past-loop-diuretic) (value " + pastLoopDiuretic + "))"; // clips.AssertString(dataValue); // } // if (PastSupplementation != null) // { // //(data-value (name Past-Supplementation) (patient 123456) (value NONE)) // string dataValue = "(data-value (patient " + patientID + ") (name Past-Supplementation) (value " + PastSupplementation + "))"; // clips.AssertString(dataValue); // } // if (PotassiumTrend != null) // { // //(data-value (name Potassium-trend) (patient 123456) (value Stable)) // string dataValue = "(data-value (patient " + patientID + ") (name Potassium-trend) (value " + PotassiumTrend + "))"; // clips.AssertString(dataValue); // } clips.AssertString("(state (patient " + patientID + ") (name Step-1))"); clips.Run(); MultifieldValue stateFacts = clips.Eval("(find-all-facts ((?fact state)) TRUE)") as MultifieldValue; foreach (FactAddressValue fv in stateFacts) { string name = ((SymbolValue)fv.GetFactSlot("name")); } // Get values from CLIPS MultifieldValue treatmentFacts = clips.Eval("(find-all-facts ((?treatment treatment)) TRUE)") as MultifieldValue; foreach (FactAddressValue fv in treatmentFacts) { Treatment treatment = new Treatment(); //treatment.index = (int)((NumberValue)fv.GetFactSlot("index")).GetIntegerValue(); //treatment.type = ((LexemeValue)fv.GetFactSlot("type")).GetLexemeValue(); //treatment.med = ((LexemeValue)fv.GetFactSlot("med")).GetLexemeValue(); //treatment.quantity = ((NumberValue)fv.GetFactSlot("quantity")).GetFloatValue(); //treatment.units = ((LexemeValue)fv.GetFactSlot("units")).GetLexemeValue(); //treatment.route = ((LexemeValue)fv.GetFactSlot("route")).GetLexemeValue(); object tempIndex = fv.GetFactSlot("index"); if (tempIndex is FloatValue) { FloatValue tempValue = (FloatValue)tempIndex; treatment.index = (float)(tempValue); treatment.type = (string)((SymbolValue)fv.GetFactSlot("type")); } else if (tempIndex is IntegerValue) { IntegerValue tempValue = (IntegerValue)tempIndex; treatment.index = (int)(tempValue); treatment.type = (string)((SymbolValue)fv.GetFactSlot("type")); } else { treatment.type = tempIndex.ToString(); } //treatment.med = (string)((SymbolValue)fv.GetFactSlot("med")); //PrimitiveValue quantitySlot = fv.GetFactSlot("quantity"); //if (quantitySlot is FloatValue) //{ // treatment.quantity = (double)((FloatValue)quantitySlot); //} //else //{ // treatment.quantity = (int)((IntegerValue)quantitySlot); //} //treatment.units = (string)((SymbolValue)fv.GetFactSlot("units")); treatment.route = ((SymbolValue)fv.GetFactSlot("routes")); treatments.Add(treatment); } MultifieldValue actionFacts = clips.Eval("(find-all-facts ((?action action)) TRUE)") as MultifieldValue; foreach (FactAddressValue fv in actionFacts) { Action action = new Action(); string actionText = ((SymbolValue)fv.GetFactSlot("text")).ToString(); if (!actions.Any(a => a.text == actionText)) { action.text = actionText; actions.Add(action); } } MultifieldValue reasonFacts = clips.Eval("(find-all-facts ((?reason reason)) TRUE)") as MultifieldValue; foreach (FactAddressValue fv in reasonFacts) { Reason reason = new Reason( 0, // (int)((IntegerValue)fv.GetFactSlot("level")), ((SymbolValue)fv.GetFactSlot("rule")).ToString(), ReplaceReasonText(((SymbolValue)fv.GetFactSlot("text")).ToString())); reasons.Add(reason); } //} return(new DecisionResult(treatments, actions, reasons)); }