private static void Main(string[] args) { int[][] seq1 = new int[10][]; Random rand = new Random(6); var nds = new Ndsort <int>(CmpInt); // A first way. for (int i = 0; i < seq1.Length; i++) { seq1[i] = new int[4]; for (int j = 0; j < seq1[i].Length; j++) { seq1[i][j] = rand.Next(-10, 11); } } int[] fronts1 = nds.NonDominSort(seq1); // A second way. var seq2 = from item in seq1 select new { fitness = item }; int[] fronts2 = nds.NonDominSort(seq2, item => item.fitness); Console.WriteLine($"Are the fronts equal? {fronts1.SequenceEqual(fronts2)}."); var groupedFronts = fronts1.Zip(seq1, (front, seq) => new ValueTuple <int, int[]>(front, seq)).GroupBy(tuple => tuple.Item1, tuple => tuple.Item2); foreach (var front in groupedFronts) { Console.WriteLine($"The front index is {front.Key}."); foreach (var seq in front) { Console.WriteLine($"\t({seq.Select(num => num.ToString()).Aggregate((num1, num2) => $"{num1, 4}, {num2, 4}")})"); } } Console.ReadKey(); }
/// <summary> /// Create object which uses custom implementation for random generators. /// </summary> /// <param name="UniformGen"> /// Object, which implements <see cref="IContUniformGen"/> interface. /// </param> /// <param name="NormalGen"> Object, which implements <see cref="INormalGen"/> interface. </param> /// <exception cref="ArgumentNullException"> /// If <paramref name="NormalGen"/> or <paramref name="UniformGen"/> is null. /// </exception> public MOFWOptimizer(IContUniformGen UniformGen, INormalGen NormalGen) : base(UniformGen, NormalGen) { _nds = new Ndsort <double>(CmpDouble.DoubleCompare); _isUseChachedFronts = false; }