コード例 #1
0
        public void ShouldNotAddSetConstraintForEmptyRequest()
        {
            var req     = new NameValueCollection();
            var builder = new ConstraintsBuilder(req);

            builder.MaybeAddSetConstraint("test");
            Assert.AreEqual(0, builder.ToList().Count);
        }
コード例 #2
0
        protected override IEnumerable <IQueryConstraint> DetermineConstraints(System.Collections.Specialized.NameValueCollection requestParams)
        {
            var builder = new ConstraintsBuilder(requestParams);

            builder.MaybeAddDateRangeConstraint("bizDate");
            builder.MaybeAddSetConstraint("bookId");
            return(builder.ToList());
        }
コード例 #3
0
        public string Emit(Table table)
        {
            string sConstraints        = new ConstraintsBuilder(table).BuildConstraints();
            TemplatePlatformEmitter te = new TemplatePlatformEmitter("CreateTable", table.Name, new ColumnsBuilder(table, sConstraints.Length > 0).Build(), sConstraints);

            StringBuilder sTable = new StringBuilder(te.Emit(table));

            sTable.Append(new ConstraintsBuilder(table).BuildForeignKeyConstraints());
            sTable.Append(new IndexesBuilder(table.Indexes).Build());
            sTable.Append(new InsertDefaultValuesEmitter().Emit(table));
            return(sTable.ToString());
        }
コード例 #4
0
        public IEngine Create(ExperimentParameters experimentParameters)
        {
            var benchmarksFactory           = new BenchmarksFactory();
            var pointsGenerator             = new PointsGenerator();
            var benchmark                   = benchmarksFactory.Create(experimentParameters);
            var constraintsBuilder          = new ConstraintsBuilder(benchmark.Constraints, experimentParameters);
            var pointsNormalizer            = new StandardScorePointsNormalizer();
            var redundantConstraintsRemover = new RedundantConstraintsRemover(pointsGenerator, benchmark.Domains, experimentParameters);
            var meanAngleCalculator         = new MeanAngleCalculator();
            var stoper = new Stopwatch();

            return(new Core.Engine(experimentParameters, benchmark, constraintsBuilder, pointsNormalizer, redundantConstraintsRemover, meanAngleCalculator, stoper));
        }
コード例 #5
0
        public void ShouldAddSetConstraintWhenMultipleValuesArePresent()
        {
            var req = new NameValueCollection {{"someString", "a"}, {"someString", "b"}, {"someString", "c"}};
              var builder = new ConstraintsBuilder(req);

              builder.MaybeAddSetConstraint("someString");
              Assert.AreEqual(1, builder.ToList().Count);
              Assert.IsInstanceOf(typeof (SetQueryConstraint), builder.ToList()[0]);

              var c = (SetQueryConstraint) builder.ToList()[0];
              var expected = new HashSet<String> { "a", "b", "c" };
              Assert.That(expected, Is.EqualTo(c.Values).AsCollection);
        }
コード例 #6
0
        public void ShouldAddPrefixConstraintWhenValueIsPresent()
        {
            var req = new NameValueCollection();
              req["someString-prefix"] = "abc";
              var builder = new ConstraintsBuilder(req);

              builder.MaybeAddPrefixConstraint("someString");
              Assert.AreEqual(1, builder.ToList().Count);
              Assert.IsInstanceOf(typeof(PrefixQueryConstraint), builder.ToList()[0]);

              var c = (PrefixQueryConstraint)builder.ToList()[0];
              Assert.AreEqual("abc", c.Prefix);
        }
コード例 #7
0
        public void ShouldThrowInvalidConstraintExceptionWhenBadEndDateIsGiven()
        {
            var req = new NameValueCollection();

            req["bizDate-start"] = "2011-06-01";
            req["bizDate-end"]   = "abc";
            var builder = new ConstraintsBuilder(req);

            try {
                builder.MaybeAddDateRangeConstraint("bizDate");
                Assert.Fail("Should have thrown InvalidConstraintException");
            } catch (InvalidConstraintException ex) {
                Assert.AreEqual("The constraint value 'abc' is not valid for the field 'bizDate-end'", ex.Message);
            }
        }
コード例 #8
0
        public void ShouldAddPrefixConstraintWhenValueIsPresent()
        {
            var req = new NameValueCollection();

            req["someString-prefix"] = "abc";
            var builder = new ConstraintsBuilder(req);

            builder.MaybeAddPrefixConstraint("someString");
            Assert.AreEqual(1, builder.ToList().Count);
            Assert.IsInstanceOf(typeof(PrefixQueryConstraint), builder.ToList()[0]);

            var c = (PrefixQueryConstraint)builder.ToList()[0];

            Assert.AreEqual("abc", c.Prefix);
        }
コード例 #9
0
        public void ShouldAddDateRangeConstraintWhenBothStartAndEndArePresent()
        {
            var req = new NameValueCollection();
              req["bizDate-start"] = "2011-06-01";
              req["bizDate-end"] = "2011-06-30";
              var builder = new ConstraintsBuilder(req);

              builder.MaybeAddDateRangeConstraint("bizDate");
              Assert.AreEqual(1, builder.ToList().Count);
              Assert.IsInstanceOf(typeof (DateRangeQueryConstraint), builder.ToList()[0]);

              var c = (DateRangeQueryConstraint) builder.ToList()[0];
              Assert.AreEqual(new DateTime(2011, 6, 1), c.LowerBound);
              Assert.AreEqual(new DateTime(2011, 6, 30), c.UpperBound);
              Assert.AreEqual("bizDate", c.Category);
        }
コード例 #10
0
        public void ShouldAddTimeRangeConstraintWhenBothStartAndEndArePresent()
        {
            var req = new NameValueCollection();

            req["createTime-start"] = "2011-06-06T12:00:00.000Z";
            req["createTime-end"]   = "2011-06-06T16:00:00.000Z";
            var builder = new ConstraintsBuilder(req);

            builder.MaybeAddTimeRangeConstraint("createTime");
            Assert.AreEqual(1, builder.ToList().Count);
            Assert.IsInstanceOf(typeof(DateRangeQueryConstraint), builder.ToList()[0]);

            var c = (DateRangeQueryConstraint)builder.ToList()[0];

            Assert.AreEqual(new DateTime(2011, 6, 6, 12, 0, 0, 0, DateTimeKind.Utc), c.LowerBound);
            Assert.AreEqual(new DateTime(2011, 6, 6, 16, 0, 0, 0, DateTimeKind.Utc), c.UpperBound);
        }
コード例 #11
0
        public void ShouldAddDateRangeConstraintWhenBothStartAndEndArePresent()
        {
            var req = new NameValueCollection();

            req["bizDate-start"] = "2011-06-01";
            req["bizDate-end"]   = "2011-06-30";
            var builder = new ConstraintsBuilder(req);

            builder.MaybeAddDateRangeConstraint("bizDate");
            Assert.AreEqual(1, builder.ToList().Count);
            Assert.IsInstanceOf(typeof(DateRangeQueryConstraint), builder.ToList()[0]);

            var c = (DateRangeQueryConstraint)builder.ToList()[0];

            Assert.AreEqual(new DateTime(2011, 6, 1), c.LowerBound);
            Assert.AreEqual(new DateTime(2011, 6, 30), c.UpperBound);
            Assert.AreEqual("bizDate", c.Category);
        }
コード例 #12
0
        public void ShouldAddSetConstraintWhenMultipleValuesArePresent()
        {
            var req = new NameValueCollection {
                { "someString", "a" }, { "someString", "b" }, { "someString", "c" }
            };
            var builder = new ConstraintsBuilder(req);

            builder.MaybeAddSetConstraint("someString");
            Assert.AreEqual(1, builder.ToList().Count);
            Assert.IsInstanceOf(typeof(SetQueryConstraint), builder.ToList()[0]);

            var c        = (SetQueryConstraint)builder.ToList()[0];
            var expected = new HashSet <String> {
                "a", "b", "c"
            };

            Assert.That(expected, Is.EqualTo(c.Values).AsCollection);
        }
コード例 #13
0
        public void ShouldAddSetConstraintWhenSingleValueIsPresent()
        {
            var req = new NameValueCollection();

            req["someString"] = "a";
            var builder = new ConstraintsBuilder(req);

            builder.MaybeAddSetConstraint("someString");
            Assert.AreEqual(1, builder.ToList().Count);
            Assert.IsInstanceOf(typeof(SetQueryConstraint), builder.ToList()[0]);

            var c        = (SetQueryConstraint)builder.ToList()[0];
            var expected = new HashSet <String> {
                "a"
            };

            Assert.AreEqual(expected, c.Values);
        }
コード例 #14
0
        public void ShouldBeAbleToAddBothSetAndDateConstraints()
        {
            var req = new NameValueCollection {
                { "someString", "a" }, { "bizDate-start", "2011-06-01" }, { "bizDate-end", "2011-06-30" }
            };
            var builder = new ConstraintsBuilder(req);

            builder.MaybeAddSetConstraint("someString");
            builder.MaybeAddDateRangeConstraint("bizDate");
            Assert.AreEqual(2, builder.ToList().Count);

            Assert.IsInstanceOf(typeof(SetQueryConstraint), builder.ToList()[0]);
            var sc = (SetQueryConstraint)builder.ToList()[0];

            Assert.That(new HashSet <String> {
                "a"
            }, Is.EqualTo(sc.Values).AsCollection);

            Assert.IsInstanceOf(typeof(DateRangeQueryConstraint), builder.ToList()[1]);
            var c = (DateRangeQueryConstraint)builder.ToList()[1];

            Assert.That(new DateTime(2011, 6, 1), Is.EqualTo(c.LowerBound.Value));
            Assert.That(new DateTime(2011, 6, 30), Is.EqualTo(c.UpperBound.Value));
        }
コード例 #15
0
 protected override IEnumerable<IQueryConstraint> DetermineConstraints(System.Collections.Specialized.NameValueCollection requestParams)
 {
     var builder = new ConstraintsBuilder(requestParams);
       builder.MaybeAddDateRangeConstraint("bizDate");
       builder.MaybeAddSetConstraint("bookId");
       return builder.ToList();
 }
コード例 #16
0
        public void ShouldAddTimeRangeConstraintWhenBothStartAndEndArePresent()
        {
            var req = new NameValueCollection();
              req["createTime-start"] = "2011-06-06T12:00:00.000Z";
              req["createTime-end"] = "2011-06-06T16:00:00.000Z";
              var builder = new ConstraintsBuilder(req);

              builder.MaybeAddTimeRangeConstraint("createTime");
              Assert.AreEqual(1, builder.ToList().Count);
              Assert.IsInstanceOf(typeof (DateRangeQueryConstraint), builder.ToList()[0]);

              var c = (DateRangeQueryConstraint) builder.ToList()[0];
              Assert.AreEqual(new DateTime(2011, 6, 6, 12, 0, 0, 0, DateTimeKind.Utc), c.LowerBound);
              Assert.AreEqual(new DateTime(2011, 6, 6, 16, 0, 0, 0, DateTimeKind.Utc), c.UpperBound);
        }
コード例 #17
0
        public void ShouldAddSetConstraintWhenSingleValueIsPresent()
        {
            var req = new NameValueCollection();
              req["someString"] = "a";
              var builder = new ConstraintsBuilder(req);

              builder.MaybeAddSetConstraint("someString");
              Assert.AreEqual(1, builder.ToList().Count);
              Assert.IsInstanceOf(typeof (SetQueryConstraint), builder.ToList()[0]);

              var c = (SetQueryConstraint) builder.ToList()[0];
              var expected = new HashSet<String> {"a"};
              Assert.AreEqual(expected, c.Values);
        }
コード例 #18
0
        public void ShouldNotAddTimeRangeConstraintForEmptyRequest()
        {
            var req = new NameValueCollection();
              var builder = new ConstraintsBuilder(req);

              builder.MaybeAddTimeRangeConstraint("test");
              Assert.AreEqual(0, builder.ToList().Count);
        }
コード例 #19
0
ファイル: TheWorld.cs プロジェクト: supix/NaturalShift
        /// <summary>
        /// Creates a population and let it evolve until termination condition is reached.
        /// </summary>
        /// <param name="terminationCondition">Evolution termination condition evaluated on each new epoch</param>
        /// <returns>The best solution found across the evolution</returns>
        public ISolution EvolveUntil(TerminationCondition terminationCondition)
        {
            var          rnd                  = RandomProvider.GetThreadRandom();
            var          shiftMatrix          = MatrixBuilder.Build(this.problem);
            var          enumerator           = new IncreasingRowsRandomColumns(this.problem.Days, this.problem.Slots);
            var          constraints          = ConstraintsBuilder.Build(this.problem);
            var          chromoProcessor      = new ChromosomeProcessor(shiftMatrix, enumerator, constraints);
            var          evaluator            = new FitnessEvaluator(problem);
            var          fitnessFunction      = new Fitness.FitnessFunction(chromoProcessor, evaluator, shiftMatrix);
            var          chromosomeLength     = shiftMatrix.GetNumberOfUnforcedSlots();
            const double crossoverProbability = 0.90;
            const double mutationProbability  = 0.05;
            const int    elitismPercentage    = 5;

            epochs = 1;
            epochsWithoutFitnessImprovement = 0;
            overallBestFitness = -1;

            log.Debug("Starting population.");
            var population = new Population();

            for (var i = 0; i < populationSize; i++)
            {
                var c = new Double[chromosomeLength];
                for (var k = 0; k < chromosomeLength; k++)
                {
                    c[k] = rnd.NextDouble();
                }
                var ch = new Chromosome(c);
                population.Solutions.Add(ch);
            }

            //create the genetic operators
            var elite = new Elite(elitismPercentage);

            var crossover = new Crossover(crossoverProbability, true)
            {
                CrossoverType = CrossoverType.SinglePoint
            };

            var mutation = new SwapMutate(mutationProbability);

            //create the GA itself
            var ga = new GeneticAlgorithm(population, fitnessFunction.Evaluate);

            //subscribe to the GAs Generation Complete event
            ga.OnGenerationComplete += Ga_OnGenerationComplete;

            //add the operators to the ga process pipeline
            ga.Operators.Add(elite);
            ga.Operators.Add(crossover);
            ga.Operators.Add(mutation);

            //run the GA
            ga.Run((pop, currentGeneration, currentEvaluation) =>
            {
                return(terminationCondition(currentGeneration, epochsWithoutFitnessImprovement, population.MaximumFitness, population.AverageFitness));
            });

            population.GetTop(1)[0].Evaluate(fitnessFunction.Evaluate);
            return(SolutionBuilder.Build(overallBestFitness, shiftMatrix, epochs * population.PopulationSize, this.problem.Items));
        }
コード例 #20
0
        public void ShouldBeAbleToAddBothSetAndDateConstraints()
        {
            var req = new NameValueCollection { { "someString", "a" }, { "bizDate-start", "2011-06-01" }, { "bizDate-end", "2011-06-30" } };
              var builder = new ConstraintsBuilder(req);

              builder.MaybeAddSetConstraint("someString");
              builder.MaybeAddDateRangeConstraint("bizDate");
              Assert.AreEqual(2, builder.ToList().Count);

              Assert.IsInstanceOf(typeof(SetQueryConstraint), builder.ToList()[0]);
              var sc = (SetQueryConstraint)builder.ToList()[0];
              Assert.That(new HashSet<String> { "a" }, Is.EqualTo(sc.Values).AsCollection);

              Assert.IsInstanceOf(typeof(DateRangeQueryConstraint), builder.ToList()[1]);
              var c = (DateRangeQueryConstraint)builder.ToList()[1];
              Assert.That(new DateTime(2011, 6, 1), Is.EqualTo(c.LowerBound.Value));
              Assert.That(new DateTime(2011, 6, 30), Is.EqualTo(c.UpperBound.Value));
        }
コード例 #21
0
        public void ShouldThrowInvalidConstraintExceptionWhenBadStartDateIsGiven()
        {
            var req = new NameValueCollection();
              req["bizDate-start"] = "abc";
              req["bizDate-end"] = "2011-06-30";
              var builder = new ConstraintsBuilder(req);

              try {
            builder.MaybeAddDateRangeConstraint("bizDate");
            Assert.Fail("Should have thrown InvalidConstraintException");
              } catch (InvalidConstraintException ex) {
            Assert.AreEqual("The constraint value 'abc' is not valid for the field 'bizDate-start'", ex.Message);
              }
        }