///<summary> ///this method iterates through each goal evaluator and selects the one ///that has the highest score as the current goal ///</summary> public void Arbitrate() { //for debugging _prevBestDesirability = _bestDesirability; _prevMostDesirable = _mostDesirable; LogUtil.WriteLineIfLogThink(LogPrefixText + LogArbitrateText + LogStatusText + " PrevDesirability = " + _prevBestDesirability.ToString(("F2")) + " PrevDesirable = " + (_prevMostDesirable == null ? "none" : _prevMostDesirable.GetType().Name)); _bestDesirability = 0.0f; _mostDesirable = null; //iterate through all the evaluators to find the highest scoring one foreach (Evaluator.Evaluator ev in _evaluators) { float desirabilty = ev.CalculateDesirability(Bot); if (desirabilty < _bestDesirability) continue; _bestDesirability = desirabilty; _mostDesirable = ev; } Assert.Fatal(_mostDesirable != null, "Think.Arbitrate: no evaluator selected"); LogUtil.WriteLineIfLogThink(LogPrefixText + LogArbitrateText + LogStatusText + " Desirability = " + _bestDesirability.ToString(("F2")) + " Desirable = " + (_mostDesirable == null ? "none" : _mostDesirable.GetType().Name)); if (_mostDesirable != null) { _mostDesirable.SetGoal(Bot); } }