public void tampilkanHasil(Iterasi iterasi, int it)
 {
     hasilGridView.Rows.Add("Iterasi" + (it + 1), iterasi.sib.totalBeratSemut, iterasi.sib.totalProfitSemut, iterasi.cf, false, false, false);
 }
        private void ProsesButton_Click(object sender, EventArgs e)
        {
            hasilGridView.ColumnCount           = 7;
            hasilGridView.Columns[0].HeaderText = "Iterasi";
            hasilGridView.Columns[1].HeaderText = "Berat";
            hasilGridView.Columns[2].HeaderText = "Profit";
            hasilGridView.Columns[3].HeaderText = "Cf";
            hasilGridView.Columns[4].HeaderText = "Restart";
            hasilGridView.Columns[5].HeaderText = "srb";
            hasilGridView.Columns[6].HeaderText = "sgb";
            //hasilGridView.RowCount = 100;

            int jumlahBarang = barangGridView.RowCount - 1;

            Barang[] barangArray = new Barang[jumlahBarang];
            for (int i = 0; i < barangArray.Length; i++)
            {
                barangArray[i] = new Barang(Convert.ToString(barangGridView[0, i].Value), Convert.ToDouble(barangGridView[1, i].Value), Convert.ToDouble(barangGridView[2, i].Value));
            }
            int jumlahTas = tasGridView.RowCount - 1;

            Tas[] tasArray = new Tas[jumlahTas];
            for (int i = 0; i < jumlahTas; i++)
            {
                tasArray[i] = new Tas(Convert.ToString(tasGridView[0, i].Value), Convert.ToDouble(tasGridView[1, i].Value), jumlahBarang);
            }
            Array.Sort(barangArray);
            int jumlahSemut = Int32.Parse(jumlahSemutInput.Text);

            double[,] pheromone = new double[jumlahTas, jumlahBarang];
            for (int i = 0; i < jumlahTas; i++)
            {
                for (int j = 0; j < jumlahBarang; j++)
                {
                    pheromone[i, j] = 0.5;
                }
            }
            int    jumlahIterasi    = Int32.Parse(jumlahIterasiInput.Text);
            double evaporasi        = Double.Parse(evaporasiInput.Text);
            bool   restartPheromone = true;

            Iterasi[] iterasi = new Iterasi[jumlahIterasi];

            for (int it = 0; it < iterasi.Length; it++)
            {
                iterasi[it] = new Iterasi(pheromone, evaporasi);
                Semut[] semutArray = new Semut[jumlahSemut];
                Random  random     = new Random();
                for (int i = 0; i < semutArray.Length; i++)
                {
                    Tas[] tasArray1 = new Tas[jumlahTas];
                    for (int j = 0; j < jumlahTas; j++)
                    {
                        tasArray1[j] = new Tas(tasArray[j].namaTas, tasArray[j].kapasitasTas, jumlahBarang);
                    }
                    semutArray[i] = new Semut(tasArray1, barangArray, random);
                }

                for (int i = 0; i < semutArray.Length; i++)
                {
                    semutArray[i].randomSolusiAwal(pheromone);
                }

                double profitMax = 0, tempMax;
                int    semutMax = 0;
                for (int i = 0; i < semutArray.Length; i++)
                {
                    tempMax = semutArray[i].repairOperator();
                    if (tempMax > profitMax)
                    {
                        profitMax = tempMax;
                        semutMax  = i;
                    }
                }

                iterasi[it].sib = semutArray[semutMax];
                if (it == 0)
                {
                    iterasi[it].sgb = semutArray[semutMax];
                }
                else
                {
                    if (semutArray[semutMax].totalProfitSemut >= iterasi[it - 1].sgb.totalProfitSemut)
                    {
                        iterasi[it].sgb = semutArray[semutMax];
                        indexSgb        = it;
                    }
                    else
                    {
                        iterasi[it].sgb = iterasi[it - 1].sgb;
                    }
                }
                if (restartPheromone)
                {
                    iterasi[it].srb = semutArray[semutMax];
                    indexRestart.Add(it);
                    indexSrb.Add(it);
                    restartPheromone = false;
                    pheromone        = iterasi[it].hitungPheromoneUpdate(restartPheromone);
                }
                else
                {
                    if (semutArray[semutMax].totalProfitSemut >= iterasi[it - 1].srb.totalProfitSemut)
                    {
                        iterasi[it].srb = semutArray[semutMax];
                        indexSrb[indexSrb.Count - 1] = it;
                    }
                    else
                    {
                        iterasi[it].srb = iterasi[it - 1].srb;
                    }
                    double cf = iterasi[it].hitungCf();
                    if (cf >= 0.8)
                    {
                        restartPheromone = true;
                    }
                    pheromone = iterasi[it].hitungPheromoneUpdate(restartPheromone);
                }
                tampilkanHasil(iterasi[it], it);
                //detailIterasi(semutArray, it, semutMax, iterasi[it]);
            }
            updateCheck();
        }