Example #1
0
        public void StartGeneration(int generationCount)
        {
            for (int i = 0; i < generationCount; i++)
            {
                CreateTable();

                InitilizePopulationBaseOnFitness(populationSize);
            }

            TimeTable       t = TimeTable.GetBestTimeTable();
            ClsMeetingTable objMeetingTable = new ClsMeetingTable();

            ClsMeetingTable.strcMeetingTable myRowMeetingTable = objMeetingTable.GetNewRow();
            ClsPublic objPublic = new ClsPublic();

            foreach (Chromosome myChromosome in t.submittedChromosomes)
            {
                myRowMeetingTable.IDMeeting   = myChromosome.IDMeeting;
                myRowMeetingTable.IDSubmitter = idPerson;
                myRowMeetingTable.Date        = objPublic.DateTimeOfEndOfWeek(dateCurrentWeekEnd);
                myRowMeetingTable.Day         = (short)(myChromosome.Slot.Start / 48);
                int temp = (myChromosome.Slot.Start % 48);
                temp *= 15;
                myRowMeetingTable.TimeFrom = TimeSpan.Parse(((temp / 60) + 8) + ":" + (temp % 60));

                temp  = (myChromosome.Slot.End % 48);
                temp *= 15;
                myRowMeetingTable.TimeTo = TimeSpan.Parse(((temp / 60) + 8) + ":" + (temp % 60));

                objMeetingTable.Insert(myRowMeetingTable);
            }
        }
Example #2
0
        public void FetchConstantChromosomes(int IDPerson)
        {
            ClsMeetingTable         objMeetingTable         = new ClsMeetingTable();
            ClsMeetingRequestPerson objMeetingRequestPerson = new ClsMeetingRequestPerson();
            Meeting    myMeeting;
            Chromosome myChromosome;

            foreach (DataRow dRow in objMeetingTable.GetDataTableAcceptedMeetingsOfWeekWithDetailsofCompanyAndCompanyPlaceAndMeetingRequestWithIDPerson(dateCurrentWeekStart, dateCurrentWeekEnd, IDPerson).Rows)
            {
                myMeeting           = new Meeting();
                myChromosome        = new Chromosome();
                myMeeting.IDMeeting = dRow["IDMeeting"].ToString().ToInt();
                myMeeting.IDPlace   = dRow["PlaceCompanyID"].ToString().ToInt();
                myMeeting.Duraion   = dRow["Duration"].ToString().ToInt();

                meetings.Add(myMeeting.IDMeeting, myMeeting);

                myChromosome.IDMeeting = myMeeting.IDMeeting;
                myChromosome.Fitness   = constraintMeetingsFitness;
                myChromosome.Slot      = new TimeSlot {
                    Start = (dRow["Day"].ToString().ToInt() * 48) + ((dRow["TimeFrom"].ToString().Split(':')[0].ToInt() - 8) * 4) + (dRow["TimeFrom"].ToString().Split(':')[1].ToInt() / 15), End = (dRow["Day"].ToString().ToInt() * 48) - 1 + ((dRow["TimeTo"].ToString().Split(':')[0].ToInt() - 8) * 4) + (dRow["TimeTo"].ToString().Split(':')[1].ToInt() / 15)
                };

                constantChromosomes.Add(myChromosome);
            }
        }
Example #3
0
        public bool[] calculateLimitation(int idMeeting)
        {
            ClsMeetingRequest       objMeetingRequest       = new ClsMeetingRequest();
            ClsMeetingRequestPerson objMeetingRequestPerson = new ClsMeetingRequestPerson();
            ClsLimitation           objLimitation           = new ClsLimitation();
            ClsMeetingTable         objMeetingTable         = new ClsMeetingTable();



            int idPlace = objMeetingRequest.SelectByIDMeeting(idMeeting).Rows[0]["PlaceCompanyID"].ToString().ToInt();


            bool[]    dropZoneMap          = Enumerable.Repeat <bool>(true, 288).ToArray();
            DataTable dTableMeetinngPerson = objMeetingRequestPerson.GetDataTableAllPersonByIDMeeetingRequest(idMeeting);
            DataTable dTableLimitation;
            DataTable dTableMeetingTable;
            int       daysOffset      = 0;
            int       hourOffsetStart = 0;
            int       minOffsetStart  = 0;
            int       hourOffsetEnd   = 0;
            int       minOffsetEnd    = 0;

            foreach (DataRow dRow in dTableMeetinngPerson.Rows)
            {
                dTableLimitation = objLimitation.GetDataTableLimitationByIDPersonInCurrentWeek(dateCurrentWeekStart, dateCurrentWeekEnd, int.Parse(dRow["NO"].ToString()), idPlace);
                foreach (DataRow dRowInner in dTableLimitation.Rows)
                {
                    daysOffset      = int.Parse(dRowInner["Day"].ToString());
                    daysOffset      = (daysOffset * 48);
                    hourOffsetStart = int.Parse(dRowInner["TimeFrom"].ToString().Split(':')[0]);
                    hourOffsetStart = hourOffsetStart - 8;
                    hourOffsetStart = hourOffsetStart * 4;
                    minOffsetStart  = int.Parse(dRowInner["TimeFrom"].ToString().Split(':')[1]);
                    switch (minOffsetStart)
                    {
                    case 0:
                        minOffsetStart = 0;
                        break;

                    case 15:
                        minOffsetStart = 1;
                        break;

                    case 30:
                        minOffsetStart = 2;
                        break;

                    case 45:
                        minOffsetStart = 3;
                        break;

                    default:
                        minOffsetStart = 0;
                        break;
                    }


                    hourOffsetEnd = int.Parse(dRowInner["TimeTo"].ToString().Split(':')[0]);
                    hourOffsetEnd = hourOffsetEnd - 8;
                    hourOffsetEnd = hourOffsetEnd * 4;
                    minOffsetEnd  = int.Parse(dRowInner["TimeTo"].ToString().Split(':')[1]) / 15;

                    for (int j = daysOffset + hourOffsetStart + minOffsetStart; j < daysOffset + hourOffsetEnd + minOffsetEnd; j++)
                    {
                        dropZoneMap[j] = false;
                    }
                }


                dTableMeetingTable = objMeetingTable.GetDataTableAcctepedMeetingOfThisWeek(dateCurrentWeekStart, dateCurrentWeekEnd, dRow["NO"].ToString().ToInt(), idMeeting);
                foreach (DataRow dRowInner in dTableMeetingTable.Rows)
                {
                    daysOffset      = int.Parse(dRowInner["Day"].ToString());
                    daysOffset      = (daysOffset * 48);
                    hourOffsetStart = int.Parse(dRowInner["TimeFrom"].ToString().Split(':')[0]);
                    hourOffsetStart = hourOffsetStart - 8;
                    hourOffsetStart = hourOffsetStart * 4;
                    minOffsetStart  = int.Parse(dRowInner["TimeFrom"].ToString().Split(':')[1]);
                    switch (minOffsetStart)
                    {
                    case 0:
                        minOffsetStart = 0;
                        break;

                    case 15:
                        minOffsetStart = 1;
                        break;

                    case 30:
                        minOffsetStart = 2;
                        break;

                    case 45:
                        minOffsetStart = 3;
                        break;

                    default:
                        minOffsetStart = 0;
                        break;
                    }


                    hourOffsetEnd = int.Parse(dRowInner["TimeTo"].ToString().Split(':')[0]);
                    hourOffsetEnd = hourOffsetEnd - 8;
                    hourOffsetEnd = hourOffsetEnd * 4;
                    minOffsetEnd  = int.Parse(dRowInner["TimeTo"].ToString().Split(':')[1]) / 15;

                    for (int j = daysOffset + hourOffsetStart + minOffsetStart; j < daysOffset + hourOffsetEnd + minOffsetEnd; j++)
                    {
                        dropZoneMap[j] = false;
                    }
                }
            }
            return(dropZoneMap);
        }