Exemple #1
0
        private void button1_Click(object sender, EventArgs e)
        {
            VarsWithValue v = new VarsWithValue(var, cmbAns.SelectedItem.ToString());

            kbase.valuableVariable.Add(v);
            okpressed = true;
            this.Close();
        }
Exemple #2
0
        public string ConcGoal(Variable var, TreeNode tn)
        {
            int    indexRules = 0;
            string goal       = "";

            while (goal == "" && indexRules < rules.Count)
            {
                bool concHasVar = false, good = true;
                foreach (Fact f in rules[indexRules].concFact)
                {
                    if (f.varName == var.name && !workedRules.Contains(rules[indexRules]))
                    {
                        concHasVar = true;
                    }
                }
                if (concHasVar && !workedRules.Contains(rules[indexRules]))
                {
                    tn.Nodes.Add(GetStringForRule(rules[indexRules]));
                    foreach (Fact f in rules[indexRules].sendFact)
                    {
                        if (good)
                        {
                            TreeNode tn1 = tn.Nodes[tn.Nodes.Count - 1];
                            tn1.Nodes.Add("Выводим " + f.varName);
                            if (hasVarValue(f.varName))
                            {
                                TreeNode      tn2 = tn1.Nodes[tn1.Nodes.Count - 1];
                                VarsWithValue vWv = valuableVariable.Find(delegate(VarsWithValue v) { return(v.var.name == f.varName); });
                                if (vWv.value != f.value)
                                {
                                    good = false;
                                }
                                tn2.Nodes.Add("Уже означено " + vWv.var.name + " = " + vWv.value);
                            }
                            else
                            {
                                Variable sendVar = vars.Find(delegate(Variable v) { return(v.name == f.varName); });
                                if (sendVar.type == varType.query)
                                {
                                    TreeNode tn2   = tn1.Nodes[tn1.Nodes.Count - 1];
                                    int      count = valuableVariable.Count;
                                    if (AskVar(sendVar) == -1)
                                    {
                                        goal = "Прервано";
                                        good = false;
                                    }
                                    else
                                    {
                                        VarsWithValue vWv = valuableVariable.Find(delegate(VarsWithValue v) { return(v.var.name == f.varName); });
                                        if (vWv.value != f.value)
                                        {
                                            good = false;
                                        }
                                        tn2.Nodes.Add("Пользователь ввел " + vWv.var.name + " = " + vWv.value);
                                    }
                                }
                                else if (sendVar.type == varType.queryDeduction)
                                {
                                    Variable varDed = vars.Find(delegate(Variable v2) { return(v2.name == f.varName); });
                                    TreeNode tn2    = tn1.Nodes[tn1.Nodes.Count - 1];
                                    if (ConcGoal(varDed, tn2) == "")
                                    {
                                        AskVar(sendVar);
                                        tn2 = tn1.Nodes[tn1.Nodes.Count - 1];
                                        VarsWithValue vWv = valuableVariable.Find(delegate(VarsWithValue v) { return(v.var.name == f.varName); });
                                        if (vWv.value != f.value)
                                        {
                                            good = false;
                                        }
                                        tn2.Nodes.Add("Пользователь ввел " + vWv.var.name + " = " + vWv.value);
                                    }
                                    else
                                    {
                                        int indvar = valuableVariable.FindIndex(delegate(VarsWithValue v) { return(v.var.name == varDed.name); });
                                        if (valuableVariable[indvar].value != f.value)
                                        {
                                            good = false;
                                        }
                                    }
                                }
                                else
                                {
                                    Variable varDed = vars.Find(delegate(Variable v2) { return(v2.name == f.varName); });
                                    TreeNode tn2    = tn1.Nodes[tn1.Nodes.Count - 1];
                                    if (ConcGoal(varDed, tn2) == "")
                                    {
                                        good = false;
                                    }
                                    else
                                    {
                                        int indvar = valuableVariable.FindIndex(delegate(VarsWithValue v) { return(v.var.name == varDed.name); });
                                        if (valuableVariable[indvar].value != f.value)
                                        {
                                            good = false;
                                        }
                                    }
                                }
                            }
                        }
                    }
                    if (good)
                    {
                        TreeNode tn1 = tn.Nodes[tn.Nodes.Count - 1];
                        tn1.Nodes.Add("Правило сработало");
                        foreach (Fact f in rules[indexRules].concFact)
                        {
                            Variable      varConc = vars.Find(delegate(Variable v2) { return(v2.name == f.varName); });
                            VarsWithValue v       = new VarsWithValue(varConc, f.value);
                            if (valuableVariable.FindIndex(delegate(VarsWithValue v3) { return(v3.var.name == f.varName); }) == -1)
                            {
                                valuableVariable.Add(v);
                                tn.Nodes.Add("Означили : " + v.var.name + " = " + v.value);
                            }
                        }
                        tn1.Nodes.Add(rules[indexRules].reason);
                        VarsWithValue vWv = valuableVariable.Find(delegate(VarsWithValue v) { return(v.var.name == var.name); });
                        goal = vWv.value;
                        workedRules.Add(rules[indexRules]);
                    }
                    else
                    {
                        TreeNode tn1 = tn.Nodes[tn.Nodes.Count - 1];
                        tn1.Nodes.Add("Правило не сработало");
                        tn1.Remove();
                    }
                }
                indexRules++;
            }
            if (goal == "")
            {
                MessageBox.Show("ЭС не смогла определить значение целевой переменной");
            }
            treeNode = (TreeNode)tn.Clone();
            return(goal);
        }