/// <summary> /// Informacja o postępie operacji generowania chromosomów /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void backgroundGeneruj_ProgressChanged(object sender, ProgressChangedEventArgs e) { if (!backgroundGeneruj.CancellationPending) { ThreadModelView item = (ThreadModelView)e.UserState; bestFitness.Text = item.TheBestFitness.ToString(); labelGeneracji.Text = item.CurrentGeneration.ToString(); bestFitness.Refresh(); labelGeneracji.Refresh(); chart1.Series[0].Points.AddXY(item.CurrentGeneration, item.CurrentFitness); for (int j = 0; j < DaysCount; j++) { for (int w = 0; w < Exam.RecordCount; w++) { dataGridViewSchedule.Rows[w].Cells[j + 2].Value = null; } } listView1.Items.Clear(); for (int d = 0; d < BestSchedule.Count; d++) { ListViewItem item_view = new ListViewItem((d + 1).ToString()); item_view.SubItems.Add(BestSchedule[d].GetFitness().ToString()); listView1.Items.Add(item_view); listView1.Refresh(); } for (int i = 0; i < BestSchedule[0].GetSlots().Count; i++) { List <Egzaminy> item_egzaminy = BestSchedule[0].GetSlots().ElementAt(i).ToList(); for (int j = 0; j < item_egzaminy.Count; j++) { for (int w = 0; w < Exam.RecordCount; w++) { if (dataGridViewSchedule.Rows[w].Cells[0].Value.ToString() == item_egzaminy.ElementAt(j).OsrodekKod && dataGridViewSchedule.Rows[w].Cells[1].Value.ToString() == item_egzaminy.ElementAt(j).KwalifikacjaKod) { dataGridViewSchedule.Rows[w].Cells[i + 2].Value = item_egzaminy.ElementAt(j).Kryterium; //egz.ElementAt(j).CzasTrwania + ", " + egz.ElementAt(j).LiczbaEgzaminatorow; } } } } dataGridViewSchedule.Update(); dataGridViewSchedule.Refresh(); listView1.Refresh(); } }
/// <summary> /// Operacja generowania chromosomu. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void backgroundGeneruj_DoWork(object sender, DoWorkEventArgs e) { ThreadModelView ThreadModel = (ThreadModelView)e.Argument; for (int i = 0; i < MAX_GENERATION; i++) { //_algorithm.GetSchedule(Examiner.GetListEgzaminatorzy(), Exam.GetListExams(), out _best); _best = _algorithm.GetSchedule(Examiner.GetListEgzaminatorzy(), Exam.GetListExams()); ThreadModel.CurrentFitness = _best.GetFitness(); if (ThreadModel.CurrentFitness > ThreadModel.TheBestFitness) { ThreadModel.TheBestFitness = ThreadModel.CurrentFitness; Schedule Best = Clonowanie.DeepCopy(_best); //TUTAJ JEST KLONOWANIE BestSchedule.Insert(0, Best); } ThreadModel.CurrentGeneration = i; Thread.Sleep(1000); backgroundGeneruj.ReportProgress(i, ThreadModel); //zgłoszenie o przerwaniu dzialania algorytmu if (backgroundGeneruj.CancellationPending) { e.Cancel = true; backgroundGeneruj.ReportProgress(0); return; } } }