private void CreateSchedule(BreakSchedule schedule) { var advertisementDataList = Solution.AdOrdersScores.Values.Where(t => !t.TimesAiredSatisfied || t.ViewsSatisfied).ToList(); advertisementDataList.Shuffle(Random); foreach (var ad in advertisementDataList) { if (Instance.GetTypeToBreakIncompatibility(ad, schedule) == 1) { continue; } if (Instance.GetBulkBrandIncompatibilities(ad.AdConstraints, schedule.Order).Contains(double.PositiveInfinity)) { continue; } schedule.AddAd(ad.AdConstraints); if (schedule.UnitFill > schedule.BreakData.SpanUnits + MaxOverfillUnits) { break; } } ScoringFunction.AssesBreak(schedule); AddToSolutionScores(schedule.Scores); GenerateReportEntry(); }
private static void AssertScoringFunctionsEqual(ScoringFunction expected, ScoringFunction actual) { Assert.IsType(expected.GetType(), actual); Assert.Equal(expected.FieldName, actual.FieldName); Assert.Equal(expected.Boost, actual.Boost); Assert.Equal(expected.Interpolation, actual.Interpolation); var expectedMagnitudeFunction = expected as MagnitudeScoringFunction; var expectedFreshnessFunction = expected as FreshnessScoringFunction; var expectedDistanceFunction = expected as DistanceScoringFunction; var expectedTagFunction = expected as TagScoringFunction; if (expectedMagnitudeFunction != null) { AssertMagnitudeScoringFunctionsEqual(expectedMagnitudeFunction, (MagnitudeScoringFunction)actual); } else if (expectedFreshnessFunction != null) { AssertFreshnessScoringFunctionsEqual(expectedFreshnessFunction, (FreshnessScoringFunction)actual); } else if (expectedDistanceFunction != null) { AssertDistanceScoringFunctionsEqual(expectedDistanceFunction, (DistanceScoringFunction)actual); } else if (expectedTagFunction != null) { AssertTagScoringFunctionsEqual(expectedTagFunction, (TagScoringFunction)actual); } else { Assert.True(false, "Unexpected scoring function type."); } }
protected override void InternalSolve() { _order = new List <AdvertisementTask>(); foreach (var adInfo in Instance.AdOrders.Values) { for (int i = 0; i < adInfo.MinTimesAired; i++) { _order.Add(adInfo); } } _order.Shuffle(Random); int curr = 0; var breakList = Solution.AdvertisementsScheduledOnBreaks.Values.ToList(); breakList.Shuffle(Random); foreach (var schedule in breakList) { int currentSize = 0; while (curr < _order.Count) { if ((currentSize += _order[curr].AdSpanUnits) >= schedule.BreakData.SpanUnits) { break; } schedule.AddAd(_order[curr]); curr++; } schedule.Scores = null; } ScoringFunction.AssesSolution(Solution); }
private void AddToSolutionScores(Dictionary <int, TaskScore> addedScores) { Solution.AddToSolutionScores(addedScores); ScoringFunction.RecalculateSolutionScoresBasedOnTaskData(Solution); }