/// <summary> /// Same as Rule just with Conclusion /// </summary> public static ConcreteObservation ConclusionConversion(string conclusionString, double factor) { conclusionString = conclusionString.Trim(); ConcreteObservation conclusion = MainWindow.GetCachedObservationByName(conclusionString); conclusion.ObservedFactor = factor; return(conclusion); }
/// <summary> /// Same as Rule just with observation /// </summary> /// <param name="list"> list of atomic expressions </param> /// <returns> /// Packed observation object, and a list containing all the /// ConcreteObservations in the packed object /// </returns> public static Tuple <Observation, List <ConcreteObservation> > ObservationConversion(List <AtomicExpression> list) { var stack = new Stack <object>(); var concreteObservations = new List <ConcreteObservation>(); var lastExpressionString = string.Empty; try { foreach (var expression in list) { // variable if (!string.IsNullOrEmpty(expression.Value)) { ConcreteObservation concreteObservation = MainWindow.GetCachedObservationByName(expression.Value); concreteObservations.Add(concreteObservation); stack.Push(concreteObservation); continue; } // unary operator object result; if (expression.Operator == "-") { Observation tmpEval = stack.Pop() as Observation; if (tmpEval.GetType() != typeof(ConcreteObservation)) { tmpEval = new Parenthesis(tmpEval); } result = expression.Evaluate(tmpEval); } // binary operator else { var p2 = stack.Pop(); var p1 = stack.Pop(); Observation tmpEval = expression.Evaluate(p1, p2); if (expression.Operator == "ILI" && (lastExpressionString == "I" || lastExpressionString == "-")) { tmpEval = new Parenthesis(tmpEval); } result = tmpEval; } stack.Push(result); lastExpressionString = expression.Operator; } var observation = stack.Pop() as Observation; return(new Tuple <Observation, List <ConcreteObservation> >(observation, concreteObservations)); } catch (InvalidOperationException e) { throw new ParsingException("parsing failed, reenter your expression!"); } }
/// <summary> /// Converts the ruleString into a rule Object /// </summary> /// <param name="ruleString"> String representation of a rule </param> /// <returns> Rule object </returns> public static Rule RuleConversion(string ruleString) { string[] stringSeparators = { "AKO ", " ONDA " }; string expression = ruleString; // replacing multiple tabs/spaces in the string expression = Regex.Replace(expression, @"\s+", " "); expression = expression.Replace("\t", string.Empty); expression = Tokenize(expression); Rule rule = MainWindow.GetCachedRule(expression); if (rule != null) { return(rule); } string[] split = expression.Split(stringSeparators, StringSplitOptions.RemoveEmptyEntries); var observationString = Postfix(Tokenize(split[0])); Tuple <Observation, List <ConcreteObservation> > observation_list_tuple = ObservationConversion(observationString); Observation observation = observation_list_tuple.Item1; List <ConcreteObservation> concreteObservations = observation_list_tuple.Item2; var factorSplit = split[1].Split(')'); var factorString = factorSplit[0].Trim('('); double factor = double.Parse(factorString); var conclusionString = factorSplit[1]; ConcreteObservation conclusion = ConclusionConversion(conclusionString, factor); rule = new Rule(observation, conclusion, concreteObservations); return(rule); }
/// <summary> /// starts a worker thread for estimating the entered /// conclusion probability of happening /// </summary> private void ConclusionTextBox_EnterClicked(object sender, KeyEventArgs e) { if (e.Key == Key.Return) { ConcreteObservation conclusion = GetCachedObservationByName(ConclusionTextBox.Text); FinishButton.Visibility = Visibility.Visible; mySemaphore = new MySemaphore(0, 1); Worker myWorker = new Worker(conclusion); Thread myThread = new Thread(myWorker.StartCalculation); myThread.Start(); StepButton.Visibility = Visibility.Visible; ConclusionTextBox.Visibility = Visibility.Hidden; ConclusionInfo.Visibility = Visibility.Hidden; ConclusionTextBox.Clear(); e.Handled = true; } }
public Worker(ConcreteObservation conclusion) { _resultConclusion = conclusion; }