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; }
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); } } }
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); } } }
private void RasytiIList() { RandomiserClass item = new RandomiserClass(); while (HelperList.TryPop(out item)) { RandomList.random.Add(item); } }