public void TestFloatValueSweep(string name, int min, int max, bool logBase, int stepSize, int numSteps, string valueText) { var paramSweep = new FloatValueGenerator(new FloatParamArguments() { Name = name, Min = min, Max = max, LogBase = logBase, StepSize = stepSize, NumSteps = numSteps }); IParameterValue value = paramSweep.CreateFromNormalized(0.5); Assert.Equal(name, value.Name); Assert.Equal(valueText, value.ValueText); }
public void TestFloatValueGeneratorRoundTrip() { var paramSweep = new FloatValueGenerator(new FloatParamArguments() { Name = "bla", Min = 1, Max = 5 }); var random = new Random(123); var normalizedValue = (float)random.NextDouble(); var value = (FloatParameterValue)paramSweep.CreateFromNormalized(normalizedValue); var originalNormalizedValue = paramSweep.NormalizeValue(value); Assert.Equal(normalizedValue, originalNormalizedValue); var originalValue = (FloatParameterValue)paramSweep.CreateFromNormalized(normalizedValue); Assert.Equal(originalValue.Value, value.Value); }
public void FloatValueGenerator_should_generate_value_from_normalize(float min, float max, int step, bool logbase, float expect) { var option = new FloatValueGenerator.Option() { Min = min, Max = max, Name = "float", Steps = step, LogBase = logbase, }; var generator = new FloatValueGenerator(option); generator.CreateFromNormalized(1.0f).RawValue.Should().Be(max); generator.CreateFromNormalized(0f).RawValue.Should().Be(min); generator.CreateFromNormalized(0.5f).RawValue.Should().Be(expect); }
public void FloatValueGenerator_should_work_with_index(float min, float max, int step, bool logBase, int count) { var option = new FloatValueGenerator.Option() { Min = min, Max = max, Steps = step, Name = "float", LogBase = logBase, }; var generator = new FloatValueGenerator(option); generator.Count.Should().Be(count + 1); generator[0].RawValue.Should().Be(min); ((float)generator[count].RawValue) .Should() .Be(max); }
public void SmacQuickRunTest() { var numInitialPopulation = 10; var floatValueGenerator = new FloatValueGenerator(new FloatParamArguments() { Name = "float", Min = 1, Max = 1000 }); var floatLogValueGenerator = new FloatValueGenerator(new FloatParamArguments() { Name = "floatLog", Min = 1, Max = 1000, LogBase = true }); var longValueGenerator = new LongValueGenerator(new LongParamArguments() { Name = "long", Min = 1, Max = 1000 }); var longLogValueGenerator = new LongValueGenerator(new LongParamArguments() { Name = "longLog", Min = 1, Max = 1000, LogBase = true }); var discreteValueGeneator = new DiscreteValueGenerator(new DiscreteParamArguments() { Name = "discrete", Values = new[] { "200", "400", "600", "800" } }); var sweeper = new SmacSweeper(new MLContext(), new SmacSweeper.Arguments() { SweptParameters = new IValueGenerator[] { floatValueGenerator, floatLogValueGenerator, longValueGenerator, longLogValueGenerator, discreteValueGeneator }, NumberInitialPopulation = numInitialPopulation }); // sanity check grid Assert.NotNull(floatValueGenerator[0].ValueText); Assert.NotNull(floatLogValueGenerator[0].ValueText); Assert.NotNull(longValueGenerator[0].ValueText); Assert.NotNull(longLogValueGenerator[0].ValueText); Assert.NotNull(discreteValueGeneator[0].ValueText); List <RunResult> results = new List <RunResult>(); RunResult bestResult = null; for (var i = 0; i < numInitialPopulation + 1; i++) { ParameterSet[] pars = sweeper.ProposeSweeps(1, results); foreach (ParameterSet p in pars) { float x1 = float.Parse(p["float"].ValueText); float x2 = float.Parse(p["floatLog"].ValueText); long x3 = long.Parse(p["long"].ValueText); long x4 = long.Parse(p["longLog"].ValueText); int x5 = int.Parse(p["discrete"].ValueText); double metric = x1 + x2 + x3 + x4 + x5; RunResult result = new RunResult(p, metric, true); if (bestResult == null || bestResult.MetricValue < metric) { bestResult = result; } results.Add(result); Console.WriteLine($"{metric}\t{x1},{x2}"); } } Console.WriteLine($"Best: {bestResult.MetricValue}"); Assert.NotNull(bestResult); Assert.True(bestResult.MetricValue > 0); }