コード例 #1
0
        // 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);
            }
        }
コード例 #2
0
ファイル: FuzzyRule.cs プロジェクト: Switcheese/FuzzyChess
        /// <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);
        }