Esempio n. 1
0
    public float[] ExpertDecide(List <float> vectorObs)
    {
        System.Random r = new System.Random();

        if (r.NextDouble() < noise)
        {
            return(new float[] { r.Next(0, 5) });
        }

        MLInput input = new MLInput(vectorObs.ToArray());

        if (input.GetOpponentAction() == MLAction.DODGE_LEFT)
        {
            return(MLActionFactory.GetVectorAction(MLAction.PUNCH_RIGHT));
        }

        if (input.GetOpponentAction() == MLAction.DODGE_RIGHT)
        {
            return(MLActionFactory.GetVectorAction(MLAction.PUNCH_LEFT));
        }

        if (input.GetOpponentAction() == MLAction.PUNCH_LEFT)
        {
            return(MLActionFactory.GetVectorAction(MLAction.DODGE_LEFT));
        }

        if (input.GetOpponentAction() == MLAction.PUNCH_RIGHT)
        {
            return(MLActionFactory.GetVectorAction(MLAction.DODGE_RIGHT));
        }

        return(new float[] { 0f });
    }
Esempio n. 2
0
    public override float[] Decide(List <float> vectorObs, List <Texture2D> visualObs, float reward, bool done, List <float> memory)
    {
        if (done)
        {
            moveIdx = 0;
            return(NOTHING);
        }

        MLInput input = new MLInput(vectorObs.ToArray());

        if (input.GetMyMove() == MLAction.NOTHING && input.IsDodgeReady()) // Can dodge
        {
            if (input.GetOpponentAction() == MLAction.PUNCH_LEFT)
            {
                int rand = Random.Range(0, 100);
                if (rand <= 30)
                {
                    return(LEFT_DODGE);
                }
                else if (rand <= 50)
                {
                    return(RIGHT_DODGE);
                }
                else
                {
                    // Run the normal moves
                }
            }
            if (input.GetOpponentAction() == MLAction.PUNCH_RIGHT)
            {
                int rand = Random.Range(0, 100);
                if (rand <= 30)
                {
                    return(RIGHT_DODGE);
                }
                else if (rand <= 50)
                {
                    return(LEFT_DODGE);
                }
                else
                {
                    // Run the normal moves
                }
            }
        }

        return(MLActionFactory.GetVectorAction(runMoves(vectorObs, moves)));
    }
Esempio n. 3
0
    public override float[] Decide(List <float> vectorObs, List <Texture2D> visualObs, float reward, bool done, List <float> memory)
    {
        if (!useOldVersion)
        {
            if (Mathf.Approximately(seqStartTime, 0))
            {
                Reset();
            }

            if (Time.time - seqStartTime > 15 && seqIdx == 0)
            {
                seqIdx           = 1;
                moveIdx          = 0;
                didAction        = false;
                nothingStartTime = Time.time;
            }
            else if (Time.time - seqStartTime > 30 && seqIdx == 1)
            {
                seqIdx           = 2;
                moveIdx          = 0;
                didAction        = false;
                nothingStartTime = Time.time;
            }

            MLAction nextMove = runMoves(vectorObs, moveSequences[seqIdx]);
            return(MLActionFactory.GetVectorAction(nextMove));
        }
        else
        {
            if (done)
            {
                moveIdx = 0;
                return(NOTHING);
            }


            MLInput input = new MLInput(vectorObs.ToArray());

            if (input.IsPunchReady() && input.IsDodgeReady()) // Can punch / dodge
            {
                float[] move = moves[moveIdx];
                moveIdx = (moveIdx + 1) % moves.Length;
                return(move);
            }

            return(NOTHING);
        }
    }
Esempio n. 4
0
    public override float[] Decide(List <float> vectorObs, List <Texture2D> visualObs, float reward, bool done, List <float> memory)
    {
        MLInput input = new MLInput(vectorObs.ToArray());


        MLAction currentMove = input.GetMyMove();

        //if (MLActionFactory.IsDodge(currentMove))
        //{
        //    return MLActionFactory.GetVectorAction(currentMove);
        //}

        if (currentMove != MLAction.NOTHING)
        {
            var maxMoveCount = MLActionFactory.IsDodge(currentMove) ? maxDodgeCount : maxPunchCount;
            if (moveCount < maxMoveCount)
            {
                moveCount++;
                return(MLActionFactory.GetVectorAction(currentMove));
            }
            return(MLActionFactory.GetVectorAction(MLAction.NOTHING));
        }
        else
        {
            moveCount = 0;
        }

        if (Input.GetKey(KeyCode.F))
        {
            return(MLActionFactory.GetVectorAction(MLAction.PUNCH_LEFT));
        }
        else if (Input.GetKey(KeyCode.J))
        {
            return(MLActionFactory.GetVectorAction(MLAction.PUNCH_RIGHT));
        }
        else if (Input.GetKey(KeyCode.D))
        {
            return(MLActionFactory.GetVectorAction(MLAction.DODGE_LEFT));
        }
        else if (Input.GetKey(KeyCode.K))
        {
            return(MLActionFactory.GetVectorAction(MLAction.DODGE_RIGHT));
        }

        return(MLActionFactory.GetVectorAction(MLAction.NOTHING));
    }
Esempio n. 5
0
    public float[] OnlyDoAndDodge(List <float> vectorObs, MLAction action)
    {
        MLInput input = new MLInput(vectorObs.ToArray());

        if (lastAction != input.GetOpponentAction() && input.GetOpponentAction() == MLAction.PUNCH_LEFT)
        {
            lastAction = input.GetOpponentAction();
            return(MLActionFactory.GetVectorAction(MLAction.DODGE_RIGHT));
        }

        if (lastAction != input.GetOpponentAction() && input.GetOpponentAction() == MLAction.PUNCH_RIGHT)
        {
            lastAction = input.GetOpponentAction();
            return(MLActionFactory.GetVectorAction(MLAction.DODGE_LEFT));
        }

        lastAction = input.GetOpponentAction();

        return(MLActionFactory.GetVectorAction(action));
    }
Esempio n. 6
0
 public float[] OnlyDo(List <float> vectorObs, MLAction action)
 {
     return(MLActionFactory.GetVectorAction(action));
 }
Esempio n. 7
0
    public float[] RepeatActions(List <float> vectorObs, List <MLAction> actions, bool shouldDodge)
    {
        MLInput input = new MLInput(vectorObs.ToArray());

        // Sequence
        if (input.IsDodgeReady()) // Can punch / dodge
        {
            // Dodging
            if (shouldDodge && lastAction != input.GetOpponentAction() && input.GetOpponentAction() == MLAction.PUNCH_LEFT)
            {
                lastAction = input.GetOpponentAction();
                actionIdx  = 0;
                return(MLActionFactory.GetVectorAction(MLAction.DODGE_RIGHT));
            }

            if (shouldDodge && lastAction != input.GetOpponentAction() && input.GetOpponentAction() == MLAction.PUNCH_RIGHT)
            {
                lastAction = input.GetOpponentAction();
                actionIdx  = 0;
                return(MLActionFactory.GetVectorAction(MLAction.DODGE_LEFT));
            }

            lastAction = input.GetOpponentAction();
        }

        if (input.IsPunchReady())
        {
            int myComboState = input.GetMyComboState();
            if (actions.Count == 2)
            {
                switch (myComboState)
                {
                case 0: return(MLActionFactory.GetVectorAction(actions[0]));

                case 1: return(MLActionFactory.GetVectorAction(actions[1]));

                case 2: return(MLActionFactory.GetVectorAction(actions[1]));

                default: return(MLActionFactory.GetVectorAction(MLAction.NOTHING));
                }
            }
            if (actions.Count == 3)
            {
                switch (myComboState)
                {
                case 0: return(MLActionFactory.GetVectorAction(actions[0]));

                case 1: return(MLActionFactory.GetVectorAction(actions[1]));

                case 2: return(MLActionFactory.GetVectorAction(actions[1]));

                case 3: return(MLActionFactory.GetVectorAction(actions[2]));

                case 4: return(MLActionFactory.GetVectorAction(actions[2]));

                default: return(MLActionFactory.GetVectorAction(MLAction.NOTHING));
                }
            }
            return(MLActionFactory.GetVectorAction(actions[0]));
        }

        return(MLActionFactory.GetVectorAction(MLAction.NOTHING));
    }