示例#1
0
        public override void Step()
        {
            NotifyServerDataReceived();
            string           jsonData = _communicator.ReceiveFromServer();
            AgentMessage     message  = JsonConvert.DeserializeObject <AgentMessage>(jsonData);
            AgentStepMessage stepMsg  = _env.Step((Action)message.Action);
            string           stepData = JsonConvert.SerializeObject(stepMsg, Formatting.Indented);

            SendDataBytesToServer(Encoding.ASCII.GetBytes(stepData));
            SendDataBytesToServer(_env.GetEnvironmentImageBytes());
        }
示例#2
0
        private void Update()
        {
#if UNITY_EDITOR || UNITY_STANDALONE
            AgentStepMessage msg = null;
            if (Input.GetKeyDown(KeyCode.LeftArrow))
            {
                msg = _env.Step(Action.Left);
            }
            else if (Input.GetKeyDown(KeyCode.RightArrow))
            {
                msg = _env.Step(Action.Right);
            }
            else if (Input.GetKeyDown(KeyCode.UpArrow))
            {
                msg = _env.Step(Action.Up);
            }
            else if (Input.GetKeyDown(KeyCode.DownArrow))
            {
                msg = _env.Step(Action.Down);
            }
            else if (Input.GetKeyDown(KeyCode.Space))
            {
                _env.ResetEnv();
            }
            else if (Input.GetKeyDown(KeyCode.Tab))
            {
#if ENABLE_TENSORFLOW
                _env.AIStep();
#endif
            }
            if (msg != null)
            {
                Logger.Print("Reward: {0} IsDone: {1}", msg.Reward, msg.IsDone);
                if (msg.IsDone)
                {
                    _env.ResetEnv();
                }
            }
#endif
            scoreText.text = _env.TotalReward.ToString();
        }
示例#3
0
        public AgentStepMessage Step(Action action)
        {
            if (_agent == null)
            {
                return(null);
            }
            switch (action)
            {
            case Action.Up:
                MoveUp();
                break;

            case Action.Down:
                MoveDown();
                break;

            case Action.Left:
                MoveLeft();
                break;

            case Action.Right:
                MoveRight();
                break;

            default:
                break;
            }
            _currMoveSteps += 1;
            InnerState       state = GetCurrentState();
            AgentStepMessage msg   = new AgentStepMessage
            {
                Reward = state.reward,
                IsDone = state.isDone
            };

            TotalReward  += msg.Reward;
            _prevAgentPos = _agent.transform.position;
            ClearColliderObj(state.colliderObj);
            return(msg);
        }