/// <summary> /// The Stock class constructor /// </summary> public Stock() : base() { this.FUserForages = new List<string>(); this.FUserPaddocks = new List<string>(); this.FRandFactory = new TMyRandom(this.FRandSeed); // random number generator this.FModel = new TStockList(this.FRandFactory); Array.Resize(ref FGenotypeInits, 0); Array.Resize(ref FAnimalInits, 0); FSuppFed = new TSupplement(); FExcretion = new TExcretionInfo(); FPaddocksGiven = false; FFirstStep = true; FRandSeed = 0; }
private double[] MIN_SRW = { 30.0, 300.0 }; // [AnimalType] Limits to breed SRW's #endregion Fields #region Constructors /// <summary> /// Create a TStockList /// </summary> /// <param name="RandomFactory"></param> public TStockList(TMyRandom RandomFactory) { StartRun = 0; RandFactory = RandomFactory; //store the ptr setParamFile(""); // Creates a default FBaseParams Array.Resize(ref FStock, 1); // Set aside temporary storage FPaddocks = new TPaddockList(); FPaddocks.Add(-1, String.Empty); // The "null" paddock is added here // FForages := TForageList.Create( TRUE ); FForageProviders = new TForageProviders(); FEnterprises = new TEnterpriseList(); FGrazing = new TGrazingList(); }
private void OnWFAnimalMilking(object sender, EventArgs e) { if (ProportionToRemove > 0) { // get dry breeders RuminantHerd ruminantHerd = Resources.RuminantHerd(); List<RuminantFemale> herd = ruminantHerd.Herd.Where(a => a.BreedParams.Name == HerdName & a.Gender == Sex.Female).Cast<RuminantFemale>().ToList(); if (SellFromManagedPaddock) { // in sepecified paddock herd = herd.Where(a => a.Location == PaddockName).ToList(); } TMyRandom randomGenerator = new TMyRandom(10); // get dry breeders from females foreach (RuminantFemale female in herd.Where(a => a.Age - a.AgeAtLastBirth >= MonthsSinceBirth & a.PreviousConceptionRate >= MinimumConceptionBeforeSell & a.AgeAtLastBirth > 0)) { if(randomGenerator.RandNo <= ProportionToRemove) { // flag female ready to transport. female.SaleFlag = Common.HerdChangeReason.DryBreederSale; } } } }
private void OnWFAnimalDeath(object sender, EventArgs e) { // remove individuals that died // currently performed in the month after weight has been adjusted // and before breeding, trading, culling etc (See Clock event order) // Calculated by // critical weight & // juvenile (unweaned) death based on mothers weight & // adult weight adjusted base mortality. RuminantHerd ruminantHerd = Resources.RuminantHerd(); List<Ruminant> herd = ruminantHerd.Herd; // weight based mortality List<Ruminant> died = herd.Where(a => a.Weight < (a.HighWeight * (1.0 - a.BreedParams.ProportionOfMaxWeightToSurvive))).ToList(); // set died flag died.Select(a => { a.SaleFlag = Common.HerdChangeReason.Died; return a; }).ToList(); ruminantHerd.RemoveRuminant(died); TMyRandom randomGenerator = new TMyRandom(10); foreach (var ind in ruminantHerd.Herd) { double mortalityRate = 0; if (!ind.Weaned) { mortalityRate = 0; if (ind.Mother.Weight < ind.BreedParams.CriticalCowWeight * ind.StandardReferenceWeight) { mortalityRate = ind.BreedParams.JuvenileMortalityMaximum; } else { mortalityRate = Math.Exp(-Math.Pow(ind.BreedParams.JuvenileMortalityCoefficient * (ind.Weight / ind.NormalisedAnimalWeight), ind.BreedParams.JuvenileMortalityExponent)) / 100; } mortalityRate += mortalityRate + ind.BreedParams.MortalityBase; mortalityRate = Math.Max(mortalityRate, ind.BreedParams.JuvenileMortalityMaximum); } else { mortalityRate = 1 - (1 - ind.BreedParams.MortalityBase) * (1 - Math.Exp(Math.Pow(-(ind.BreedParams.MortalityCoefficient * (ind.Weight / ind.NormalisedAnimalWeight - ind.BreedParams.MortalityIntercept)), ind.BreedParams.MortalityExponent))); } if (randomGenerator.RandNo <= mortalityRate) { ind.Died = true; } } died = herd.Where(a => a.Died).ToList(); died.Select(a => { a.SaleFlag = Common.HerdChangeReason.Died; return a; }).ToList(); ruminantHerd.RemoveRuminant(died); //// mortality calculation (calculation actually calculates the survival probability) //for (int i = herd.Count; i >= 0; i--) //{ // double mortalityRate = 0; // if (!herd[i].Weaned) // { // mortalityRate = 0; // if (herd[i].Mother.Weight < herd[i].BreedParams.CriticalCowWeight * herd[i].StandardReferenceWeight) // { // mortalityRate = herd[i].BreedParams.JuvenileMortalityMaximum; // } // else // { // mortalityRate = Math.Exp(-Math.Pow(herd[i].BreedParams.JuvenileMortalityCoefficient * (herd[i].Weight / herd[i].NormalisedAnimalWeight), herd[i].BreedParams.JuvenileMortalityExponent)) / 100; // } // mortalityRate += mortalityRate + herd[i].BreedParams.MortalityBase; // mortalityRate = Math.Max(mortalityRate, herd[i].BreedParams.JuvenileMortalityMaximum); // } // else // { // mortalityRate = 1 - (1 - herd[i].BreedParams.MortalityBase) * (1 - Math.Exp(Math.Pow(-(herd[i].BreedParams.MortalityCoefficient * (herd[i].Weight / herd[i].NormalisedAnimalWeight - herd[i].BreedParams.MortalityIntercept)), herd[i].BreedParams.MortalityExponent))); // } // if (randomGenerator.RandNo <= mortalityRate) // { // herd[i].Died = true; // } //} }