Пример #1
0
        /// <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();
            }
        }
Пример #2
0
        /// <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;
                }
            }
        }