Example #1
0
        private void ArcMapItemAdded(object item)
        {
            var newLayer = item as ILayer2;

            if (newLayer != null)
            {
                AvailableFeatures.Add(new Feature(newLayer));
            }
        }
Example #2
0
        private void ArcMapItemDeleted(object item)
        {
            var featureToRemove = AvailableFeatures.FirstOrDefault(f => f.ESRILayer == item);

            if (featureToRemove != null && featureToRemove.IsSelected)
            {
                featureToRemove.IsSelected = false;
                PropertyChanged.Notify(() => SelectedFeature);
            }

            AvailableFeatures.Remove(featureToRemove);
        }
Example #3
0
 public static int CreateMemeId(AvailableFeatures affectedFeature, int seed)
 {
     if (seed <= 0)
     {
         throw new Exception($"Incorrect seed = {seed} is to low.");
     }
     if (seed << 6 >> 6 != seed)
     {
         throw new Exception($"Incorrect seed = {seed} is to big.");
     }
     return((seed << 6) + (int)affectedFeature);
 }
        private void TestGenerateMeme(object sender, RoutedEventArgs e)
        {
            Random        randomizer = new Random();
            StringBuilder sb         = new StringBuilder();

            for (int i = 1; i < 10000; i++)
            {
                AvailableFeatures af = AvailableFeatures.HuntingEfficiency;
                Meme newMeme         = Meme.InventNewMeme(i, af);
                sb.AppendFormat("{0}\t{1}\tHunting Efficiency\n", newMeme.Efficiency, newMeme.Price);
            }
            File.WriteAllText("c:\\temp\\memes.csv", sb.ToString());
        }
Example #5
0
 public SucessStatistic(Meme meme, int goesAwayYear)
 {
     memeId                = meme.MemeId;
     affectedFeature       = meme.AffectedFeature;
     efficiency            = meme.efficiency;
     price                 = meme.price;
     complexityCoefficient = meme.complexityCoefficient;
     yearInvented          = meme.yearInvented;
     currentPopulation     = meme.knownBy;
     maxPopulation         = meme.maxKnowBy;
     maxPopulationYear     = meme.maxKnownByYear;
     totalPopulation       = meme.totalKnowBy;
     this.goesAwayYear     = goesAwayYear;
 }
Example #6
0
        public ToolParameterContainer GetToolParameterBasedOnSelectedFields()
        {
            IList <IToolParameter> toolParameter = new List <IToolParameter>();

            foreach (var currentAvailableLayer in AvailableFeatures.Where(l => l.IsSelected))
            {
                foreach (var currentField in currentAvailableLayer.Fields.Where(f => f.IsSelected))
                {
                    toolParameter.Add(new ToolParameter(currentField.FieldName));
                }
            }

            return(new ToolParameterContainer(toolParameter));
        }
Example #7
0
        public void EstablishLink(AbstractToolTemplate tool)
        {
            var featureLayer = AvailableFeatures.First(l => l.IsSelected && l.IsSuitableForMCDA).FeatureLayer;
            var featureClass = featureLayer.FeatureClass;

            var copiedFeatureClass = CopyFeatureClassIntoNewWorkspace(featureClass, _shadowWorkspace, tool + CreateTimeStamp());

            var newFeatureLayer = new FeatureLayerClass {
                Name = CreateLayerName(tool)
            };

            var feature = new Feature(copiedFeatureClass, newFeatureLayer);

            _dictionaryOfLinks.Add(tool, feature);

            PropertyChanged.Notify(() => LinkDictionary);
        }
Example #8
0
        public static Meme InventNewMeme(int seed, AvailableFeatures memeAffectedFeature, List <Meme> memesAlreadyKnown = null)
        {
            Meme meme       = new Meme(memeAffectedFeature, CreateMemeId(memeAffectedFeature, seed));
            var  randomizer = new Random(meme.MemeId);

            meme.yearInvented = World.Year;
            FeatureDescription featureDescription = WorldProperties.FeatureDescriptions[(int)memeAffectedFeature];

            meme.keepDiary  = randomizer.Chance(WorldProperties.ChancesThatMemeWillWriteALog);
            meme.efficiency = -1;
            meme.price      = -1;
            if (featureDescription.MemeEfficiencyMean > 1 && (featureDescription.range == FeatureRange.ZeroToOne || featureDescription.range == FeatureRange.MinusOneToPlusOne))
            {
                meme.efficiency = 1;
            }
            else if (featureDescription.MemeEfficiencyMean <= -1 && featureDescription.range == FeatureRange.MinusOneToPlusOne)
            {
                meme.efficiency = -1;
            }
            else
            {
                do
                {
                    meme.efficiency = randomizer.NormalRandom(featureDescription.MemeEfficiencyMean, featureDescription.MemeEfficiencyStdDev);
                    if (meme.efficiency == 0)
                    {
                        Console.WriteLine($"meme.efficiency == 0");
                    }
                }while (meme.efficiency < featureDescription.LowerRange || (meme.efficiency > featureDescription.UpperRange));                             // А что, все мымы теперь 0-1? Может у нас специальный мем снижающий какое-то качество, почему бы и нет, собственно? Пусть отбор решает. Заодно посмотрим что он там нарешать сможет.
            }
            meme.complexityCoefficient = Math.Pow(2, (meme.efficiency - featureDescription.MemeEfficiencyMean) / featureDescription.MemeEfficiencyStdDev); // Зачем вообще complexityCoefficient считать внутри цикла?

            while (meme.price < 0)
            {
                var pedestalPrice        = featureDescription.MemePricePedestal;
                var efficiencyPrice      = Math.Abs(meme.efficiency) * featureDescription.MemePriceEfficiencyRatio;
                var randomPricePart      = randomizer.NormalRandom(featureDescription.MemePriceRandomMean, featureDescription.MemePriceRandomStdDev);
                var complexityMultiplier = Math.Pow(meme.ComplexityCoefficient, WorldProperties.MemeCostComplexityPriceCoefficient);
                meme.price = (pedestalPrice + efficiencyPrice + randomPricePart) * complexityMultiplier;
            }

            meme.Report(string.Format("Meme teaches how {3}. It affects: {0}; Efficiency: {1:f5}; It takes {2:f2} memory.", memeAffectedFeature.GetDescription(), meme.Efficiency, meme.Price, meme.ActionDescription)); // Логер, конечно, можно не переделывать, потому что мемы создаются шибко редко.

            return(meme);
        }
Example #9
0
        private IList <Field> GetListOfFieldsFromToolParameter <T>(IEnumerable <T> toolParameter) where T : IToolParameter
        {
            IList <Field> listOfFields = new List <Field>();

            foreach (var currentToolParameter in toolParameter)
            {
                foreach (var currentAvailableLayer in AvailableFeatures.Where(l => l.IsSelected))
                {
                    var parameter = currentToolParameter;
                    foreach (var currentField in currentAvailableLayer.Fields.Where(f => f.FieldName.Equals(parameter.ColumnName)))
                    {
                        listOfFields.Add(currentField);
                    }
                }
            }

            return(listOfFields);
        }
Example #10
0
        public double GoHunting(AvailableFeatures huntingEfficiencyFeature)
        {
            double sumHuntingPowers       = 0;
            double cooperationCoefficient = 0;
            int    numHunters             = 0;

            foreach (Tribesman man in members)
            {
                var chance = man.GetFeature(AvailableFeatures.LikelyhoodOfNotBeingAFreeRider);
                if (randomizer.Chance(chance))
                {
                    double huntingEfforts = man.GoHunting(huntingEfficiencyFeature);
                    if (huntingEfforts > 0)
                    {
                        sumHuntingPowers       += huntingEfforts;
                        cooperationCoefficient += man.GetFeature(AvailableFeatures.CooperationEfficiency);
                        numHunters++;
                    }
                }
                else
                {
                    man.SkipHunting();
                }
            }
            if (members.Count > 0)
            {
                StatisticsCollector.ReportAverageEvent(TribeName, "Percentage of hunters", (double)numHunters / members.Count);
            }
            if (numHunters == 0)
            {
                return(0);
            }
            cooperationCoefficient /= numHunters;
            StatisticsCollector.ReportAverageEvent(TribeName, "Average hunting efforts", sumHuntingPowers * cooperationCoefficient);
            StatisticsCollector.ReportSumEvent(TribeName, "Total hunting efforts", sumHuntingPowers * cooperationCoefficient);

            return(sumHuntingPowers * cooperationCoefficient);
        }
Example #11
0
        private static void HuntAndShare(AvailableFeatures huntingEfficiencyFeature)
        {
            double totalEnvironmentResources = 0;

            if (huntingEfficiencyFeature == AvailableFeatures.HuntingEfficiency)
            {
                totalEnvironmentResources = RandomizeResources(
                    WorldProperties.ResourcesAvailableFromEnvironmentOnEveryStep,
                    WorldProperties.ResourcesAvailableFromEnvironmentOnEveryStepStdDev,
                    WorldProperties.ResourcesAvailableFromEnvironmentOnEveryStepDeviationLimit);
                if (WorldProperties.ResourcesABReplacementPeriod > 0)
                {
                    totalEnvironmentResources *=
                        ((1 + Math.Cos(Year * 2 * Math.PI / WorldProperties.ResourcesABReplacementPeriod)) / 2 *
                         (WorldProperties.ResourcesAvailableFromEnvironmentOnEveryStep - WorldProperties.ResourcesAAvailableFromEnvironmentMinimum)
                         + WorldProperties.ResourcesAAvailableFromEnvironmentMinimum) / WorldProperties.ResourcesAvailableFromEnvironmentOnEveryStep;
                }
            }
            else
            {
                totalEnvironmentResources = RandomizeResources(
                    WorldProperties.ResourcesBAvailableFromEnvironmentOnEveryStep,
                    WorldProperties.ResourcesBAvailableFromEnvironmentOnEveryStepStdDev,
                    WorldProperties.ResourcesBAvailableFromEnvironmentOnEveryStepDeviationLimit);
                if (WorldProperties.ResourcesABReplacementPeriod > 0)
                {
                    totalEnvironmentResources *=
                        ((1 - Math.Cos(Year * 2 * Math.PI / WorldProperties.ResourcesABReplacementPeriod)) / 2 *
                         (WorldProperties.ResourcesBAvailableFromEnvironmentOnEveryStep - WorldProperties.ResourcesBAvailableFromEnvironmentMinimum)
                         + WorldProperties.ResourcesBAvailableFromEnvironmentMinimum) / WorldProperties.ResourcesBAvailableFromEnvironmentOnEveryStep;
                }
            }

            if (totalEnvironmentResources == 0)
            {
                return;
            }

            ConcurrentDictionary <Tribe, double> tribeHuntingEfforts = new ConcurrentDictionary <Tribe, double>(); // Тут порядок всё равно не важен, используется только сумма, поэтому тут ConcurrentDictionary не трогаем

            World.tribes.Parallel((tribe) => { tribeHuntingEfforts.TryAdd(tribe, tribe.GoHunting(huntingEfficiencyFeature)); });
            double totalHuntingEffort = 0;

            foreach (Tribe t in tribes)
            {
                totalHuntingEffort += tribeHuntingEfforts[t];
            }
            Dictionary <Tribe, double> resourcesRecievedByTribes = new Dictionary <Tribe, double>(); // Тут запись идёт в основном потоке, а из тредов только чтение. Чтение не может нарушить целостность, так что нефиг тут ConcurrentDictionary плодить.

            if (totalHuntingEffort <= totalEnvironmentResources || totalEnvironmentResources < 0)
            {
                foreach (Tribe t in tribes)
                {
                    resourcesRecievedByTribes.Add(t, tribeHuntingEfforts[t]);
                }
            }
            else
            {
                var resourcePerHuntingEffort = totalEnvironmentResources / totalHuntingEffort; // Деление - медленная операция. Это, конечно, копейки, но зачем их в пустую тратить.
                foreach (Tribe t in tribes)
                {
                    resourcesRecievedByTribes.Add(t, resourcePerHuntingEffort * tribeHuntingEfforts[t]);
                }
            }
            World.tribes.Parallel((tribe) => { tribe.ReceiveAndShareResource(resourcesRecievedByTribes[tribe]); });
        }
Example #12
0
        public static string GenerateActionDescription(AvailableFeatures af, bool negate = false)
        {
            List <string> options = null;

            switch (af)
            {
            case AvailableFeatures.CooperationEfficiency:
                options = CooperationEfficiencyActions;
                break;

            case AvailableFeatures.FreeRiderDeterminationEfficiency:
                options = FreeRiderDeterminationEfficiencyActions;
                break;

            case AvailableFeatures.FreeRiderPunishmentLikelyhood:
                options = FreeRiderPunishmentLikelyhoodActions;
                break;

            case AvailableFeatures.HuntingEfficiency:
                options = HuntingEfficiencyActions;
                break;

            case AvailableFeatures.LikelyhoodOfNotBeingAFreeRider:
                options = LikelyhoodOfNotBeingAFreeRiderActions;
                break;

            case AvailableFeatures.StudyEfficiency:
                options = StudyEfficiencyActions;
                break;

            case AvailableFeatures.StudyLikelyhood:
                options = StudyLikelyhoodActions;
                break;

            case AvailableFeatures.TeachingEfficiency:
                options = TeachingEfficiencyActions;
                break;

            case AvailableFeatures.TeachingLikelyhood:
                options = TeachingLikelyhoodActions;
                break;

            case AvailableFeatures.TrickEfficiency:
                options = TrickEfficiencyActions;
                break;

            case AvailableFeatures.TrickLikelyhood:
                options = TrickLikelyhoodActions;
                break;

            case AvailableFeatures.UselessActionsLikelihood:
                options = uselessActions;
                break;

            case AvailableFeatures.AgeingRate:
                options = AgeingRateActions;
                break;
            }

            if (options == null)
            {
                return("");
            }

            string retval = null;

            lock (_lock)
                retval = options[random.Next(options.Count)];

            if (negate)
            {
                if (retval.IndexOf("not") > -1)
                {
                    retval = retval.Replace("not ", "");
                }
                else
                {
                    Regex regex = new Regex(Regex.Escape("to"));
                    retval = regex.Replace(retval, "not to", 1);
                }
            }

            return(retval);
        }
Example #13
0
 public static double GetFeature(this double[] genes, AvailableFeatures feature)
 {
     return(genes[(int)feature]);
 }
Example #14
0
 public static double SetFeature(this double[] genes, AvailableFeatures feature, double value)
 {
     return(genes[(int)feature] = value);
 }
Example #15
0
        /// <summary>
        ///     Returns the field of the OID for the selected feature. However, it is possible that no feature is selected
        ///     or that no OID exists or both. In this the methods returns null.
        /// </summary>
        /// <returns></returns>
        private Field GetOIDFieldFromSelectedFeature()
        {
            var selectedFeature = AvailableFeatures.FirstOrDefault(f => f.IsSelected);

            return(selectedFeature == null ? null : selectedFeature.Fields.FirstOrDefault(f => f.IsOID));
        }
Example #16
0
 public double this[AvailableFeatures feature] {
     get { return(resultingSet[(int)feature]); }
 }
Example #17
0
        public static Meme InventNewMeme(Random randomizer, AvailableFeatures memeAffectedFeature, List <Meme> memesAlreadyKnown = null)
        {
            var memesTimesMaxCount = WorldProperties.MemesTimesMaxCount > 0 ? (int)WorldProperties.MemesTimesMaxCount : MEMES_TYPES_MAX_COUNT;

            return(InventNewMeme(randomizer.Next(memesTimesMaxCount), memeAffectedFeature, memesAlreadyKnown));
        }
Example #18
0
 private Meme(AvailableFeatures affectedFeature, int memeId)
 {
     this.AffectedFeature = affectedFeature;
     MemeId = memeId;
 }
Example #19
0
 public static void ParseMemeId(int memeId, out AvailableFeatures affectedFeature, out int seed)
 {
     affectedFeature = (AvailableFeatures)(memeId & ((1 << 7) - 1));
     seed            = memeId >> 6;
 }