/// <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);
        }
Esempio n. 4
0
        /// <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;
            }
        }
Esempio n. 5
0
 public Worker(ConcreteObservation conclusion)
 {
     _resultConclusion = conclusion;
 }