// Private Method #region Private Method #endregion // Public Method #region Public Method public float GetRuleWeight(DF_FuzzyRule ruleKind) { if (dicFuzzyRules.ContainsKey(ruleKind)) { return(dicFuzzyRules[ruleKind].GetWeight(ruleKind)); } else { #if UNITY_EDITOR Debug.LogWarning("Dictionary Key가 존재하지 않습니다."); #endif return(0f); } }
/// <summary> /// 해당 규칙의 무게중심을 계산한다. /// </summary> /// <param name="ruleKind"></param> /// <returns></returns> public float GetWeight(DF_FuzzyRule ruleKind) { List <int> memKind = new List <int>(membershipCount); float cardinal = 0f; float ordinal = 0f; // 추가시켜줘야 하는부분 switch (ruleKind) { case DF_FuzzyRule.VisualField_Width: { memKind.AddRange(new int[] { (int)Membership.VisualField_Width_Narrow, (int)Membership.VisualField_Width_Usually, (int)Membership.VisualField_Width_Wide }); } break; case DF_FuzzyRule.VisualField_Distance: { memKind.AddRange(new int[] { (int)Membership.VisualField_Distance_Close, (int)Membership.VisualField_Distance_Usually, (int)Membership.VisualField_Distance_Far }); } break; } for (int i = 0; i < memKind.Count; i++) { var aver = GetKeyMaxAverage((Membership)memKind[i]); var rel = GetReliability((Membership)memKind[i]); cardinal += (aver * rel); ordinal += rel; } return(cardinal / ordinal); }