コード例 #1
0
 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
     }
         );
 }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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
            }
                );
        }