private static void checkParetoRankings(ParetoComparer <MockDualObjective> comparer, MockDualObjective rank_1_a, MockDualObjective rank_1_b, MockDualObjective rank_1_c, MockDualObjective rank_2_a, MockDualObjective rank_2_b, MockDualObjective rank_2_c, MockDualObjective rank_3_a, MockDualObjective rank_3_b)
        {
            Assert.AreEqual(-1, comparer.Compare(rank_1_a, rank_2_a));
            Assert.AreEqual(+1, comparer.Compare(rank_2_a, rank_1_a));

            Assert.AreEqual(-1, comparer.Compare(rank_1_a, rank_3_b));

            Assert.AreEqual(0, comparer.Compare(rank_1_a, rank_1_a));
            Assert.AreEqual(0, comparer.Compare(rank_1_a, rank_1_b));
            Assert.AreEqual(0, comparer.Compare(rank_1_a, rank_1_c));
            Assert.AreEqual(0, comparer.Compare(rank_1_b, rank_1_c));

            MockDualObjective[] scores = new MockDualObjective[] { rank_2_c, rank_1_b, rank_3_b, rank_2_b, rank_1_a, rank_1_c, rank_3_a, rank_2_a };
            ParetoRanking <MockDualObjective> paretoRanking = new ParetoRanking <MockDualObjective>(scores, comparer);

            MockDualObjective[] rank1 = paretoRanking.GetParetoRank(1);
            Assert.AreEqual(3, rank1.Length);
            Assert.IsTrue(rank1.Contains(rank_1_a));
            Assert.IsTrue(rank1.Contains(rank_1_b));
            Assert.IsTrue(rank1.Contains(rank_1_c));
            MockDualObjective[] rank2 = paretoRanking.GetParetoRank(2);
            Assert.AreEqual(3, rank2.Length);
            Assert.IsTrue(rank2.Contains(rank_2_a));
            Assert.IsTrue(rank2.Contains(rank_2_b));
            Assert.IsTrue(rank2.Contains(rank_2_c));
            MockDualObjective[] rank3 = paretoRanking.GetParetoRank(3);
            Assert.AreEqual(2, rank3.Length);
            Assert.IsTrue(rank3.Contains(rank_3_a));
            Assert.IsTrue(rank3.Contains(rank_3_b));
        }
Beispiel #2
0
        private static void checkParetoRankings(ParetoComparer<MockDualObjective> comparer, MockDualObjective rank_1_a, MockDualObjective rank_1_b, MockDualObjective rank_1_c, MockDualObjective rank_2_a, MockDualObjective rank_2_b, MockDualObjective rank_2_c, MockDualObjective rank_3_a, MockDualObjective rank_3_b)
        {
            Assert.AreEqual(-1, comparer.Compare(rank_1_a, rank_2_a));
            Assert.AreEqual(+1, comparer.Compare(rank_2_a, rank_1_a));

            Assert.AreEqual(-1, comparer.Compare(rank_1_a, rank_3_b));

            Assert.AreEqual(0, comparer.Compare(rank_1_a, rank_1_a));
            Assert.AreEqual(0, comparer.Compare(rank_1_a, rank_1_b));
            Assert.AreEqual(0, comparer.Compare(rank_1_a, rank_1_c));
            Assert.AreEqual(0, comparer.Compare(rank_1_b, rank_1_c));

            MockDualObjective[] scores = new MockDualObjective[] { rank_2_c, rank_1_b, rank_3_b, rank_2_b, rank_1_a, rank_1_c, rank_3_a, rank_2_a };
            ParetoRanking<MockDualObjective> paretoRanking = new ParetoRanking<MockDualObjective>(scores, comparer);
            MockDualObjective[] rank1 = paretoRanking.GetParetoRank(1);
            Assert.AreEqual(3, rank1.Length);
            Assert.IsTrue(rank1.Contains(rank_1_a));
            Assert.IsTrue(rank1.Contains(rank_1_b));
            Assert.IsTrue(rank1.Contains(rank_1_c));
            MockDualObjective[] rank2 = paretoRanking.GetParetoRank(2);
            Assert.AreEqual(3, rank2.Length);
            Assert.IsTrue(rank2.Contains(rank_2_a));
            Assert.IsTrue(rank2.Contains(rank_2_b));
            Assert.IsTrue(rank2.Contains(rank_2_c));
            MockDualObjective[] rank3 = paretoRanking.GetParetoRank(3);
            Assert.AreEqual(2, rank3.Length);
            Assert.IsTrue(rank3.Contains(rank_3_a));
            Assert.IsTrue(rank3.Contains(rank_3_b));
        }
Beispiel #3
0
        public IOptimizationResults <T> Evolve()
        {
            IObjectiveScores[] scores = evaluateScores(initialisePopulation());
            var tags = LoggerMhHelper.CreateTag(LoggerMhHelper.MkTuple("Category", "URS"));

            loggerWrite(scores, tags);

            var paretoRanking = new ParetoRanking <IObjectiveScores>(scores, new ParetoComparer <IObjectiveScores>());

            IObjectiveScores[] paretoScores = paretoRanking.GetDominatedByParetoRank(1);
            return(new BasicOptimizationResults <T>(paretoScores));
        }
Beispiel #4
0
        public void Execute( )
        {
            RiverSystemScenario testScenario;
            RiverSystemProject  testProject;

            TestHelperRiverSystem.getAPreconfiguredTestScenarioWithAWBM(3, out testProject,
                                                                        out testScenario);

            IObjectiveEvaluator <MetaParameterSet> evaluator        = buildNewEvaluator(testScenario);
            ICandidateFactory <MetaParameterSet>   candidateFactory = new LumpedAWBMFactory(testScenario, new BasicRngFactory(123));

            int pSetNumber = 5;

            IObjectiveScores[]     scores = new IObjectiveScores[pSetNumber];
            ISystemConfiguration[] pSets  = new ISystemConfiguration[pSetNumber];


            int k = 0;

            foreach (Catchment c in testScenario.Network.catchmentList)
            {
                foreach (StandardFunctionalUnit fu in c.FunctionalUnits)
                {
                    var list = AccessorMemberInfo.GetFieldsAndPropertiesList(fu.rainfallRunoffModel.GetType(), typeof(double), typeof(ParameterAttribute));
                    foreach (MemberInfo m in list)
                    {
                        string metaParameterName = "$tag" + k++;
                        UpdateFunctionBuilder.CreateMetaParameter(testScenario, metaParameterName);
                        UpdateFunctionBuilder.CreateUpdateFunctionWithLinkToMetaParameter(testScenario, metaParameterName, m, fu.rainfallRunoffModel);
                    }
                }
            }

            for (int i = 0; i < scores.Length; i++)
            {
                pSets[i] = candidateFactory.CreateRandomCandidate();

                //Do we need to reset the model states??
                scores[i] = evaluator.EvaluateScore((MetaParameterSet)pSets[i]);

                //print Params after each iteration
                LumpedAWBMFactory.printPrams(testScenario, pSets[i]);
            }
            IObjectiveScores[] paretoScores = ParetoRanking <IObjectiveScores> .GetParetoFront(scores);


            SourceUtility.PrintObjScores(scores);
            Console.WriteLine("----------------------------------------");
            SourceUtility.PrintObjScores(paretoScores);
        }
        public void Execute(string modelRunDefnFile, string modelOutputName, string runoffToMatchFile)
        {
            setRandSeed( );
            var evaluator        = ProblemDefinitionHelper.BuildEvaluator(modelRunDefnFile, modelOutputName, runoffToMatchFile);
            var candidateFactory = buildCandidateFactory(ProblemDefinitionHelper.BuildSystem(modelRunDefnFile, "runoff").Model);

            var scores = new IObjectiveScores[1000];
            var pSets  = new ICloneableSystemConfiguration[1000];

            for (int i = 0; i < scores.Length; i++)
            {
                pSets[i]  = candidateFactory.CreateRandomCandidate( );
                scores[i] = evaluator.EvaluateScore(pSets[i]);
            }
            IObjectiveScores[] paretoScores = ParetoRanking <IObjectiveScores> .GetParetoFront(scores);

            printSummary(scores);
            Console.ReadLine( );
        }
Beispiel #6
0
        public void Execute( )
        {
            RiverSystemScenario testScenario;
            RiverSystemProject testProject;
            TestHelperRiverSystem.getAPreconfiguredTestScenarioWithAWBM( 3, out testProject,
                                                                         out testScenario );
            
            IObjectiveEvaluator<MetaParameterSet> evaluator = buildNewEvaluator( testScenario );
            //ICandidateFactory<MetaParameterSet> candidateFactory = new LumpedAWBMFactory( testScenario, new BasicRngFactory(123) );

            var evolutionEngine = new CSIRO.Metaheuristics.Optimization.ShuffledComplexEvolution<MetaParameterSet>( );

            
            IObjectiveScores[] paretoScores = ParetoRanking<IObjectiveScores>.GetParetoFront( scores );
           

            SourceUtility.PrintObjScores( scores );
            Console.WriteLine("----------------------------------------");
            SourceUtility.PrintObjScores( paretoScores );
        }
        public FitnessAssignedScores <double>[] AssignFitness(IObjectiveScores[] scores)
        {
            var paretoRanking = new ParetoRanking <IObjectiveScores>(scores);

            IObjectiveScores[] nonDominated          = paretoRanking.GetParetoRank(1);
            IObjectiveScores[] dominated             = paretoRanking.GetDominatedByParetoRank(1);
            double[]           fitnessesNonDominated = new double[nonDominated.Length];
            double[]           fitnessesDominated    = new double[dominated.Length];
            for (int j = 0; j < nonDominated.Length; j++)
            {
                fitnessesNonDominated[j] = (double)paretoRanking.GetNumDominated(nonDominated[j], dominated) / scores.Length;
            }
            for (int j = 0; j < dominated.Length; j++)
            {
                double fitness = 1.0;
                for (int k = 0; k < nonDominated.Length; k++)
                {
                    if (paretoRanking.IsDominated(dominated[j], nonDominated[k]))
                    {
                        fitness += fitnessesNonDominated[k];
                    }
                }
                fitnessesDominated[j] = fitness;
            }
            List <double> fitnesses = new List <double>( );

            fitnesses.AddRange(fitnessesNonDominated);
            fitnesses.AddRange(fitnessesDominated);
            List <IObjectiveScores> orderedScores = new List <IObjectiveScores>( );

            orderedScores.AddRange(nonDominated);
            orderedScores.AddRange(dominated);
            FitnessAssignedScores <double>[] result = new FitnessAssignedScores <double> [fitnesses.Count];
            for (int i = 0; i < fitnesses.Count; i++)
            {
                result[i] = new FitnessAssignedScores <double>(orderedScores[i], fitnesses[i]);
            }
            return(result);
        }
            public Tuple <IBase, IObjectiveScores <T>, IObjectiveScores <T>[]> Evolve()
            {
                moveFailedOnce   = createNegBoolArray(b.NumDimensions);
                moveSuccededOnce = createNegBoolArray(b.NumDimensions);
                List <IObjectiveScores <T> > scores = new List <IObjectiveScores <T> >();

                while (stageIsComplete( ) == false)
                {
                    var triedPoints = makeAMove(b, currentPoint);
                    currentPoint = triedPoints.Last();
                    scores.AddRange(triedPoints);
                    LoggerMhHelper.Write(new IObjectiveScores[] { currentPoint },
                                         createTag(),
                                         Logger);
                }
                endPoint = currentPoint;
                b        = createNewBase(b, startingPoint, endPoint);

                var paretoRanking = new ParetoRanking <IObjectiveScores <T> >(scores, new ParetoComparer <IObjectiveScores <T> >());

                IObjectiveScores <T>[] paretoScores = paretoRanking.GetDominatedByParetoRank(1);

                return(Tuple.Create(b, currentPoint, paretoScores));
            }
        private IObjectiveScores[] getParetoFront(IObjectiveScores[] scores)
        {
            var paretoRanking = new ParetoRanking <IObjectiveScores>(scores, new ParetoComparer <IObjectiveScores>());

            return(paretoRanking.GetParetoRank(1));
        }