Optuna/Sampler/NSGAIISampler.cs
using System;
namespace Optuna.Sampler
{
/// <summary>
/// https://optuna.readthedocs.io/en/stable/reference/generated/optuna.samplers.NSGAIISampler.html
/// </summary>
public class NSGAIISampler : SamplerBase
{
public double? MutationProb { get; set; }
public int PopulationSize { get; set; } = 50;
public string Crossover { get; set; } = string.Empty;
public double CrossoverProb { get; set; } = 0.9;
public double SwappingProb { get; set; } = 0.5;
public dynamic ToPython(dynamic optuna, bool hasConstraints)
{
return optuna.samplers.NSGAIISampler(
population_size: PopulationSize,
mutation_prob: MutationProb,
crossover_prob: CrossoverProb,
swapping_prob: SwappingProb,
seed: Seed,
crossover: SetCrossover(optuna, Crossover),
constraints_func: hasConstraints ? ConstraintFunc() : null
);
}
protected static dynamic SetCrossover(dynamic optuna, string crossover)
{
switch (crossover)
{
case "Uniform":
return optuna.samplers.nsgaii.UniformCrossover();
case "BLXAlpha":
return optuna.samplers.nsgaii.BLXAlphaCrossover();
case "SPX":
return optuna.samplers.nsgaii.SPXCrossover();
case "SBX":
return optuna.samplers.nsgaii.SBXCrossover();
case "VSBX":
return optuna.samplers.nsgaii.VSBXCrossover();
case "UNDX":
return optuna.samplers.nsgaii.UNDXCrossover();
case "":
return null;
default:
throw new ArgumentException("Unexpected crossover setting");
}
}
}
}