Exemplo n.º 1
0
 private Boolean ParuostiSpausdinimui(SimplexLentele Lent, List<int> Likutis, ref RandomElements rnd)
 {
     RandomiserClass Randomiser = new RandomiserClass();
     Randomiser.sablonas = subsabl;
     for (int i = 0; i < Randomiser.sablonas.SablonoSubNr.Count; i++)
     {
         Randomiser.kiekis.Add(0);
     }
     int dabartinis = 0;
     Boolean blogas = false;
     for (int i = 0; i < Lent.RHS.Count; i++)
     {
         if (Lent.BVS[i] >= 0)
         {
             if (Lent.RHS[i] < 0)
             {
                 blogas = true;
                 return true;
             }
             dabartinis += Lent.RHS[i];
             Randomiser.kiekis[Lent.BVS[i]] = Lent.RHS[i];
         }
     }
     if (blogas == false)
     {
         Randomiser.suma.AddRange(Likutis);
         for (int i = 0; i < Likutis.Count; i++)
         {
             if (Likutis[i] < 0)
             {
                 blogas = true;
                 return true;
             }
             Randomiser.liekana += Likutis[i];
         }
         if (blogas == false)
         {
             Randomiser.ilgis.AddRange(problem.ilgis);
             Randomiser.tipas.AddRange(problem.tipai);
             Randomiser.pagamintaDetaliu = dabartinis;
             if (rnd.random.Count > 0)
             {
                 if (rnd.random[0].pagamintaDetaliu < dabartinis)
                 {
                     rnd.random.Clear();
                     rnd.random.Add(Randomiser);
                 }
                 if (rnd.random[0].pagamintaDetaliu == dabartinis)
                 {
                     rnd.random.Add(Randomiser);
                 }
                 if (rnd.random[0].pagamintaDetaliu > dabartinis)
                 {
                     return true;
                 }
             }
             else
             {
                 rnd.random.Add(Randomiser);
             }
         }
     }
     return false;
 }
Exemplo n.º 2
0
        private void CloneBest(int kiekis)
        {
            Random r = new Random();
            RandomiserClass Randomiser = new RandomiserClass();
            //int pradiniai = RandomList.random.Count;
            for (int i = 0; i < RandomList.random.Count; i++)
            {
                for (int kiek = 0; kiek < kiekis; kiek++)
                {
                    Randomiser = new RandomiserClass();
                    Randomiser.sablonas = subsabl;
                    Randomiser.liekana = RandomList.random[i].liekana;
                    Randomiser.pagamintaDetaliu = RandomList.random[i].pagamintaDetaliu;
                    for (int j = 0; j < RandomList.random[i].suma.Count; j++)
                    {
                        Randomiser.suma.Add(RandomList.random[i].suma[j]);
                        Randomiser.ilgis.Add(RandomList.random[i].ilgis[j]);
                        Randomiser.tipas.Add(RandomList.random[i].tipas[j]);
                    }
                    for (int j = 0; j < RandomList.random[i].kiekis.Count; j++)
                    {
                        Randomiser.kiekis.Add(RandomList.random[i].kiekis[j]); // BUG?????????????????????????????????????????
                    }
                    for (int j = 0; j < Randomiser.sablonas.SablonoElem.Count; j++)  // Take out.
                    {
                        int pp = r.Next(10, 20); // 10-20
                        int KiekNaikinti = Convert.ToInt32(Math.Floor(Convert.ToDouble(Randomiser.kiekis[j]) / pp));
                        Randomiser.kiekis[j] -= KiekNaikinti;
                        for (int h = 0; h < Randomiser.sablonas.SablonoElem[j].Kiekis.Count; h++)
                        {
                            int prideti = Randomiser.sablonas.SablonoElem[j].Kiekis[h] * KiekNaikinti;
                            for (int x = 0; x < problem.kiekis.Count; x++)
                            {
                                if (problem.ilgis[x] == Randomiser.sablonas.SablonoElem[j].JuostIlgis[h] && problem.tipai[x] == Randomiser.sablonas.SablonoElem[j].JuostTipas[h])
                                {
                                    Randomiser.suma[x] += prideti;
                                }
                            }
                        }
                    }

                    List<string> likeNr = new List<string> { };
                    for (int h = 0; h < Randomiser.sablonas.SablonoNr.Count; h++)   // Put back in
                    {
                        likeNr.Add(Randomiser.sablonas.SablonoNr[h]);
                    }
                    while (likeNr.Count != 0)
                    {
                        int randomSablNr = r.Next(0, likeNr.Count);
                        int min = 99999;
                        for (int j = 0; j < Randomiser.sablonas.SablonoElem[randomSablNr].JuostIlgis.Count; j++)
                        {
                            for (int x = 0; x < problem.kiekis.Count; x++)
                            {
                                if (problem.ilgis[x] == Randomiser.sablonas.SablonoElem[randomSablNr].JuostIlgis[j] && problem.tipai[x] == Randomiser.sablonas.SablonoElem[randomSablNr].JuostTipas[j])
                                {
                                    double dal = Convert.ToDouble(Randomiser.sablonas.SablonoElem[randomSablNr].Kiekis[j]);
                                    int dalyba;
                                    if (dal != 0)
                                    {
                                        dalyba = Convert.ToInt32(Math.Floor(Convert.ToDouble(Randomiser.suma[x]) / dal));
                                    }
                                    else
                                    {
                                        dalyba = 999999999;
                                    }
                                    if (dalyba < min)
                                    {
                                        min = dalyba;
                                    }
                                }
                            }
                        }
                        if (min == 0 || min + Randomiser.kiekis[randomSablNr] < 6)
                        {
                            likeNr.RemoveAt(randomSablNr);
                        }
                        else
                        {
                            int apatineRiba = Math.Max(6 - Randomiser.kiekis[randomSablNr], 0);
                            int atm = r.Next(apatineRiba, min + 1);
                            Randomiser.kiekis[randomSablNr] += atm;

                            for (int j = 0; j < Randomiser.sablonas.SablonoElem[randomSablNr].Kiekis.Count; j++)
                            {
                                int atimti = Randomiser.sablonas.SablonoElem[randomSablNr].Kiekis[j] * atm;
                                for (int h = 0; h < problem.kiekis.Count; h++)
                                {
                                    if (problem.ilgis[h] == Randomiser.sablonas.SablonoElem[randomSablNr].JuostIlgis[j] && problem.tipai[h] == Randomiser.sablonas.SablonoElem[randomSablNr].JuostTipas[j])
                                    {
                                        Randomiser.suma[h] -= atimti;
                                    }
                                }
                            }
                        }
                    }
                    int suma = 0;
                    for (int sum = 0; sum < Randomiser.suma.Count; sum++)
                    {
                        suma += Math.Abs(Randomiser.suma[sum]);
                    }
                    Randomiser.liekana = suma;
                    int pagaminta = 0;
                    for (int j = 0; j < Randomiser.sablonas.SablonoElem.Count; j++)
                    {
                        if (Randomiser.kiekis[j] != 0)
                        {
                            pagaminta += Randomiser.kiekis[j];
                        }
                    }
                    Randomiser.pagamintaDetaliu = pagaminta;

                    HelperList.Push(Randomiser);
                }
            }
        }
Exemplo n.º 3
0
 private void NykstukuFabrikas(int kiekis)
 {
     // RandomList => HelperList
     Random r = new Random();
     RandomiserClass Randomiser = new RandomiserClass();
     for (int kiek = 0; kiek < kiekis; kiek++)
     {
         Randomiser = new RandomiserClass();
         Randomiser.sablonas = subsabl;
         List<int> viso = new List<int> { };
         List<int> likeNr = new List<int> { };
         for (int i = 0; i < problem.kiekis.Count; i++)
         {
             viso.Add(problem.kiekis[i]);
         }
         for (int i = 0; i < Randomiser.sablonas.SablonoSubNr.Count; i++)
         {
             Randomiser.kiekis.Add(0);
             likeNr.Add(Randomiser.sablonas.SablonoSubNr[i]);
         }
         while (likeNr.Count != 0)
         {
             int randomSablNr = r.Next(0, likeNr.Count);
             int min = 99999;
             for (int j = 0; j < Randomiser.sablonas.SablonoElem[randomSablNr].JuostIlgis.Count; j++)
             {
                 for (int h = 0; h < viso.Count; h++)
                 {
                     if (problem.ilgis[h] == Randomiser.sablonas.SablonoElem[randomSablNr].JuostIlgis[j] && problem.tipai[h] == Randomiser.sablonas.SablonoElem[randomSablNr].JuostTipas[j])
                     {
                         double dal = Convert.ToDouble(Randomiser.sablonas.SablonoElem[randomSablNr].Kiekis[j]);
                         int dalyba;
                         if(dal != 0)
                         {
                             dalyba = Convert.ToInt32(Math.Floor(Convert.ToDouble(viso[h]) / dal));
                         }
                         else
                         {
                             dalyba = 9999999;
                         }
                         if (dalyba < min)
                         {
                             min = dalyba;
                         }
                     }
                 }
             }
             if (min == 0)
             {
                 likeNr.RemoveAt(randomSablNr);
             }
             else
             {
                 int atm = r.Next(0, min + 1); // panaikinti random
                 Randomiser.kiekis[randomSablNr] += atm;
                 for (int j = 0; j < Randomiser.sablonas.SablonoElem[randomSablNr].Kiekis.Count; j++)
                 {
                     int atimti = Randomiser.sablonas.SablonoElem[randomSablNr].Kiekis[j] * atm;
                     for (int h = 0; h < viso.Count; h++)
                     {
                         if (problem.ilgis[h] == Randomiser.sablonas.SablonoElem[randomSablNr].JuostIlgis[j] && problem.tipai[h] == Randomiser.sablonas.SablonoElem[randomSablNr].JuostTipas[j])
                         {
                             viso[h] -= atimti;
                         }
                     }
                 }
             }
         }
         RandomElements rand = new RandomElements();
         Boolean virsNulio = true;
         int suma = 0;
         for (int sum = 0; sum < viso.Count; sum++)
         {
             if (viso[sum] < 0)
             {
                 virsNulio = false;
             }
             Randomiser.suma.Add(viso[sum]);
             Randomiser.ilgis.Add(problem.ilgis[sum]);
             Randomiser.tipas.Add(problem.tipai[sum]);
             suma += Math.Abs(viso[sum]);
         }
         Randomiser.liekana = suma;
         if (virsNulio == true)
         {
             int pagaminta = 0;
             for (int j = 0; j < Randomiser.sablonas.SablonoElem.Count; j++)
             {
                 if (Randomiser.kiekis[j] != 0)
                 {
                     pagaminta += Randomiser.kiekis[j];
                 }
             }
             Randomiser.pagamintaDetaliu = pagaminta;
             HelperList.Push(Randomiser);//RandomList.random.Add(Randomiser);
         }
     }
 }
Exemplo n.º 4
0
 private void RasytiIList()
 {
     RandomiserClass item = new RandomiserClass();
     while (HelperList.TryPop(out item))
     {
         RandomList.random.Add(item);
     }
 }