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); }
public Csucs(Allapot allapot, Operator eloallito, Csucs szulo, double heurisztika) { this.allapot = allapot; this.eloallito = eloallito; this.szulo = szulo; this.heurisztika = heurisztika; }
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]; }
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); } }
/// <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; }
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); } }
// 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(); } }
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(); } }
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); }
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); }
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(); } }
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(); } }
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; }
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(); } }
/// <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; }
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; } } }
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(); } } } }
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; } } } } }