Beispiel #1
0
        public int global_penalti_intensifikasi(mengajar job, GLobalSolusi global_jadwal, int pos, int hari, int Mengajar, int startMengajar)
        {
            int penalti = 0;

            if (pos > 0)
            {
                for (int i = 0; i < pos; i++)
                {
                    for (int j = 0; j < global_jadwal.GlobalSolusi[i].Solusi[hari].Mengajar.Count; j++)
                    {
                        if (global_jadwal.GlobalSolusi[i].Solusi[hari].Mengajar[j].Guru == job.Guru)
                        {
                            if (Math.Abs(global_jadwal.GlobalSolusi[i].Solusi[hari].Mengajar[j].EndMengajar - startMengajar) < job.Sks)
                            {
                                penalti++;
                                form.Row = form.Log.NewRow(); form.Row["Status"] = "Intensifikasi Penalti"; form.Row["Keterangan"] = "Global penalti intensifikasi : " + penalti;
                                form.Log.Rows.Add(form.Row);
                            }
                        }
                    }
                }
            }
            else
            {
                penalti = 0;
            }
            return(penalti);
        }
Beispiel #2
0
        public int Lokal_penalti_intensifikasi(mengajar job, solusi jadwal, int pos, int hari)
        {
            int penalti      = 0;
            int limit_jadwal = limit(hari);

            for (int i = 0; i < jadwal.Solusi[hari].Mengajar.Count; i++)
            {
                limit_jadwal -= jadwal.Solusi[hari].Mengajar[i].Sks;
            }
            limit_jadwal -= job.Sks;
            if (limit_jadwal < 0)
            {
                penalti++;
                int ran = rr.Next(0, jadwal.Solusi[hari].Mengajar.Count);
                jadwal.Solusi[hari].Mengajar[ran].Problem = true;
                form.Row = form.Log.NewRow(); form.Row["Status"] = "Intensifikasi Penalti"; form.Row["Keterangan"] = "Lokal Intensifikasi penalti :" + penalti;
                form.Log.Rows.Add(form.Row);
            }

            return(penalti);
        }
Beispiel #3
0
        /// <summary>
        /// terakhir check bentrok collection yang di interchanging dengan global
        /// </summary>
        /// <param name=Solusi></param>
        /// <param name=global></param>
        /// <returns></returns>
        public GLobalSolusi interchanging(GLobalSolusi global, int pos)
        {
            if (pos >= 0)
            {
                int  x    = -1;
                int  xx   = -1;
                bool prob = false;
                int  i    = 0;
                int  j    = 0;
                while (!prob && i < global.GlobalSolusi[pos].Solusi.Count)
                {
                    while (!prob && j < global.GlobalSolusi[pos].Solusi[i].Mengajar.Count)
                    {
                        if (global.GlobalSolusi[pos].Solusi[i].Mengajar[j].Problem)
                        {
                            x    = i;
                            xx   = j;
                            prob = true;
                        }
                        j++;
                    }
                    i++;
                }
                if (prob)
                {
                    if (pos > 0)
                    {
                        int xy  = -1;
                        int xyy = -1;
                        for (int y = 0; y < global.GlobalSolusi[pos].Solusi.Count; y++)
                        {
                            int startJam = limit(y);
                            for (int yy = 0; yy < global.GlobalSolusi[pos].Solusi[y].Mengajar.Count; yy++)
                            {
                                if (global_penalti_intensifikasi(global.GlobalSolusi[pos].Solusi[x].Mengajar[xx], global, pos, y, yy, startJam) == 0)
                                {
                                    if (Lokal_penalti_intensifikasi(global.GlobalSolusi[pos].Solusi[x].Mengajar[xx], global.GlobalSolusi[pos], pos, y) == 0)
                                    {
                                        xy  = y;
                                        xyy = yy;
                                    }
                                }
                                startJam += global.GlobalSolusi[pos].Solusi[y].Mengajar[yy].Sks;
                            }
                        }

                        if (xy >= 0 && xyy >= 0)
                        {
                            mengajar temp = new mengajar();
                            temp = global.GlobalSolusi[pos].Solusi[x].Mengajar[xx];
                            global.GlobalSolusi[pos].Solusi[x].Mengajar[xx]   = global.GlobalSolusi[pos].Solusi[xy].Mengajar[xyy];
                            global.GlobalSolusi[pos].Solusi[xy].Mengajar[xyy] = temp;
                            regenerate_jam_mengajar(global.GlobalSolusi[pos]);
                        }
                        else
                        {
                            form.Row = form.Log.NewRow(); form.Row["Status"] = "Interchanging"; form.Row["Keterangan"] = "Gagal meemukan pasangan optimal, mencari pasangan minimum limit";
                            form.Log.Rows.Add(form.Row);
                            int min   = 1000;
                            int trial = 100;
                            for (int k = 0; k < trial; k++)
                            {
                                int y  = rr.Next(0, global.GlobalSolusi[pos].Solusi.Count);
                                int yy = rg.Next(0, global.GlobalSolusi[pos].Solusi[y].Mengajar.Count);
                                if (min > global_penalti_intensifikasi(global.GlobalSolusi[pos].Solusi[x].Mengajar[xx], global, pos, y, yy, global.GlobalSolusi[pos].Solusi[y].Mengajar[yy].StartMengajar))
                                {
                                    min = global_penalti_intensifikasi(global.GlobalSolusi[pos].Solusi[x].Mengajar[xx], global, pos, y, yy, global.GlobalSolusi[pos].Solusi[y].Mengajar[yy].StartMengajar);
                                    xy  = y;
                                    xyy = yy;
                                }
                            }
                            mengajar temp = new mengajar();
                            temp = global.GlobalSolusi[pos].Solusi[x].Mengajar[xx];
                            global.GlobalSolusi[pos].Solusi[x].Mengajar[xx]   = global.GlobalSolusi[pos].Solusi[xy].Mengajar[xyy];
                            global.GlobalSolusi[pos].Solusi[xy].Mengajar[xyy] = temp;
                            regenerate_jam_mengajar(global.GlobalSolusi[pos]);
                        }
                    }
                    else
                    {
                        int      xy   = rr.Next(0, global.GlobalSolusi[pos].Solusi.Count);
                        int      xyy  = rg.Next(0, global.GlobalSolusi[pos].Solusi[xy].Mengajar.Count);
                        mengajar temp = new mengajar();
                        temp = global.GlobalSolusi[pos].Solusi[x].Mengajar[xx];
                        global.GlobalSolusi[pos].Solusi[x].Mengajar[xx]   = global.GlobalSolusi[pos].Solusi[xy].Mengajar[xyy];
                        global.GlobalSolusi[pos].Solusi[xy].Mengajar[xyy] = temp;
                        regenerate_jam_mengajar(global.GlobalSolusi[pos]);
                    }
                }
            }
            else
            {
            }
            for (int i = 0; i < global.GlobalSolusi[pos].Solusi.Count; i++)
            {
                for (int j = 0; j < global.GlobalSolusi[pos].Solusi[i].Mengajar.Count; j++)
                {
                    if (global.GlobalSolusi[pos].Solusi[i].Mengajar[j].Problem)
                    {
                        global.GlobalSolusi[pos].Solusi[i].Mengajar[j].Problem = false;
                    }
                }
            }
            return(global);
        }