Esempio n. 1
0
        public void XPSzerzes(Allapot megoldottAllapot)
        {
            int elotteXP = xp;

            switch (megoldottAllapot)
            {
            case Allapot.Varakozik:
                xp++;
                break;

            case Allapot.Rendelne:
                xp += 3;
                break;

            case Allapot.Eloetel:
                xp++;
                break;

            case Allapot.Foetel:
                xp++;
                break;

            case Allapot.Fizetne:
                xp += 2;
                break;

            default:
                break;
            }

            int utanaXP = xp;

            Szintlepes(elotteXP, utanaXP);
        }
Esempio n. 2
0
 public Csucs(Allapot allapot, Operator eloallito, Csucs szulo, double heurisztika)
 {
     this.allapot     = allapot;
     this.eloallito   = eloallito;
     this.szulo       = szulo;
     this.heurisztika = heurisztika;
 }
Esempio n. 3
0
 public Allapot(Allapot allapot)
 {
     this.kiraly[0] = allapot.kiraly[0];
     this.kiraly[1] = allapot.kiraly[1];
     this.huszar[0] = allapot.huszar[0];
     this.huszar[1] = allapot.huszar[1];
 }
Esempio n. 4
0
    public int Utes(Allapot a, Problema p)
    {
        var operatorok  = p.operatorok;
        var returnValue = 500;

        foreach (var o in operatorok)
        {
            if (o.babu == 1)
            {
                if (o.alkalmazhato(a))
                {
                    Allapot ujHuszarAllapot = o.lepes(a);
                    if (ujHuszarAllapot.huszar.SequenceEqual(a.kiraly))
                    {
                        returnValue = 0;
                    }
                }
            }
            else if (o.babu == 0)
            {
                if (o.alkalmazhato(a))
                {
                    Allapot ujKiralyAllapot = o.lepes(a);
                    if (ujKiralyAllapot.kiraly.SequenceEqual(a.huszar))
                    {
                        returnValue = 1;
                    }
                }
            }
        }
        return(returnValue);
    }
        // Keresés
        public override void Kereses()
        {
            Allapot        kezdoAllapot = new Allapot();
            List <Allapot> ut           = new List <Allapot>();

            ut.Add(kezdoAllapot);
            Random random = new Random();

            // Meddig
            while (!ut.Last().celfeltetel())
            {
                int      randomIndex        = random.Next(0, Operatorok.Count);
                Operator valasztottOperator = Operatorok[randomIndex];

                if (valasztottOperator.Elofeltetel(ut.Last()))
                {
                    Allapot ujAllapot = valasztottOperator.BabuMozdit(ut.Last());
                    ut.Add(ujAllapot);
                }
            }

            // Állapotok hozzáadása az útvonalhoz
            foreach (Allapot allapot in ut)
            {
                Utvonal.Add(allapot);
            }
        }
Esempio n. 6
0
 /// <summary>
 /// Cons of megrendeles
 /// </summary>
 /// <param name="id">id atadasa</param>
 /// <param name="megrendelo">megrendelo atadasa</param>
 public Megrendeles(int id, List <Bicikli> bi, Allapot status, string nev, string dolgozo)
 {
     this.id         = id;
     this.biciklik   = bi;
     this.status     = status;
     this.bikemennyi = biciklik.Count;
     this.rendelo    = nev;
     this.dolgozo    = dolgozo;
 }
Esempio n. 7
0
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            Allapot al = (Allapot)value;

            if (al == Allapot.Operatorra_var)
            {
                return(Brushes.Red);
            }
            else if (al == Allapot.Folyamatban)
            {
                return(Brushes.Blue);
            }
            else
            {
                return(Brushes.Green);
            }
        }
Esempio n. 8
0
        // Keresés
        public override void Kereses()
        {
            Stack <Csomopont> ut = new Stack <Csomopont>();

            ut.Push(new Csomopont(new Allapot(), 0));

            int szamlalo = 0;

            // Meddig
            while (ut.Count > 0 && ut.Peek().Allapot.celfeltetel() == false)
            {
                Csomopont aktualisCsomopont = ut.Peek();

                if (aktualisCsomopont.OperatorIndex < Operatorok.Count)
                {
                    Operator aktualisOperator = Operatorok[aktualisCsomopont.OperatorIndex];
                    if (aktualisOperator.Elofeltetel(aktualisCsomopont.Allapot))
                    {
                        Allapot   ujAllapot   = aktualisOperator.BabuMozdit(aktualisCsomopont.Allapot);
                        Csomopont ujCsomopont = new Csomopont(ujAllapot, 0);
                        if (ut.Contains(ujCsomopont) == false)
                        {
                            ut.Push(ujCsomopont);
                        }
                    }
                    aktualisCsomopont.OperatorIndex++;
                }
                else
                {
                    // visszalépés
                    szamlalo++;
                    ut.Pop();
                }
            }

            // Útvonal eltárolása
            if (ut.Count > 0)
            {
                foreach (Csomopont csomopont in ut)
                {
                    Utvonal.Add(csomopont.Allapot);
                }
                Utvonal.Reverse();
            }
        }
Esempio n. 9
0
        public override void Kereses()
        {
            Stack <Csomopont> ut = new Stack <Csomopont>();

            ut.Push(new Csomopont(new Allapot(), 0));

            int szamlalo = 0;

            while (ut.Count > 0 && ut.Peek().Allapot.Celfeltetel() == false)
            {
                Csomopont aktualisCsomopont = ut.Peek();

                if (aktualisCsomopont.OperatorIndex < Operatorok.Count)
                {
                    Operator aktualisOperator = Operatorok[aktualisCsomopont.OperatorIndex];

                    if (aktualisOperator.Elofeltetel(aktualisCsomopont.Allapot))
                    {
                        Allapot   ujAllapot   = aktualisOperator.HuszarAthelyezes(aktualisCsomopont.Allapot);
                        Csomopont ujCsomopont = new Csomopont(ujAllapot, 0);
                        if (ut.Contains(ujCsomopont) == false)
                        {
                            ut.Push(ujCsomopont);
                        }
                    }
                    aktualisCsomopont.OperatorIndex++;
                }

                else
                {
                    szamlalo++;
                    ut.Pop();
                }
            }

            if (ut.Count > 0)
            {
                foreach (Csomopont csomopont in ut)
                {
                    Utvonal.Add(csomopont.Allapot);
                }
                Utvonal.Reverse();
            }
        }
Esempio n. 10
0
    public double heur(Allapot a, int babu)
    {
        double diff;

        if (babu == 0)
        {
            int[] cel = new int[2] {
                8, 7
            };
            diff = Math.Sqrt((cel[0] - a.kiraly[0]) * (cel[0] - a.kiraly[0])) + ((cel[1] - a.kiraly[1]) * (cel[1] - a.kiraly[1]));
        }
        else
        {
            int[] cel = new int[2] {
                8, 7
            };
            diff = Math.Sqrt((cel[0] - a.huszar[0]) * (cel[0] - a.huszar[0])) + ((cel[1] - a.huszar[1]) * (cel[1] - a.huszar[1]));
        }
        return(diff);
    }
Esempio n. 11
0
        public override void Kereses()
        {
            Stack <Csomopont> ut           = new Stack <Csomopont>();
            Csomopont         kezdoAllapot = new Csomopont(new Allapot(), 0);

            ut.Push(kezdoAllapot);
            bool feketeLepet = true;

            while (ut.Count > 0 && !ut.Peek().Allapot.celFeltetel())
            {
                Csomopont aktualisCsomopont = ut.Peek();
                if (this.operatorok.Count > aktualisCsomopont.Index)
                {
                    Operator aktualisOperator = operatorok[aktualisCsomopont.Index];

                    if (aktualisOperator.Elofeltetel(aktualisCsomopont.Allapot, feketeLepet))
                    {
                        feketeLepet = aktualisCsomopont.Allapot.Babuk[operatorok[aktualisCsomopont.Index].Melyiket].SzinFekete;
                        Allapot   ujAllapot   = aktualisOperator.Mozgatas(aktualisCsomopont.Allapot);
                        Csomopont ujCsomopont = new Csomopont(ujAllapot, 0);
                        if (!ut.Contains(ujCsomopont))
                        {
                            ut.Push(ujCsomopont);
                        }
                    }
                    aktualisCsomopont.Index++;
                }
                else
                {
                    ut.Pop();
                }
            }

            for (int i = 0; i < ut.Count; i++)
            {
                Utvonal.Add(ut.ElementAt(i).Allapot);
                //Console.WriteLine(ut.ElementAt(i));
            }
            Utvonal.Reverse();
            //Console.WriteLine(Utvonal.Count);
        }
Esempio n. 12
0
        public override void Kereses()
        {
            Stack <Csomopont> nyiltCsucsok = new Stack <Csomopont>();
            List <Csomopont>  zartCsucsok  = new List <Csomopont>();

            nyiltCsucsok.Push(new Csomopont(new Allapot(), null));

            while (nyiltCsucsok.Count > 0 && nyiltCsucsok.Peek().Allapot.Celfeltetel() == false)
            {
                Csomopont aktualisCsomopont = nyiltCsucsok.Pop();

                foreach (Operator op in Operatorok)
                {
                    if (op.Elofeltetel(aktualisCsomopont.Allapot))
                    {
                        Allapot   ujAllapot   = op.HuszarAthelyezes(aktualisCsomopont.Allapot);
                        Csomopont ujCsomopont = new Csomopont(ujAllapot, aktualisCsomopont);

                        if (nyiltCsucsok.Contains(ujCsomopont) == false && zartCsucsok.Contains(ujCsomopont) == false)
                        {
                            nyiltCsucsok.Push(ujCsomopont);
                        }
                    }
                }

                zartCsucsok.Add(aktualisCsomopont);
            }


            if (nyiltCsucsok.Count > 0)
            {
                Csomopont celCsomopont = nyiltCsucsok.Peek();
                while (celCsomopont != null)
                {
                    this.Utvonal.Add(celCsomopont.Allapot);
                    celCsomopont = celCsomopont.Szulo;
                }
                this.Utvonal.Reverse();
            }
        }
Esempio n. 13
0
        public override void Kereses()
        {
            Queue <Csomopont> nyiltCsucsok = new Queue <Csomopont>();
            List <Csomopont>  zartCsucsok  = new List <Csomopont>();

            nyiltCsucsok.Enqueue(new Csomopont(new Allapot(), null));

            while (nyiltCsucsok.Count > 0 && !nyiltCsucsok.Peek().Allapot.Celfeltetel())
            {
                Csomopont aktualisCsomopont = nyiltCsucsok.Dequeue();
                foreach (Operator op in Operatorok)
                {
                    if (op.Elofeltetel(aktualisCsomopont.Allapot))
                    {
                        Allapot ujAllapot = op.HuszarAthelyezes(aktualisCsomopont.Allapot);
                        //szülő beállítása
                        Csomopont ujCsomopont = new Csomopont(ujAllapot, aktualisCsomopont);

                        if (!nyiltCsucsok.Contains(ujCsomopont) && !zartCsucsok.Contains(ujCsomopont))
                        {
                            nyiltCsucsok.Enqueue(ujCsomopont);
                        }
                    }
                }
                zartCsucsok.Add(aktualisCsomopont);
            }

            if (nyiltCsucsok.Count > 0)
            {
                Csomopont celCsomopont = nyiltCsucsok.Peek();

                while (celCsomopont != null)
                {
                    this.Utvonal.Add(celCsomopont.Allapot);
                    celCsomopont = celCsomopont.Szulo;
                }

                this.Utvonal.Reverse();
            }
        }
Esempio n. 14
0
        public Form1()
        {
            keresok.Add(new BackTrack());
            keresok.Add(new Melysegi());
            keresok.Add(new Szelessegi());
            keresok.Add(new BestFirst());
            InitializeComponent();
            Allapot allapot = new Allapot();

            Console.WriteLine(allapot);

            foreach (Kereso kereso in keresok)
            {
                srchCB.Items.Add(kereso.GetType().Name);
            }
            srchCB.SelectedIndex = 0;

            //Képek kirajzolása
            pictureBox1.ImageLocation = "kezdo.png";
            pictureBox1.SizeMode      = PictureBoxSizeMode.StretchImage;
            pictureBox2.ImageLocation = "veg.png";
            pictureBox2.SizeMode      = PictureBoxSizeMode.StretchImage;
        }
Esempio n. 15
0
 public Elem(Allapot a, int b, int c)
 {
     this.allapot = a;
     this.x       = b;
     this.y       = c;
 }
        // Keresés
        public override void Kereses()
        {
            Stack <Csomopont> nyiltCsucsok = new Stack <Csomopont>();
            List <Csomopont>  zartCsucsok  = new List <Csomopont>();

            nyiltCsucsok.Push(new Csomopont(new Allapot(), null));

            // Meddig
            while (nyiltCsucsok.Count > 0 && !nyiltCsucsok.Peek().Allapot.celfeltetel())
            {
                Csomopont aktualisCsomopont = nyiltCsucsok.Pop();

                List <Csomopont> aktualisGyerekek = new List <Csomopont>();
                foreach (Operator op in Operatorok)
                {
                    if (op.Elofeltetel(aktualisCsomopont.Allapot))
                    {
                        Allapot   ujAllpot    = op.BabuMozdit(aktualisCsomopont.Allapot);
                        Csomopont ujCsomopont = new Csomopont(ujAllpot, aktualisCsomopont);

                        if (!nyiltCsucsok.Contains(ujCsomopont) && !zartCsucsok.Contains(ujCsomopont))
                        {
                            aktualisGyerekek.Add(ujCsomopont);
                        }
                    }
                }

                // Heurisztika alapján történő kiértékelés
                aktualisGyerekek.Sort(
                    delegate(Csomopont cs1, Csomopont cs2)
                {
                    if (cs1.Heurisztika > cs2.Heurisztika)
                    {
                        return(1);
                    }
                    else if (cs1.Heurisztika < cs2.Heurisztika)
                    {
                        return(-1);
                    }
                    else
                    {
                        return(0);
                    }
                });

                // Aktuális gyerekek eltárolása a nyílt csúcsokban
                foreach (Csomopont cs in aktualisGyerekek)
                {
                    nyiltCsucsok.Push(cs);
                }

                zartCsucsok.Add(aktualisCsomopont);
            }

            // Útvonal eltárolása
            if (nyiltCsucsok.Count > 0)
            {
                Csomopont celCsomopont = nyiltCsucsok.Peek();
                while (celCsomopont != null)
                {
                    this.Utvonal.Add(celCsomopont.Allapot);
                    celCsomopont = celCsomopont.Szulo;
                }
                this.Utvonal.Reverse();
            }
        }
Esempio n. 17
0
 /// <summary>
 /// feladat cons
 /// </summary>
 /// <param name="op">opperator atadas</param>
 /// <param name="id">id atadas</param>
 public OperatorFeladat(List <Bicikli> bic, Allapot all)
 {
     this.bicikli = bic;
     this.allapot = all;
 }
Esempio n. 18
0
 public bool Equals(Allapot obj)
 {
     return(GetHashCode() == obj.GetHashCode());
 }
        private void Pincer(Pincer pincer)
        {
            while (!ettermiNapVege)
            {
                Thread.Sleep(R.Next((int)Math.Ceiling(1000 * GSP), (int)Math.Ceiling(PINCER_MAXINTERVALLUM * pincer.IdoFaktor * GSP)));

                lock (queueLock)
                {
                    if (Erkezok.Count > 0)
                    {
                        try
                        {
                            lock (asztalLock)
                            {
                                int uresAsztalIdx = UresAsztal();
                                asztalok[uresAsztalIdx] = Erkezok.Dequeue();
                                if (Cselekszik(asztalok[uresAsztalIdx]))
                                {
                                    pincer.XPSzerzes(Allapot.Varakozik);
                                }
                            }

                            continue;
                        }
                        catch (NincsUresAsztalException)
                        {
                        }
                    }
                }

                if (asztalok.Any())
                {
                    try
                    {
                        lock (varakozoLock)
                        {
                            int legregebbi = RegenVarakozo();
                            lock (asztalLock)
                            {
                                Allapot megoldandoAllapot = asztalok[legregebbi].Allapot;
                                if (Cselekszik(asztalok[legregebbi]))
                                {
                                    if (megoldandoAllapot == Allapot.Fizetne)
                                    {
                                        napiBevetel += asztalok[legregebbi].Rendelesek.Sum(x => x.Ertek);
                                    }
                                    pincer.XPSzerzes(megoldandoAllapot);
                                }
                            }
                        }
                    }
                    catch (Exception)
                    {
                    }
                }

                if (erkezoSzimulacioVege && !asztalok.Any() && Erkezok.Count == 0)
                {
                    ettermiNapVege = true;
                }
            }
        }
Esempio n. 20
0
        public override void Kereses()
        {
            Stack <Csomopont> ut           = new Stack <Csomopont>();
            Csomopont         kezdoAllapot = new Csomopont(new Allapot(), 0);

            ut.Push(kezdoAllapot);
            bool feketeLepet = true;

            while (ut.Count > 0)
            {
                Csomopont aktualisCsomopont = ut.Peek();
                //55 ször fut le
                if (this.operatorok.Count > aktualisCsomopont.Index)
                {
                    //54 szer fur fut le
                    //Eddig jónak tűnik mert az operatorok száma  54 (6*9) és úgy kezdi össze hasonlítani
                    //Fura sokkal kevesebbszer futt le a cw mint az órai kódban

                    Operator aktualisOperator = operatorok[aktualisCsomopont.Index];


                    if (aktualisOperator.Elofeltetel(aktualisCsomopont.Allapot, feketeLepet))
                    {
                        feketeLepet = aktualisCsomopont.Allapot.Babuk[operatorok[aktualisCsomopont.Index].Melyiket].SzinFekete;
                        //operatorok[aktualisCsomopont.Index].
                        //this.elötteMozgatottSzine = aktualisOperator.;
                        // itt valamiért felül lesz írva az aktuális csomopont szerintem memória címzési hiba
                        Allapot   ujAllapot   = aktualisOperator.Mozgatas(aktualisCsomopont.Allapot);
                        Csomopont ujCsomopont = new Csomopont(ujAllapot, 0);
                        //!ut.Contains(ujCsomopont) valamiért false lesz és a utvonal .count nem nő
                        if (!ut.Contains(ujCsomopont) && (Utvonal.Count == 0 || ut.Count < Utvonal.Count))
                        {
                            //miért nem pushol elemet bele soha ?
                            ut.Push(ujCsomopont);
                            Console.WriteLine("Pusholtam az uj csomopontot");
                        }
                        else
                        {
                            Console.WriteLine("NEM Pusholtam ");
                        }
                    }
                    //else
                    //{
                    //    Console.WriteLine( "elbuktam az előfeltételt");
                    //}
                    aktualisCsomopont.Index++;
                }
                else
                {
                    Csomopont torol = ut.Pop();
                }
                //megvizsgálom az a célfeltétel ahol vagyok
                if (ut.Count > 0 && ut.Peek().Allapot.celFeltetel())
                {
                    Console.WriteLine("");
                    //megvizsgálom hogy rividebbet találtam e
                    //Console.WriteLine("1.if");
                    if (Utvonal.Count == 0 || ut.Count < Utvonal.Count)
                    {
                        //Console.WriteLine("2.if");
                        Utvonal.Clear();
                        for (int i = 0; i < ut.Count; i++)
                        {
                            Utvonal.Add(ut.ElementAt(i).Allapot);
                            Console.WriteLine("hozzá adtam egy útvonalat");
                        }
                        Utvonal.Reverse();
                    }
                }
            }
        }
Esempio n. 21
0
    public List <Operator> keres(Problema p, Heurisztika h)
    {
        LinkedList <Csucs> nyiltak = new LinkedList <Csucs>();
        LinkedList <Csucs> zartak  = new LinkedList <Csucs>();

        int aktualisBabu = 500;
        int babu         = Utes(p.kezdo(), p);

        h.heurisztika = h.heur(p.kezdo(), babu);

        nyiltak.AddLast(new Csucs(p.kezdo(), null, null, h.heurisztika));

        while (true)
        {
            if (!nyiltak.Any())
            {
                return(null);
            }

            Csucs kivalasztott = null;

            foreach (Csucs c in nyiltak)
            {
                //0 = király, 1 = huszár 500=rossz
                int cBabu = Utes(c.allapot, p);
                if (cBabu != 500)
                {
                    c.heurisztika = h.heur(c.allapot, cBabu);
                    if ((kivalasztott == null || kivalasztott.heurisztika > c.heurisztika))
                    {
                        kivalasztott = c;
                        aktualisBabu = cBabu;
                    }
                }
                else
                {
                    continue;
                }
            }

            if (kivalasztott.allapot.cel())
            {
                LinkedList <Operator> megoldas = new LinkedList <Operator>();
                for (Csucs c = kivalasztott; c.szulo != null; c = c.szulo)
                {
                    megoldas.AddFirst(c.eloallito);
                }
                return(megoldas.ToList());
            }

            nyiltak.Remove(kivalasztott);
            zartak.AddLast(kivalasztott);

            if (aktualisBabu != 500)
            {
                foreach (Operator o in p.operatorok)
                {
                    if (o.babu == aktualisBabu)
                    {
                        if (o.alkalmazhato(kivalasztott.allapot))
                        {
                            Allapot uj = o.lepes(kivalasztott.allapot);

                            bool voltMar = false;
                            foreach (Csucs c in nyiltak)
                            {
                                if (c.allapot.GetHashCode() == uj.GetHashCode())
                                {
                                    voltMar = true;
                                    break;
                                }
                            }
                            if (!voltMar)
                            {
                                foreach (Csucs c in zartak)
                                {
                                    if (c.allapot.GetHashCode() == uj.GetHashCode())
                                    {
                                        voltMar = true;
                                        break;
                                    }
                                }
                            }

                            if (!voltMar)
                            {
                                nyiltak.AddLast(new Csucs(uj, o, kivalasztott, h.heur(uj, aktualisBabu)));
                            }
                        }
                    }
                    else
                    {
                        continue;
                    }
                }
            }
        }
    }