public Event(AIComponent.Decision decision)
 {
     m_decision         = decision;
     m_injure           = 0;
     m_demage           = 0;
     m_usingActionPoint = 0;
 }
Esempio n. 2
0
 //改变当前状态
 public override void ChangeDecision(AIComponent.Decision newDecision)
 {
     m_previsousDecsion = m_currentDecision;
     m_previsousDecsion.Exit(this);
     m_currentDecision = m_decisions [newDecision];
     m_currentDecision.Enter(this);
 }
 //默认为null状态
 public Event()
 {
     m_decision         = AIComponent.Decision.Null;
     m_injure           = 0;
     m_demage           = 0;
     m_usingActionPoint = 0;
 }
    //更新静态数据
    public static void UpdateStatic(AIComponent.Decision decision, float newInjure, float newDem)
    {
        float tmpInjure = StaticBayesInjure [decision] + newInjure;
        float tmpDem    = StaticBayesDemage [decision] + newDem;

        StaticBayesInjure [decision] = tmpInjure / 2;
        StaticBayesDemage [decision] = tmpDem / 2;
    }
    //不把attack添加入决策事件中,而是加入上一个事件中
    public void AddEvent(AIComponent.Decision decision)
    {
        if (decision == AIComponent.Decision.Attack)
        {
            Debug.Log("Add Error Decision");
            return;
        }
        Event e = new Event(decision);

        m_events [m_currentEvent] = e;
        m_events [m_currentEvent].m_usingActionPoint++;
        //m_currentEvent -1 才是真正的当前事件
        m_currentEvent++;
        if (m_currentEvent == eventLength)
        {
            m_currentEvent = 0;
        }
    }
    public float BayesInjure(AIComponent.Decision decision)
    {
        //所有的行动
        int allExcute = 0;
        //对应行动的次数
        int decisionExecute = 0;
        //对应行动造成伤害的次数
        int executeInjure = 0;
        //总的进攻次数
        int allInjure = 0;

        foreach (Event e in m_events)
        {
            if (e == null)
            {
                continue;
            }
            if (e.m_injure != 0)
            {
                allInjure++;
            }
            if (e.m_decision != AIComponent.Decision.Null)
            {
                allExcute++;
                if (e.m_decision == decision)
                {
                    decisionExecute++;
                    if (e.m_injure != 0)
                    {
                        executeInjure++;
                    }
                }
            }
        }
        //如果还没有足够的数据,那么从静态参数中取值
        if (allExcute == 0 || allInjure == 0 || decisionExecute == 0)
        {
            return(Probability.StaticBayesInjure [decision]);
        }
        float denominator = allInjure / allExcute;

        return(((executeInjure / decisionExecute) * (decisionExecute / allExcute)) / denominator);
    }
Esempio n. 7
0
    //生产对应状态
    public BasicDecision <Heretic> CreateDecision(AIComponent.Decision decision)
    {
        switch (decision)
        {
        case AIComponent.Decision.Attack:
            return(new AttackDecision <Heretic> ());

        case AIComponent.Decision.CallSupport:
            return(new CallSupportDecision <Heretic> ());

        //case AIComponent.Decision.Escape:
        //return new EscapeDecision<Heretic> ();

        case AIComponent.Decision.Patrol:
            return(new PatrolDecision <Heretic> ());

        case AIComponent.Decision.Survey:
            return(new SurveyDecision <Heretic> ());

        default:
            return(null);
        }
    }
    //状态的平均伤害数值
    public float ExpectDemage(AIComponent.Decision decision)
    {
        int   demageTime   = 0;
        float expectDemage = 0;

        foreach (Event e in m_events)
        {
            if (e == null)
            {
                continue;
            }
            if (e.m_decision == decision)
            {
                expectDemage += e.m_demage;
                demageTime   += e.m_usingActionPoint;
            }
        }
        if (demageTime == 0)
        {
            return(1);
        }
        return(expectDemage / demageTime);
    }
    public float ExpectInjure(AIComponent.Decision decision)
    {
        int   ingureTime   = 0;
        float expectInjure = 0;

        foreach (Event e in m_events)
        {
            if (e == null)
            {
                continue;
            }
            if (e.m_decision == decision)
            {
                expectInjure += e.m_injure;
                ingureTime   += e.m_usingActionPoint;
            }
        }
        if (ingureTime == 0)
        {
            return(1);
        }
        return(expectInjure / ingureTime);
    }
 public void SetDecesionType(AIComponent.Decision type)
 {
     m_DecisionType = type;
 }
 //状态的伤害期待 = 平均伤害数值* 造成伤害的可能性
 public float DecisionExpectDemage(AIComponent.Decision decision)
 {
     Debug.Log("BayesInjure (decision)" + BayesInjure(decision));
     Debug.Log(" ExpectInjure (decision)" + ExpectInjure(decision));
     return(BayesDemage(decision) * ExpectDemage(decision));
 }
Esempio n. 12
0
 public abstract void ChangeDecision(AIComponent.Decision newDecision);