Пример #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="RemoveRequest"></param>
        public void Remove(object RemoveRequest)
        {
            RuminantFeedRequest removeRequest = RemoveRequest as RuminantFeedRequest;

            // limit by available
            removeRequest.Amount = Math.Min(removeRequest.Amount, amount);
            // add to intake and update %N and %DMD values
            removeRequest.Requestor.AddIntake(removeRequest);
            // Remove from resource
            Remove(removeRequest.Amount, removeRequest.FeedActivity.Name, removeRequest.Requestor.BreedParams.Name);
        }
Пример #2
0
 /// <summary>
 /// A funtion to add intake and track changes in %N and DietDryMatterDigestibility
 /// </summary>
 /// <param name="intake">Feed request contianing intake information kg, %n, DMD</param>
 public void AddIntake(RuminantFeedRequest intake)
 {
     if (intake.Amount > 0)
     {
         // determine the adjusted DMD of all intake
         this.DietDryMatterDigestibility = ((this.Intake * this.DietDryMatterDigestibility / 100.0) + (intake.FeedActivity.FeedType.DMD / 100.0 * intake.Amount)) / (this.Intake + intake.Amount) * 100.0;
         // determine the adjusted percentage N of all intake
         this.PercentNOfIntake = ((this.Intake * this.PercentNOfIntake / 100.0) + (intake.FeedActivity.FeedType.Nitrogen / 100.0 * intake.Amount)) / (this.Intake + intake.Amount) * 100.0;;
         this.Intake          += intake.Amount;
     }
 }
Пример #3
0
        private void OnWFRequestFeed(object sender, EventArgs e)
        {
            if (labourLimiter > 0)
            {
                RuminantHerd    ruminantHerd = Resources.RuminantHerd();
                List <Ruminant> herd         = ruminantHerd.Herd;

                if (herd == null && herd.Count == 0)
                {
                    return;
                }

                // get month from clock
                int month = Clock.Today.Month;

                // get list from filters
                foreach (var child in this.Children)
                {
                    if (child.GetType() == typeof(RuminantFilterGroup))
                    {
                        foreach (Ruminant ind in herd.Filter(child as RuminantFilterGroup))
                        {
                            RuminantFeedRequest freqest = new RuminantFeedRequest();
                            freqest.FeedActivity = this;
                            freqest.Requestor    = ind;
                            freqest.Amount       = 0;
                            switch (FeedStyle)
                            {
                            case RuminantFeedActivityTypes.SpecifiedDailyAmount:
                                freqest.Amount = (child as RuminantFilterGroup).MonthlyValues[month - 1] * 30.4;                                         // * ind.Number;
                                break;

                            case RuminantFeedActivityTypes.ProportionOfWeight:
                                freqest.Amount = (child as RuminantFilterGroup).MonthlyValues[month - 1] * ind.Weight * 30.4;                                        // * ind.Number;
                                break;

                            case RuminantFeedActivityTypes.ProportionOfPotentialIntake:
                                freqest.Amount = (child as RuminantFilterGroup).MonthlyValues[month - 1] * ind.PotentialIntake;                                         // * ind.Number;
                                break;

                            case RuminantFeedActivityTypes.ProportionOfRemainingIntakeRequired:
                                freqest.Amount = (child as RuminantFilterGroup).MonthlyValues[month - 1] * (ind.PotentialIntake - ind.Intake);                                         // * ind.Number;
                                break;

                            default:
                                break;
                            }
                            freqest.Amount *= labourLimiter;
                            FoodSource.Remove(freqest);
                        }
                    }
                }
            }
        }
Пример #4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="RemoveRequest"></param>
        public void Remove(object RemoveRequest)
        {
            // Called if activity removes food directly from GrazeFoodStore (no Feed Arbitrator used)
            // Remove requested amount from all pools as proportion pool amount of whole biomass

            RuminantFeedRequest feedRequest = RemoveRequest as RuminantFeedRequest;
            double totalAvailable           = Pools.Sum(a => a.Amount);
            double amountToTake             = Math.Min(feedRequest.Amount, totalAvailable);

            foreach (var pool in Pools)
            {
                feedRequest.Amount = amountToTake * (pool.Amount / totalAvailable);
                pool.Remove(feedRequest);
            }
        }