private int findC(Obiekt Obiekt) { Obiekt.c = -1; int o; for (o = Obiekt.b; o >= Obiekt.a; o--) { if (Obiekt.orderFromSchrage[o, 2] < Obiekt.orderFromSchrage[Obiekt.b, 2]) { Obiekt.c = o; break; } } return(Obiekt.c); }
private int findB(Obiekt Obiekt) { int end = zadania; int cmax = ShrageCmax(Obiekt.orderFromSchrage); for (int j = end - 1; j > 0; j--) { int temp = (ShrageCmax(Obiekt.orderFromSchrage, j) + Obiekt.orderFromSchrage[j, 2]); if (cmax == temp) { Obiekt.b = j; break; } } return(Obiekt.b); }
private int findA(Obiekt Obiekt) { int suma = 0; int cmax = ShrageCmax(Obiekt.orderFromSchrage); for (int i = 0; i < Obiekt.b; i++) { suma = 0; for (int s = i; s <= Obiekt.b; s++) { suma += Obiekt.orderFromSchrage[s, 1]; } if (cmax == (Obiekt.orderFromSchrage[i, 0] + suma + Obiekt.orderFromSchrage[Obiekt.b, 2])) { Obiekt.a = i; break; } } return(Obiekt.a); }
public void Draw123() { //DanePlik temp = danePliks[0]; int t_czas; int[,] temp_czasy; string numery = string.Empty; string numery1 = string.Empty; xd.Text = "0"; temp_czasy = null; switch (co) { case 0: { temp_czasy = (temp.czasy); xd.Text = temp.Czas(temp.czasy).ToString(); break; } case 1: { /* * */ double x = 1000.00; //temp_czasy =( temp.Annealing(x)); temp_czasy = temp.AnnealingTakingList(x, temp.NehReturningList()); numery = temp.bestOptA; numery1 = temp.bestOptA1; xd.Text = temp.Czas(temp_czasy).ToString(); kupa.Text = numery1; break; } case 2: { temp_czasy = (temp.prez_wy); numery = temp.bestOpt; xd.Text = temp.Czas(temp_czasy).ToString(); break; } case 3: { temp_czasy = (temp.JohnsonNaSztywno()); numery = temp.bestOptJ; numery1 = temp.bestOptJ1; xd.Text = temp.Czas(temp_czasy).ToString(); kupa.Text = numery1; break; } case 4: { temp_czasy = temp.Neh(); numery = temp.bestOptJ; numery1 = temp.bestOptN1; xd.Text = temp.Czas(temp_czasy).ToString(); kupa.Text = numery1; break; } case 5: { temp_czasy = temp.Schrage(); xd.Text = "Schrage: " + temp.ShrageCmax(temp_czasy).ToString() + "\nSchragePtmn: " + temp.SchragePtmn().ToString(); //xd.Text = //kupa.Text = numery1; break; } case 6: { temp_czasy = (temp.czasy); Obiekt obiekt = new Obiekt(); obiekt.orderFromSchrage = temp.czasy; xd.Text = "Calier: " + temp.Calier(obiekt).ToString(); break; } default: { temp_czasy = (temp.czasy); xd.Text = temp.Czas(temp.czasy).ToString(); break; } } int[] t_zwolnienia = new int[temp.maszyny]; byte r, g, b; Array.Clear(t_zwolnienia, 0, t_zwolnienia.Length); Random rnd = new Random(); for (int z = 0; z < temp.zadania; z++) { t_czas = 0; int mv = 0; string numer; if (numery != string.Empty) { numer = (numery[z] - 48).ToString(); } else { numer = (z + 1).ToString(); } r = (byte)rnd.Next(255); g = (byte)rnd.Next(255); b = (byte)rnd.Next(255); for (int i = 0; i < temp.maszyny; i++) { t_czas = temp_czasy[z, i]; int t_czas2 = t_czas * sekunda; Rectangle rec = new Rectangle() { Width = t_czas2, Height = 40, Fill = new SolidColorBrush(Color.FromRgb(r, g, b)), Stroke = Brushes.Black, }; canvas.Children.Add(rec); Canvas.SetTop(rec, 20 + mv); if (i == 0) { Canvas.SetLeft(rec, sekunda + t_zwolnienia[i]); } else { if (t_zwolnienia[i] >= t_zwolnienia[i - 1]) { Canvas.SetLeft(rec, sekunda + t_zwolnienia[i]); } else { Canvas.SetLeft(rec, sekunda + t_zwolnienia[i - 1]); } } Label lab = new Label() { Content = numer, FontSize = 20, Foreground = new SolidColorBrush(Color.FromRgb((byte)(255 - r), (byte)(255 - g), (byte)(255 - b))), }; canvas.Children.Add(lab); Canvas.SetTop(lab, 10 + mv); if (i == 0) { Canvas.SetLeft(lab, sekunda / 2 + t_czas2 / 2 + t_zwolnienia[i]); } else { if (t_zwolnienia[i] >= t_zwolnienia[i - 1]) { Canvas.SetLeft(lab, sekunda / 2 + t_czas2 / 2 + t_zwolnienia[i]); } else { Canvas.SetLeft(lab, sekunda / 2 + t_czas2 / 2 + t_zwolnienia[i - 1]); } } if (i == 0) { t_zwolnienia[i] += t_czas2; } else { if (t_zwolnienia[i] >= t_zwolnienia[i - 1]) { t_zwolnienia[i] += (t_czas2); } else { t_zwolnienia[i] = t_zwolnienia[i - 1] + (t_czas2); } } mv += 60; } } //xd.Text = (t_zwolnienia[temp.maszyny - 1]/sekunda).ToString(); }
public int Calier(Obiekt Obiekt) { Obiekt.orderFromSchrage = Schrage(Obiekt.orderFromSchrage); Obiekt.U = ShrageCmax(Obiekt.orderFromSchrage); if (Obiekt.U < Obiekt.UB) { Obiekt.UB = Obiekt.U; } Console.WriteLine("Tu ub" + Obiekt.UB); Obiekt.b = findB(Obiekt); Console.WriteLine("b:" + Obiekt.b); Obiekt.a = findA(Obiekt); Console.WriteLine("a:" + Obiekt.a); Obiekt.c = findC(Obiekt); Console.WriteLine("c:" + Obiekt.c); if (Obiekt.c == -1) { return(Obiekt.UB); } int min1 = int.MaxValue; int min2 = int.MaxValue; int sum = 0; for (int incrementy = Obiekt.c + 1; incrementy <= Obiekt.b; incrementy++) { min1 = Math.Min(min1, Obiekt.orderFromSchrage[incrementy, 0]); min2 = Math.Min(min2, Obiekt.orderFromSchrage[incrementy, 2]); sum += Obiekt.orderFromSchrage[incrementy, 1]; } var rk = min1; var qk = min2; var pk = sum; var hK = rk + pk + qk; int temp; temp = Obiekt.orderFromSchrage[Obiekt.c, 0]; Obiekt.orderFromSchrage[Obiekt.c, 0] = Math.Max(Obiekt.orderFromSchrage[Obiekt.c, 0], rk + pk); Obiekt.LB = SchragePtmn(Obiekt.orderFromSchrage); var hKc = Math.Min(rk, Obiekt.orderFromSchrage[Obiekt.c, 0] + pk + Obiekt.orderFromSchrage[Obiekt.c, 1] + Math.Min(qk, Obiekt.orderFromSchrage[Obiekt.c, 2])); Obiekt.LB = Math.Max(hK, Obiekt.LB); Obiekt.LB = Math.Max(hKc, Obiekt.LB); Console.WriteLine("Tu lb" + Obiekt.LB); if (Obiekt.LB < Obiekt.UB) { Obiekt.UB = Calier(Obiekt); } if (Obiekt.c == -1) { return(Obiekt.UB); } Obiekt.orderFromSchrage[Obiekt.c, 0] = temp; int temp1 = Obiekt.orderFromSchrage[Obiekt.c, 2]; Obiekt.orderFromSchrage[Obiekt.c, 2] = Math.Max(Obiekt.orderFromSchrage[Obiekt.c, 2], qk + pk); Obiekt.LB = SchragePtmn(Obiekt.orderFromSchrage); hKc = Math.Min(rk, Obiekt.orderFromSchrage[Obiekt.c, 0] + pk + Obiekt.orderFromSchrage[Obiekt.c, 1] + Math.Min(qk, Obiekt.orderFromSchrage[Obiekt.c, 2])); Obiekt.LB = Math.Max(hK, Obiekt.LB); Obiekt.LB = Math.Max(hKc, Obiekt.LB);; if (Obiekt.LB < Obiekt.UB) { Obiekt.UB = Calier(Obiekt); } Obiekt.orderFromSchrage[Obiekt.c, 2] = temp1; return(Obiekt.UB); }