private void OnCLEMInitialiseActivity(object sender, EventArgs e)
        {
            this.AllocationStyle = ResourceAllocationStyle.Manual;

            this.InitialiseHerd(false, true);

            breederGroup = new RuminantGroup();
            breederGroup.Children.Add(new RuminantFilter()
            {
                Parameter = RuminantFilterParameters.Gender, Operator = FilterOperators.Equal, Value = "Female"
            });
            breederGroup.Children.Add(new RuminantFilter()
            {
                Parameter = RuminantFilterParameters.IsBreeder, Operator = FilterOperators.Equal, Value = "True"
            });

            attributeList = this.FindAllDescendants <SetAttributeWithValue>().ToList();

            // get labour specifications
            labour = this.FindAllChildren <LabourRequirement>().Cast <LabourRequirement>().ToList();
            if (labour.Count() == 0)
            {
                labour = new List <LabourRequirement>();
            }

            // check that timer exists for controlled mating
            if (!this.TimingExists)
            {
                Summary.WriteWarning(this, $"Breeding with controlled mating [a={this.Parent.Name}].[a={this.Name}] requires a Timer otherwise breeding will be undertaken every time-step");
            }
        }
Beispiel #2
0
        /// <summary>
        /// Return the mean and standard deviation of an attribute value
        /// </summary>
        public ListStatistics SummariseAttribute(string tag, bool ignoreNotFound, RuminantGroup herdGroup = null)
        {
            ListStatistics listStatistics = new ListStatistics();

            if (ruminantHerd is null)
            {
                return(listStatistics);
            }

            IEnumerable <Ruminant> herd = null;

            if (herdGroup != null)
            {
                herd = herdGroup.Filter(ruminantHerd.Herd);
            }
            else
            {
                herd = ruminantHerd.Herd;
            }

            var values = herd.Where(a => (ignoreNotFound & a.Attributes.GetValue(tag) == null) ? false : true).Select(a => new Tuple <float, float>(Convert.ToSingle(a.Attributes.GetValue(tag)?.StoredValue), Convert.ToSingle(a.Attributes.GetValue(tag)?.StoredMateValue))).ToList();

            if (values.Count() == 0)
            {
                return(listStatistics);
            }

            double sd   = 0;
            Single mean = values.Average(a => a.Item1);
            Single sum  = values.Sum(d => Convert.ToSingle(Math.Pow(d.Item1 - mean, 2)));

            sd = Math.Sqrt((sum) / values.Count() - 1);
            listStatistics.Average           = mean;
            listStatistics.StandardDeviation = sd;

            mean = values.Average(a => a.Item2);
            sum  = values.Sum(d => Convert.ToSingle(Math.Pow(d.Item2 - mean, 2)));
            sd   = (sum == 0)?0:Math.Sqrt((sum) / values.Count() - 1);
            listStatistics.AverageMate           = mean;
            listStatistics.StandardDeviationMate = sd;

            listStatistics.Count = values.Count();
            listStatistics.Total = herd.Count();

            return(listStatistics);
        }
Beispiel #3
0
        /// <summary>
        /// Return the mean and standard deviation of an attribute value
        /// </summary>
        public ListStatistics SummariseAttribute(string tag, bool ignoreNotFound, RuminantGroup herdGroup = null)
        {
            ListStatistics listStatistics = new ListStatistics();

            if (ruminantHerd is null)
            {
                return(listStatistics);
            }

            IEnumerable <Ruminant> herd = null;

            if (herdGroup != null)
            {
                herd = herdGroup.Filter(ruminantHerd.Herd);
            }
            else
            {
                herd = ruminantHerd.Herd;
            }

            // do not report mate if greater than max months since conception
            // if not valid report NAN that is filtered out in calculations below
            var values = herd.Where(a => (ignoreNotFound & a.Attributes.GetValue(tag) == null) ? false : true).Select(a => new Tuple <float, float>(
                                                                                                                          (a.Attributes.GetValue(tag)?.StoredValue is null) ? Single.NaN: Convert.ToSingle(a.Attributes.GetValue(tag)?.StoredValue),
                                                                                                                          (a.Sex == Sex.Female && a.Age - (a as RuminantFemale).AgeAtLastConception <= MaxMonthsToReportMate) ? Single.NaN : (a.Attributes.GetValue(tag)?.StoredMateValue is null) ? Single.NaN : Convert.ToSingle(a.Attributes.GetValue(tag)?.StoredMateValue))
                                                                                                                      ).ToList();

            if (values.Count() == 0)
            {
                return(listStatistics);
            }

            double sd            = 0;
            Single mean          = 0;
            Single sum           = 0;
            var    valuesPresent = values.Where(a => !float.IsNaN(a.Item1));

            if (valuesPresent.Count() > 0)
            {
                mean = valuesPresent.Average(a => a.Item1);
                sum  = valuesPresent.Sum(d => Convert.ToSingle(Math.Pow(d.Item1 - mean, 2)));
                sd   = Math.Sqrt((sum) / valuesPresent.Count() - 1);
                listStatistics.Average           = mean;
                listStatistics.StandardDeviation = sd;
                listStatistics.Total             = valuesPresent.Count();
            }

            valuesPresent = values.Where(a => !float.IsNaN(a.Item2));
            if (valuesPresent.Count() > 0)
            {
                mean = valuesPresent.Average(a => a.Item2);
                sum  = valuesPresent.Sum(d => Convert.ToSingle(Math.Pow(d.Item2 - mean, 2)));
                sd   = (sum == 0) ? 0 : Math.Sqrt((sum) / valuesPresent.Count() - 1);
                listStatistics.AverageMate           = mean;
                listStatistics.StandardDeviationMate = sd;
                listStatistics.TotalMate             = valuesPresent.Count();
            }
            listStatistics.Count = values.Count();

            return(listStatistics);
        }