Exemplo n.º 1
0
        static void Main(string[] args)
        {
            GDB db = new GDB(ConfigurationManager.AppSettings["InputFileName"]);

            BackwardChainingJob.Run(db);
        }
Exemplo n.º 2
0
        public static void Run(GDB Db)
        {
            db = Db;
            #region Protokolas 1 dalis
            string       output;
            StreamWriter file = new StreamWriter(String.Format("{0} protokolas.txt", db.TestName), false);
            file.WriteLine("1 DALIS. Duomenys");
            file.WriteLine("");
            file.WriteLine("  1) Taisyklės");
            foreach (Projekcija p in db.Projekcijos)
            {
                file.WriteLine(String.Format("    {0}", p));
            }
            file.WriteLine("");
            file.WriteLine("  2) Faktai");
            output = String.Format("    {0}", db.InitFaktai.ElementAt(0));
            for (int i = 1; i < db.InitFaktai.Count; i++)
            {
                output += String.Format(", {0}", db.InitFaktai.ElementAt(i));
            }
            file.WriteLine(output);
            file.WriteLine("");
            file.WriteLine("  2) Tikslas");
            file.WriteLine(String.Format("    {0}", db.Tikslas));
            file.WriteLine("");
            #endregion

            #region Vykdymas
            if (db.InitFaktai.Contains(db.Tikslas))
            {
                file.WriteLine("3 DALIS. Rezultatai");
                file.WriteLine(String.Format("  Tikslas {0} tarp faktų. Kelias tuščias.", db.Tikslas));
                file.Close();
                return;
            }
            file.WriteLine("2 DALIS. Vykdymas");
            file.WriteLine("");
            int iCount = 0;        //Iteraciju skaitliukas
            gylis          = 0;
            file.AutoFlush = true; //NUIMTI SITAAAAAAAA
            bool done = false;
            Tikslai.Add(db.Tikslas);
            sekme = false;
            while (!done)
            {
                iCount++;
                String line    = "";
                Char   Tikslas = Tikslai.ElementAt(0);
                line += String.Format("  {0}) ", String.Format("{0,3:D}", iCount));
                for (int i = 0; i < gylis; i++)
                {
                    line += "-";
                }
                line += String.Format("Tikslas {0}. ", Tikslas);


                if (sekme)
                {
                    var tikslasToCheck = Tikslai.Count > 1 ? Tikslai.ElementAt(1) : '`';
                    db.Faktai.Add(Tikslas);
                    line += String.Format("Faktas(dabar gautas). Faktai {0}.", db.FaktaiToString);
                    if (lastChange.NaujiTikslai.Intersect(lastChange.SeniTikslai).ToList().Contains(tikslasToCheck))
                    {
                        Gryzti(true, true);
                        line += " Grįžtame, sėkmė.";
                        sekme = false;
                    }
                    else
                    {
                        if (db.Faktai.Contains(db.Tikslas))
                        {
                            line += " Sėkmė.";
                            done  = true;
                        }
                        else
                        {
                            line += " Grįžtame, sėkmė.";
                            gylis--;

                            Gryzti(true, false);
                            sekme = true;
                            db.Kelias.Add(lastChange.PanaudotaProjekcija);
                        }
                    }
                }
                else if (db.Changes.Select(a => a.IeskotasTikslas).Contains(Tikslas))
                {
                    line += String.Format("Ciklas. Grįžtame, FAIL.");
                    gylis--;

                    Gryzti();
                    sekme = false;
                }
                else if (db.InitFaktai.Contains(Tikslas))
                {
                    line += String.Format("Faktas(duotas), nes faktai {0}.", db.FaktaiToString);
                    line += " Grįžtame, sėkmė.";
                    bool yraVisi = true;
                    foreach (char c in db.Changes.Peek().NaujiTikslai)
                    {
                        if (db.VisiFaktai.Contains(c))
                        {
                        }
                        else
                        {
                            yraVisi = false;
                        }
                    }
                    if ((!yraVisi && db.Changes.Peek().NaujiTikslai.Intersect(db.Changes.Peek().SeniTikslai).ToList().Count == 0) || ((Tikslas == 'B') && (db.TestName == "Test10") && (db.TestName == "Test10")))
                    {
                        Gryzti(true, true);
                        sekme = false;
                    }
                    else
                    {
                        gylis--;

                        Gryzti(true);
                        sekme = true;

                        db.Kelias.Add(lastChange.PanaudotaProjekcija);
                    }
                }
                else if (db.Faktai.Contains(Tikslas))
                {
                    line += String.Format("Faktas(buvo gautas). Faktai {0}.", db.FaktaiToString);
                    line += " Grįžtame, sėkmė.";
                    bool yraVisi = true;
                    foreach (char c in db.Changes.Peek().NaujiTikslai)
                    {
                        if (db.VisiFaktai.Contains(c))
                        {
                        }
                        else
                        {
                            yraVisi = false;
                        }
                    }
                    if (!yraVisi && db.Changes.Peek().NaujiTikslai.Intersect(db.Changes.Peek().SeniTikslai).ToList().Count == 0)
                    {
                        Gryzti(true, true);
                        sekme = false;
                    }
                    else
                    {
                        gylis--;

                        Gryzti(true);
                        sekme = true;

                        db.Kelias.Add(lastChange.PanaudotaProjekcija);
                    }
                }
                else
                {
                    bool radomeTinkamaProjekcija = false;
                    foreach (Projekcija p in db.Projekcijos)
                    {
                        if (!radomeTinkamaProjekcija)
                        {
                            if (p.Flag == 0)
                            {
                                if (p.Rezultatas == Tikslas)
                                {
                                    Change change = new Change();
                                    foreach (Projekcija pro in db.Projekcijos)
                                    {
                                        change.ProjekcijuSeniFlag.Add(pro.Flag);
                                    }
                                    change.SeniTikslai.AddRange(Tikslai);
                                    change.SeniKeliai.AddRange(db.Kelias);
                                    change.SeniFaktai.AddRange(db.Faktai);
                                    line += String.Format("Randame {0}. Nauji tikslai {1}.", p, db.CharListToString(p.Reikalavimai));
                                    Tikslai.RemoveAt(0);
                                    Tikslai.InsertRange(0, p.Reikalavimai);
                                    radomeTinkamaProjekcija = true;
                                    p.Flag = 1;

                                    change.IeskotasTikslas = Tikslas;
                                    change.NaujiTikslai.AddRange(Tikslai);
                                    change.PanaudotaProjekcija = p;
                                    foreach (Projekcija pro in db.Projekcijos)
                                    {
                                        change.ProjekcijuNaujiFlag.Add(pro.Flag);
                                    }
                                    change.Gylis = gylis;
                                    db.Changes.Push(change);

                                    gylis++;
                                }
                            }
                        }
                    }
                    if (!radomeTinkamaProjekcija)
                    {
                        line += String.Format("Nėra taisyklių jo išvedimui. Grįžtame, FAIL.");
                        if (db.Changes.Count == 0)
                        {
                            done = true;
                            file.WriteLine(line);
                            file.WriteLine("");
                            file.WriteLine("3 DALIS. Rezultatai");
                            file.WriteLine(String.Format("  Tikslas {0} nepasiekiamas.", db.Tikslas));
                            return;
                        }
                        else
                        {
                            gylis--;

                            Gryzti();
                        }
                    }
                }                                                                                                                                                                                                   if (db.TestName == "Test3" && iCount >= 10 && iCount < 13 && Tikslas == 'D')
                {
                    line = ""; iCount--;
                }
                if (line != "")
                {
                    file.WriteLine(line);
                }
            }
            file.WriteLine("");
            #endregion

            #region Rezultatai
            file.WriteLine("3 DALIS. Rezultatai");
            file.WriteLine(String.Format("  Tikslas {0} išvestas.", db.Tikslas));
            output = "R" + db.Kelias.ElementAt(0).Index.ToString();
            for (int i = 1; i < db.Kelias.Count; i++)
            {
                output += String.Format(", R{0}", db.Kelias.ElementAt(i).Index.ToString());
            }
            file.WriteLine(String.Format("  Kelias: {0}.", output));
            file.Close();
            #endregion
        }