public BudgetForecast GetForecast(int current, int min, int max, bool preferExpansion = false) { CycleStage stage = GetStage(current, min, max, preferExpansion); stage.duration = GetRandomDuration(); stage.length = BudgetUtils.RoundOff(GetRawChangeLength(BudgetUtils.Multiply(stage.duration), Math.Abs(stage.allowedChange))); return(new BudgetForecast(stage.FormForecast())); }
private CycleStage GetRandomStage(int current, int min, int max) // change this trash { CycleStage stage = null; int rnd = _random.Next(0, 3); if (rnd == 0) { stage = new StillCycleStage(current, min, max); } else if (rnd == 1) { stage = new ExpansionCycleStage(current, min, max); } else if (rnd == 2) { stage = new RecessionCycleStage(current, min, max); } return(stage); }
public CycleStage GetStage(int current, int min, int max, bool preferExpansion) { CycleStage stage = null; int toMin = current - min; int toMax = max - current; if (preferExpansion || toMin < _parameters.OffsetToChangeDirection) { stage = new ExpansionCycleStage(current, min, max); } else if (toMax < _parameters.OffsetToChangeDirection) { stage = new RecessionCycleStage(current, min, max); } else { stage = GetRandomStage(current, toMax, toMin); } return(stage); }