Beispiel #1
0
 public void CreateFromGenomeThrowsForMissingParameterTree()
 {
     Assert.Throws <ArgumentNullException>(
         () => ContinuizedGenomeSearchPoint.CreateFromGenome(
             this._genomeBuilder.CreateRandomGenome(age: 1),
             parameterTree: null));
 }
Beispiel #2
0
        public void ConstructionIsConsistent()
        {
            // We do not care about age --> set it to default age.
            var genome      = this._genomeBuilder.CreateRandomGenome(age: 0);
            var searchPoint = ContinuizedGenomeSearchPoint.CreateFromGenome(genome, this._parameterTree);
            var samePoint   = new ContinuizedGenomeSearchPoint(
                values: searchPoint.Values,
                parameterTree: this._parameterTree,
                genomeBuilder: this._genomeBuilder,
                lowerBounds: this._lowerBounds,
                upperBounds: this._upperBounds);

            samePoint.Genome.ToCappedDecimalString().ShouldBe(genome.ToCappedDecimalString());

            var values = BoundedSearchPoint.StandardizeValues(new[] { 0, 0.2, -3, 0 }, this._lowerBounds, this._upperBounds);

            searchPoint = new ContinuizedGenomeSearchPoint(
                values: values,
                parameterTree: this._parameterTree,
                genomeBuilder: this._genomeBuilder,
                lowerBounds: this._lowerBounds,
                upperBounds: this._upperBounds);
            samePoint = ContinuizedGenomeSearchPoint.CreateFromGenome(
                searchPoint.Genome.CreateMutableGenome(),
                this._parameterTree);
            for (int i = 0; i < values.Count; i++)
            {
                Assert.Equal(
                    values[i],
                    samePoint.Values[i],
                    4);
            }
        }
Beispiel #3
0
 public void CreateFromGenomeThrowsForMissingGenome()
 {
     Assert.Throws <ArgumentNullException>(
         () => ContinuizedGenomeSearchPoint.CreateFromGenome(
             genome: null,
             parameterTree: this._parameterTree));
 }
Beispiel #4
0
        public void ConstructorAssociatesCorrectGenome()
        {
            var genomeValues = new[] { 0.6, 1.4, -4.3, 123.8 };
            var offset       = 20 * 5;
            var searchPoint  = new ContinuizedGenomeSearchPoint(
                values: BoundedSearchPoint.StandardizeValues(genomeValues, this._lowerBounds, this._upperBounds) + offset,
                parameterTree: this._parameterTree,
                genomeBuilder: this._genomeBuilder,
                lowerBounds: this._lowerBounds,
                upperBounds: this._upperBounds);

            var genome = searchPoint.Genome.CreateMutableGenome();

            // Categorical value should be rounded up to 1 and then be mapped to the second value.
            Assert.Equal(
                -12.5,
                genome.GetGeneValue("categorical").GetValue());

            Assert.Equal(1.4, genome.GetGeneValue("continuous").GetValue());
            Assert.True(-4 == (int)genome.GetGeneValue("discrete").GetValue(), "Integer value should be rounded up.");
            Assert.True(
                "foo" == (string)genome.GetGeneValue("single_categorical").GetValue(),
                "Single categorical value only has one valid value.");
            Assert.False(searchPoint.IsRepaired, "The genome should not have needed repair.");
        }
Beispiel #5
0
 public void ObtainParameterBoundsFindsCorrectBounds()
 {
     ContinuizedGenomeSearchPoint.ObtainParameterBounds(
         this._parameterTree,
         out var obtainedLowerBounds,
         out var obtainedUpperBounds);
     Assert.Equal(this._lowerBounds, obtainedLowerBounds);
     Assert.Equal(this._upperBounds, obtainedUpperBounds);
 }
Beispiel #6
0
        public void GenomePropertyProducesIndependentGenome()
        {
            var genome = this._genomeBuilder.CreateRandomGenome(age: 0);
            var point  = ContinuizedGenomeSearchPoint.CreateFromGenome(genome, this._parameterTree);

            genome.SetGene("discrete", new Allele <double>(-6));

            var createdGenome = point.Genome.CreateMutableGenome();

            Assert.NotEqual(
                -6,
                createdGenome.GetGeneValue("discrete").GetValue());
        }
Beispiel #7
0
        public void ConstructorCorrectlySetsValues()
        {
            var providedValues = Vector <double> .Build.Random(4);

            var searchPoint = new ContinuizedGenomeSearchPoint(
                values: providedValues,
                parameterTree: this._parameterTree,
                genomeBuilder: this._genomeBuilder,
                lowerBounds: this._lowerBounds,
                upperBounds: this._upperBounds);

            Assert.Equal(providedValues, searchPoint.Values);
        }
Beispiel #8
0
        public void CreateFromGenomeSetsPropertiesCorrectly()
        {
            var genome = new Genome(age: 2);

            genome.SetGene("categorical", new Allele <double>(123.6));
            genome.SetGene("continuous", new Allele <double>(0.2));
            genome.SetGene("discrete", new Allele <int>(-3));
            genome.SetGene("single_categorical", new Allele <string>("foo"));
            var searchPoint = ContinuizedGenomeSearchPoint.CreateFromGenome(genome, this._parameterTree);

            Assert.Equal(
                genome.ToString(),
                searchPoint.Genome.ToString());
            // Values be transformed into [0, 10].
            Assert.Equal(
                BoundedSearchPoint.StandardizeValues(new[] { 0, 0.2, -3, 0 }, this._lowerBounds, this._upperBounds),
                searchPoint.Values);
            Assert.False(
                searchPoint.IsRepaired,
                "Search points directly created from genomes do not have to be repaired.");
        }
Beispiel #9
0
        public void InvalidGenomeIsHandledCorrectly()
        {
            var positiveGenomeBuilder = new ConfigurableGenomeBuilder(
                this._parameterTree,
                g => (int)g.GetGeneValue("discrete").GetValue() != -4,
                mutationRate: 1);
            var genomeValues       = new[] { 0, 1.4, -4, 0 };
            var standardizedValues =
                BoundedSearchPoint.StandardizeValues(genomeValues, this._lowerBounds, this._upperBounds);
            var searchPoint = new ContinuizedGenomeSearchPoint(
                values: standardizedValues,
                parameterTree: this._parameterTree,
                genomeBuilder: positiveGenomeBuilder,
                lowerBounds: this._lowerBounds,
                upperBounds: this._upperBounds);

            var genome = searchPoint.Genome.CreateMutableGenome();

            Assert.True(
                -4 != (int)genome.GetGeneValue("discrete").GetValue(),
                "Genome should have been repaired.");
            Assert.Equal(standardizedValues, searchPoint.Values);
            Assert.True(searchPoint.IsRepaired, "Repair flag should have been set.");
        }