예제 #1
0
        public override void Evaluate(Solution solution)
        {
            var s          = (IntergenSolution)solution;
            var doubleVal  = new double[Model.Setting.NumberOfFeatures];
            var interacVal = new double[Model.Setting.NumberOfInteractions];
            var values     = new XReal(solution);

            for (var i = 0; i < Model.Setting.NumberOfFeatures; i++)
            {
                doubleVal[i] = values.GetValue(i);
            }

            for (var i = 0; i < Model.Setting.NumberOfInteractions; i++)
            {
                interacVal[i] = values.GetValue(i + Model.Setting.NumberOfFeatures);
            }

            //the distribution from the NSGA2
            var nsgaFv      = new Distribution(doubleVal);
            var interacDist = new Distribution(interacVal);

            var variantValuesWithoutInteraction = FeatureMatrix.Dot(doubleVal);
            var interacVals    = InteractionMatrix.Dot(interacVal);
            var variantResults = variantValuesWithoutInteraction.Add(interacVals);
            var variantResult  = new Distribution(variantResults);



            var fc            = new FitnessCalculator(Model, s.FoundAtEval);
            var fitnessValues = fc.Calculate(null, null, null, null, interacDist, InteractionTarget);

            solution.Objective[0] = fitnessValues.InteracVal;

            FitnessTracker.AddInterac(s.FoundAtEval, fitnessValues.InteracVal);
        }
        public override void Evaluate(Solution solution)
        {
            var s          = (IntergenSolution)solution;
            var doubleVal  = new double[Model.Setting.NumberOfFeatures];
            var interacVal = new double[Model.Setting.NumberOfInteractions];
            var values     = new XReal(solution);

            for (var i = 0; i < Model.Setting.NumberOfFeatures; i++)
            {
                doubleVal[i] = values.GetValue(i);
            }

            for (var i = 0; i < Model.Setting.NumberOfInteractions; i++)
            {
                interacVal[i] = values.GetValue(i + Model.Setting.NumberOfFeatures);
            }

            //the distribution from the NSGA2
            var nsgaFv      = new Distribution(doubleVal);
            var interacDist = new Distribution(interacVal);

            var multiplicationTime = new Stopwatch(); multiplicationTime.Start();

            var variantValuesWithoutInteraction = FeatureMatrix.Dot(doubleVal);
            var interacVals    = InteractionMatrix.Dot(interacVal);
            var variantResults = variantValuesWithoutInteraction.Add(interacVals);

            multiplicationTime.Stop();
            FitnessTracker.AddMultiplicationTime(multiplicationTime.ElapsedMilliseconds);
            var variantResult = new Distribution(variantResults);


            var localScaledVariants = new double[VariantTarget.Values.Length];

            Array.Copy(VariantTarget.Values, localScaledVariants, VariantTarget.Values.Length);
            var localVariantTarget = new Distribution(localScaledVariants);

            localVariantTarget = FMScaling.InteractionToScale(localVariantTarget, variantResults.Min(),
                                                              variantResults.Max());


            var fc            = new FitnessCalculator(Model, s.FoundAtEval);
            var fitnessValues = fc.Calculate(variantResult, localVariantTarget, nsgaFv, FeatureTarget, interacDist, InteractionTarget);

            solution.Objective[0] = fitnessValues.FeatureVal;
            solution.Objective[1] = fitnessValues.InteracVal;
            solution.Objective[2] = fitnessValues.VariantVal;
            FitnessTracker.AddCalcTime(fc.GetFitnessTime());
            FitnessTracker.Add(s.FoundAtEval, fitnessValues.FeatureVal, fitnessValues.InteracVal, fitnessValues.VariantVal);
        }