public void CreateFromGenomeThrowsForMissingParameterTree() { Assert.Throws <ArgumentNullException>( () => ContinuizedGenomeSearchPoint.CreateFromGenome( this._genomeBuilder.CreateRandomGenome(age: 1), parameterTree: null)); }
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); } }
public void CreateFromGenomeThrowsForMissingGenome() { Assert.Throws <ArgumentNullException>( () => ContinuizedGenomeSearchPoint.CreateFromGenome( genome: null, parameterTree: this._parameterTree)); }
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."); }
public void ObtainParameterBoundsFindsCorrectBounds() { ContinuizedGenomeSearchPoint.ObtainParameterBounds( this._parameterTree, out var obtainedLowerBounds, out var obtainedUpperBounds); Assert.Equal(this._lowerBounds, obtainedLowerBounds); Assert.Equal(this._upperBounds, obtainedUpperBounds); }
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()); }
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); }
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."); }
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."); }