private bool InsertInRandomNonFilledBreak(TaskScore taskData) { List <BreakSchedule> breaksWithEnoughSpace = Solution.AdvertisementsScheduledOnBreaks.Values.Where ( b => b.BreakData.SpanUnits >= b.UnitFill + taskData.AdConstraints.AdSpanUnits ).ToList(); if (breaksWithEnoughSpace.Count == 0) { return(false); } int breakNum = Random.Next(breaksWithEnoughSpace.Count); BreakSchedule schedule = breaksWithEnoughSpace[breakNum]; int position = Random.Next(schedule.Count + 1); Insert insert = new Insert() { TvBreak = schedule.BreakData, AdvertisementOrder = taskData.AdConstraints, Position = position, Instance = Instance, Solution = Solution, }; insert.Asses(); insert.Execute(); Reporter.AddEntry(insert.GenerateReportEntry()); return(true); }
private void ChooseMoveToPerform(List<int> positions, TaskScore taskScore, BreakSchedule breakSchedule) { foreach(var position in positions) { Insert move = new Insert() { Solution = Solution, Position = position, TvBreak = breakSchedule.BreakData, AdvertisementOrder = taskScore.AdConstraints, }; move.Asses(); if(move.OverallDifference.HasScoreImproved() && !move.OverallDifference.AnyCompatibilityIssuesIncreased()) { move.Execute(); Reporter.AddEntry(move.GenerateReportEntry()); _numberOfMoves += 1; _movePerformed = true; } else { break; } if (CurrentTime.Elapsed >= TimeLimit) break; } }
private void PerformIfTransformationImprovesScore(TaskScore taskScore, BreakSchedule breakSchedule) { Insert move = new Insert() { Solution = Solution, Position = breakSchedule.Count, TvBreak = breakSchedule.BreakData, AdvertisementOrder = taskScore.AdConstraints, }; move.Asses(); if (move.OverallDifference.HasScoreImproved() && !move.OverallDifference.AnyCompatibilityIssuesIncreased()) { move.Execute(); Reporter.AddEntry(move.GenerateReportEntry()); _numberOfMoves += 1; _movePerformed = true; } }
private void InsertInRandomBreak(TaskScore taskData) { int breakNum = Random.Next(Instance.Breaks.Count); TvBreak tvBreak = Instance.Breaks.Values.ToList()[breakNum]; BreakSchedule schedule = Solution.AdvertisementsScheduledOnBreaks[tvBreak.ID]; int position = Random.Next(schedule.Count + 1); Insert insert = new Insert() { TvBreak = schedule.BreakData, AdvertisementOrder = taskData.AdConstraints, Position = position, Instance = Instance, Solution = Solution, }; insert.Asses(); insert.Execute(); Reporter.AddEntry(insert.GenerateReportEntry()); }