Tutaj jest funkcja która robi obliczenia, nawet jak dodałem System.Threading.Thread.Sleep(10); to zdarza się ze dwa obiekty mają taka sama wartość optimum (optimum = wydobycie )
public void Obliczenia1(double modyfikator = 1)
{
//MessageBox.Show("");
bool go = false;
double wynik, posteplosowy;
Random PosLos = new Random();
for (int i = 0; i <= (this.dane.Length / 10)-1; i++)
{
go = false;
do{
posteplosowy = PosLos.NextDouble();
wynik = (posteplosowy * modyfikator)*this.dane[i,6] + this.dane[i,5];
if ((wynik >= (this.dane[i, 5] - this.dane[i, 6])) && ((wynik <= (this.dane[i, 5] + this.dane[i, 6]))))
{
//MessageBox.Show("Test" + wynik);
this.dane[i,7] = posteplosowy;
this.dane[i, 8] = this.dane[i, 0] * this.dane[i, 2] * (wynik * 21) * this.dane[i, 3] * this.dane[i, 4];
this.dane[i, 9] = Math.Round((this.dane[i, 1] / (wynik * 21)));
go = true;
wynik = 0;
}
}
while (go == false);
}
//Tutaj rozpoczyna się obliczanie wydobycia calosciowego a takze okreslanie funkcji F
for (int q = 0; q <= (this.dane.Length / 10) - 1; q++) // Petla dla 9 scian. 90/10 = 9
{
if (q == 0 || q == 1 || q == 2) // Sciana 1 2 3
{
for (int w = 0; w <= this.dane[q, 9]; w++)
{
if (w == 0)
{
kompleks1.Add(0);
kompleks1.Add(0);
}
kompleks1.Add(this.dane[q,8]);
}
}
if (q == 3 || q == 4 || q == 5) // Sciana 4 5 6
{
for (int w = 0; w <= this.dane[q, 9]; w++)
{
if (q== 3 && w == 0)
{
kompleks2.Add(0);
kompleks2.Add(0);
kompleks2.Add(0);
kompleks2.Add(0);
}
if ((q == 4 || q == 5) && w == 0)
{
//MessageBox.Show("Dziala funkcja 2x");
kompleks2.Add(0);
kompleks2.Add(0);
}
kompleks2.Add(this.dane[q, 8]);
}
}
if (q == 6 || q == 7 || q == 8) // Sciana 7 8 9
{
for (int w = 0; w <= this.dane[q, 9]; w++)
{
if ((q == 7 || q == 8) && w == 0)
{
kompleks3.Add(0);
kompleks3.Add(0);
}
kompleks3.Add(this.dane[q, 8]);
}
}
}
// Obliczono 3 kompleksy scianowe nastepnie sumujemy wydobycia w poszczegolnych miesiacach we wszystkich kompleksach
int[] listalisty = new int[3];
listalisty[0] = kompleks1.Count;
listalisty[1] = kompleks2.Count;
listalisty[2] = kompleks3.Count;
//MessageBox.Show("" + kompleks1.Count + " " + kompleks2.Count + " " + kompleks3.Count);
Array.Sort(listalisty);
int[] sumymiesieczne = new int[listalisty[2]];
// MessageBox.Show("" + listalisty[2]);
for (int h = 0; h <= listalisty[2] - 1; h++)
{
if (listalisty[2] >= kompleks1.Count)
{ kompleks1.Add(0); }
else if (listalisty[2] >= kompleks2.Count) { kompleks2.Add(0); }
else if (listalisty[2] >= kompleks3.Count) { kompleks3.Add(0); }
sumymiesieczne[h] = (Convert.ToInt32(kompleks1[h]) + Convert.ToInt32(kompleks2[h]) + Convert.ToInt32(kompleks3[h]));
}
for (int j = 12; j <= 36; j++)
{
optimum = optimum + Math.Pow(sumymiesieczne[j] - 150000, 2);
}
optimum = Math.Sqrt(optimum);
System.Threading.Thread.Sleep(6 );
//MessageBox.Show("Osobnik " + this.nrosobnika + " Postep: " + optimum);
}