public CspTest(ITestOutputHelper testOutputHelper) { _testOutputHelper = testOutputHelper; _mapColoredCsp = CspFactory.Create( new Dictionary <string, IEnumerable <ColorWrapper> > { ["SA"] = _colorsDomain.ToList(), ["WA"] = _colorsDomain.ToList(), ["NT"] = _colorsDomain.ToList(), ["Q"] = _colorsDomain.ToList(), ["NSW"] = _colorsDomain.ToList(), ["V"] = _colorsDomain.ToList(), ["T"] = _colorsDomain.ToList() }, new Dictionary <string, IEnumerable <string> > { ["SA"] = new [] { "WA", "NT", "Q", "NSW", "V" }, ["WA"] = new [] { "SA", "NT" }, ["NT"] = new [] { "WA", "Q", "SA" }, ["Q"] = new [] { "NSW", "NT", "SA" }, ["NSW"] = new [] { "Q", "V", "SA" }, ["V"] = new [] { "NSW", "SA" } }, new Func <string, ColorWrapper, string, ColorWrapper, bool>[] { DiffValuesConstraint.Eval } ); }
public CspTest(ITestOutputHelper testOutputHelper) { _testOutputHelper = testOutputHelper; var testData = SudokuTestFactory.CreateTestData(); var domains = testData.Select(v => new KeyValuePair <string, IEnumerable <Number> >(v.Key, v.Value.domains)); var relations = testData.Select(v => new KeyValuePair <string, IEnumerable <string> >(v.Key, v.Value.relations)); _sudokuCsp = CspFactory.Create( new Dictionary <string, IEnumerable <Number> >(domains), new Dictionary <string, IEnumerable <string> >(relations), new Func <string, Number, string, Number, bool>[] { DiffValuesConstraint.Eval } ); var initialConfig = SudokuTestFactory.CreateStartConfig(); // Apply initial config foreach (var varValue in initialConfig) { _sudokuCsp.AddAssignment(varValue.Key, varValue.Value).ShrinkDomainToAssignment(varValue.Key); } }
public void OptimizeAndAssignTrips() { DemoLogger.InfLog("Create fleet ..."); _fleet = DemoFleetDataFactory.CreateRandomFleet(6); // Create Csp data problem from current fleet status var cspData = FleetCsp.FleetToCspModel(DemoFleetDataFactory.CreateCspProblemVariables().ToList(), _fleet); // Instantiate Csp-Model var fleetCsp = CspFactory.Create( new Dictionary <string, IEnumerable <TruckCspValue> >(cspData.Select(v => new KeyValuePair <string, IEnumerable <TruckCspValue> >(v.Key, v.Value.Domains))), new Dictionary <string, IEnumerable <string> >(cspData.Select(v => new KeyValuePair <string, IEnumerable <string> >(v.Key, v.Value.Relations))), new Func <string, TruckCspValue, string, TruckCspValue, bool>[] { // Constraint: Do not overlap on the same day (variableA, transportTruckA, variableB, transportTruckB) => { var dayA = variableA.Split('.').First(); var dayB = variableB.Split('.').First(); return(dayA != dayB || transportTruckA != transportTruckB); }, // Avoid commitment on Monday and Tuesday (variableA, transportTruckA, variableB, transportTruckB) => { var dayA = variableA.Split('.').First(); var dayB = variableB.Split('.').First(); if ( string.Compare(dayA, "mon", StringComparison.OrdinalIgnoreCase) == 0 && string.Compare(dayB, "tue", StringComparison.OrdinalIgnoreCase) == 0 || string.Compare(dayA, "tue", StringComparison.OrdinalIgnoreCase) == 0 && string.Compare(dayB, "mon", StringComparison.OrdinalIgnoreCase) == 0 ) { return(transportTruckA != transportTruckB); } return(true); } }); // Resolve the given problem var solved = fleetCsp.UseBackTrackingSearchResolver( SelectUnassignedVariableStrategyTypes <TruckCspValue> .FirstUnassignedVariable, DomainValuesOrderingStrategyTypes <TruckCspValue> .DomainCustomOrder) .Resolve(() => { PrintPlan(fleetCsp); }); Assert.True(solved); }
public CspTest(ITestOutputHelper testOutputHelper) { _testOutputHelper = testOutputHelper; var testData = SchoolCalendarTestFactory.CreateTestData(); var domains = testData.Select(v => new KeyValuePair <string, IEnumerable <Teacher> >(v.Key, v.Value.domains)); var relations = testData.Select(v => new KeyValuePair <string, IEnumerable <string> >(v.Key, v.Value.relations)); _schoolCalendarCsp = CspFactory.Create( new Dictionary <string, IEnumerable <Teacher> >(domains), new Dictionary <string, IEnumerable <string> >(relations), new Func <string, Teacher, string, Teacher, bool>[] { NextPreviousHoursConstraint.Eval, SimultaneouslyHoursConstraint.Eval } ); }