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); } }
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); } }
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); }