public override string ToString()
        {
            var result = "";

            result += $"\n  Max branching {SimulatedAnnealingMaxBranching}";

            if (Chains != null)
            {
                for (int i = 0; i < Chains.Count; i++)
                {
                    var chain         = Chains[i];
                    var configuration = SimulatedAnnealingConfiguration.GetConfiguration(i);
                    result +=
                        $"\n  Chain {i} [{string.Join(",", chain.Nodes)}] c {configuration.Cycles} tpc {configuration.TrialsPerCycle} miws {configuration.MaxIterationsWithoutSuccess} ms2f {configuration.MaxStageTwoFailures}";
                }
            }
            else if (SimulatedAnnealingConfiguration != null)
            {
                var list = SimulatedAnnealingConfiguration.GetAllConfigurations();

                for (var i = 0; i < list.Count; i++)
                {
                    var configuration = list[i];
                    result +=
                        $"\n  Chain {i} [] c {configuration.Cycles} tpc {configuration.TrialsPerCycle} miws {configuration.MaxIterationsWithoutSuccess} ms2f {configuration.MaxStageTwoFailures}";
                }
            }


            return(result);
        }
        protected IMutation <TConfiguration> GetFixedStrategy(TConfiguration configuration, IGeneratorEvaluation <TGeneratorStats> data, int numberOfIterations)
        {
            var oldConfiguration = configuration.SimulatedAnnealingConfiguration.GetConfiguration(0);
            var newConfiguration = new SimulatedAnnealingConfiguration(oldConfiguration.Cycles, oldConfiguration.TrialsPerCycle, numberOfIterations, oldConfiguration.MaxStageTwoFailures);

            return(new MaxIterationsMutation <TConfiguration>(
                       5,
                       new SimulatedAnnealingConfigurationProvider(newConfiguration),
                       MaxIterationsStrategy.Fixed,
                       numberOfIterations,
                       numberOfIterations
                       ));
        }
 public DungeonGeneratorConfiguration <TNode> SmartClone()
 {
     return(new DungeonGeneratorConfiguration <TNode>()
     {
         RoomsCanTouch = RoomsCanTouch,
         EarlyStopIfIterationsExceeded = EarlyStopIfIterationsExceeded,
         EarlyStopIfTimeExceeded = EarlyStopIfTimeExceeded,
         RepeatModeOverride = RepeatModeOverride,
         ThrowIfRepeatModeNotSatisfied = ThrowIfRepeatModeNotSatisfied,
         ChainDecompositionConfiguration = ChainDecompositionConfiguration.SmartClone(),
         Chains = Chains?.Select(x => new Chain <TNode>(x.Nodes.ToList(), x.Number)).ToList(),
         SimulatedAnnealingConfiguration = SimulatedAnnealingConfiguration.SmartClone(),
         SimulatedAnnealingMaxBranching = SimulatedAnnealingMaxBranching,
     });
 }
        public TConfiguration Apply(TConfiguration configuration)
        {
            var newConfigurations = new List <SimulatedAnnealingConfiguration>();

            for (int i = 0; i < Chains.Count; i++)
            {
                newConfigurations.Add(SimulatedAnnealingConfiguration.GetDefaultConfiguration());
            }

            var copy = configuration.SmartClone();

            copy.Chains = Chains;
            copy.SimulatedAnnealingConfiguration = new SimulatedAnnealingConfigurationProvider(newConfigurations);
            return(copy);
        }
        public new GraphBasedGeneratorConfiguration <TNode> SmartClone()
        {
            return(new GraphBasedGeneratorConfiguration <TNode>()
            {
                RoomsCanTouch = RoomsCanTouch,
                EarlyStopIfIterationsExceeded = EarlyStopIfIterationsExceeded,
                EarlyStopIfTimeExceeded = EarlyStopIfTimeExceeded,
                RepeatModeOverride = RoomTemplateRepeatMode.NoImmediate,
                ThrowIfRepeatModeNotSatisfied = ThrowIfRepeatModeNotSatisfied,
                ChainDecompositionConfiguration = ChainDecompositionConfiguration.SmartClone(),
                Chains = Chains?.Select(x => new Chain <TNode>(x.Nodes.ToList(), x.Number)).ToList(),
                SimulatedAnnealingConfiguration = SimulatedAnnealingConfiguration.SmartClone(),
                SimulatedAnnealingMaxBranching = SimulatedAnnealingMaxBranching,

                OptimizeCorridorConstraints = OptimizeCorridorConstraints,
            });
        }
        protected IMutation <TConfiguration> GetAggressiveStrategy(TConfiguration configuration, IGeneratorEvaluation <TGeneratorStats> data, double minValue, double multiplier, int priority)
        {
            var worst10Percent    = data.GetAverageStatistics(new DataSplit(0.9, 1));
            var newConfigurations = new List <SimulatedAnnealingConfiguration>();

            for (int i = 0; i < worst10Percent.ChainsStats.Count; i++)
            {
                var oldConfiguration           = configuration.SimulatedAnnealingConfiguration.GetConfiguration(i);
                var averageIterationsOnSuccess = Math.Max(minValue, multiplier * worst10Percent.ChainsStats[i].AverageIterationsOnSuccess);

                var newConfiguration = new SimulatedAnnealingConfiguration(oldConfiguration.Cycles,
                                                                           oldConfiguration.TrialsPerCycle, (int)averageIterationsOnSuccess, oldConfiguration.MaxStageTwoFailures);
                newConfigurations.Add(newConfiguration);
            }

            return(new MaxIterationsMutation <TConfiguration>(
                       priority,
                       new SimulatedAnnealingConfigurationProvider(newConfigurations),
                       MaxIterationsStrategy.Aggressive,
                       minValue,
                       multiplier
                       ));
        }
Ejemplo n.º 7
0
        private IMutation <TConfiguration> GetConservativeStrategy(TConfiguration configuration, IGeneratorEvaluation <TGeneratorStats> data, double minValue, double multiplier)
        {
            var averageAll        = data.GetAverageStatistics(new DataSplit(0, 1));
            var newConfigurations = new List <SimulatedAnnealingConfiguration>();

            for (int i = 0; i < averageAll.ChainsStats.Count; i++)
            {
                var oldConfiguration             = configuration.SimulatedAnnealingConfiguration.GetConfiguration(i);
                var maxStageTwoFailuresOnSuccess = Math.Max(minValue, multiplier * averageAll.ChainsStats[i].MaxStageTwoFailuresOnSuccess);

                var newConfiguration = new SimulatedAnnealingConfiguration(oldConfiguration.Cycles,
                                                                           oldConfiguration.TrialsPerCycle, oldConfiguration.MaxIterationsWithoutSuccess, (int)maxStageTwoFailuresOnSuccess);
                newConfigurations.Add(newConfiguration);
            }

            return(new MaxStageTwoFailuresMutation <TConfiguration>(
                       5,
                       new SimulatedAnnealingConfigurationProvider(newConfigurations),
                       MaxStageTwoFailuresStrategy.Conservative,
                       minValue,
                       multiplier
                       ));
        }
 // TODO: should configuration be null by default?
 public SimulatedAnnealingEvolver(IChainBasedLayoutOperations <TLayout, TNode> layoutOperations, SimulatedAnnealingConfiguration configuration = null, bool addNodesGreedilyBeforeEvolve = false)
 {
     LayoutOperations = layoutOperations ?? throw new ArgumentNullException(nameof(layoutOperations));
     Configuration    = configuration ?? SimulatedAnnealingConfiguration.GetDefaultConfiguration();
     this.addNodesGreedilyBeforeEvolve = addNodesGreedilyBeforeEvolve;
 }
 public override int GetHashCode()
 {
     unchecked
     {
         var hashCode = RoomsCanTouch.GetHashCode();
         hashCode = (hashCode * 397) ^ EarlyStopIfIterationsExceeded.GetHashCode();
         hashCode = (hashCode * 397) ^ EarlyStopIfTimeExceeded.GetHashCode();
         hashCode = (hashCode * 397) ^ RepeatModeOverride.GetHashCode();
         hashCode = (hashCode * 397) ^ ThrowIfRepeatModeNotSatisfied.GetHashCode();
         hashCode = (hashCode * 397) ^ (ChainDecompositionConfiguration != null ? ChainDecompositionConfiguration.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (SimulatedAnnealingConfiguration != null ? SimulatedAnnealingConfiguration.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ SimulatedAnnealingMaxBranching;
         return(hashCode);
     }
 }