コード例 #1
0
ファイル: DanePlik.cs プロジェクト: lukasmas/SPDLab
        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);
        }
コード例 #2
0
ファイル: DanePlik.cs プロジェクト: lukasmas/SPDLab
        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);
        }
コード例 #3
0
ファイル: DanePlik.cs プロジェクト: lukasmas/SPDLab
        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);
        }
コード例 #4
0
ファイル: MainWindow.xaml.cs プロジェクト: lukasmas/SPDLab
        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();
        }
コード例 #5
0
ファイル: DanePlik.cs プロジェクト: lukasmas/SPDLab
        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);
        }