Beispiel #1
0
        IEnumerator Movement()
        {
            var keys = _keys[(int)Side];

            while (true)
            {
                Action action = Idle;
                if (Input.GetKey(keys[0]))
                {
                    action = MoveUp;
                }
                if (Input.GetKey(keys[1]))
                {
                    action = MoveDown;
                }
                if (Side == Player.Player1)
                {
                    QAIManager.Imitate(this, GetState(), action);
                }
                if (Side == Player.Player2)
                {
                    action();
                }
                yield return(new WaitForFixedUpdate());
            }
        }
Beispiel #2
0
        // Use this for initialization
        void Start()
        {
            IEnumerable <Vector3> positions = Goal.AllValidPositions();
            var seeker = FindObjectOfType <GridWoman>();
            var objMap = new Dictionary <Vector3, GameObject>();
            var dirMap = new Dictionary <Vector3, Vector3>();

            positions = positions.Where(p => !p.Equals(Goal.Position));
            foreach (var position in positions)
            {
                var pos = position + new Vector3(0, 1, 0);
                seeker.transform.position = pos;
                var state    = seeker.GetState();
                var query    = QAIManager.Query(state);
                var max      = query.MaxBy(kv => kv.Value);
                var rotation = ActionToRotation(max.Key.ActionId);
                var arrow    = CreateArrow(pos, rotation, max.Value);
                objMap.Add(pos, arrow);
                dirMap.Add(pos, FollowAction(pos, max.Key.ActionId));
            }
            //Find cycles
            foreach (var cyclePos in dirMap.Where(kv => dirMap.ContainsKey(kv.Value) && kv.Key == dirMap[kv.Value]))
            {
                objMap[cyclePos.Key].GetComponentInChildren <Renderer>().material.color = Color.cyan;
            }


            EditorApplication.isPaused = true;
        }
Beispiel #3
0
        void Start()
        {
            StartPosistion = transform.position;
            _game          = FindObjectOfType <PongGame>();
            _ball          = FindObjectOfType <PongBall>();
            if (Side == Player.Player1)
            {
                _grid = new QGrid(16, transform,
                                  new GridSettings {
                    Offset = new Vector3(9.8f, 0, 0), ResolutionX = 1.28f, ResolutionY = 1.28f
                });
                _vect = Vector <float> .Build.Dense(new[] { 1f });

                QAIManager.InitAgent(this, new QOption {
                    LearningRate = 0.005f,
                    NetworkArgs  = new [] { new CNNArgs {
                                                FilterSize = 4, FilterCount = 1, PoolLayerSize = 2, Stride = 2
                                            } },
                    MaxPoolSize      = 2000,
                    BatchSize        = 2000,
                    EpsilonStart     = 0.5f,
                    EpsilonEnd       = 0.1f,
                    Discount         = 0.95f,
                    TrainingInterval = 20,
                    TrainingCycle    = 10,
                });

                if (QAIManager.CurrentMode == QAIMode.Learning || QAIManager.CurrentMode == QAIMode.Testing)
                {
                    Time.timeScale = 5f;
                }
            }
            StartCoroutine(Movement());
        }
Beispiel #4
0
 void FixedUpdate()
 {
     if (Side == Player.Player1)
     {
         _grid.DebugDraw(v => Color.Lerp(Color.black, Color.white, v / 250f));
         QAIManager.GetAction(GetState())();
     }
 }
Beispiel #5
0
    public static void OpenWindow(QAIOptionWindow owner, QAIManager manager)
    {
        var w = (BenchmarkDialog)GetWindow(typeof(BenchmarkDialog), true, "Benchmark");
        var p = w.position;

        w._optionWindow = owner;
        w._manager      = manager;
        p.x             = Screen.currentResolution.width / 2f - p.width / 2f;
        p.y             = Screen.currentResolution.height / 2f - p.height;
        p.height        = 100;
        w.position      = p;
        w.ShowPopup();
    }
Beispiel #6
0
    IEnumerator Spas()
    {
        while (true)
        {
            Action a = Brake;
            if (Input.GetKey(SpeederKey))
            {
                a = FullSpeed;
            }
            QAIManager.Imitate(this, GetState(), a);

            yield return(new WaitForFixedUpdate());
        }
    }
Beispiel #7
0
        private void Start()
        {
            _grid = new QGrid(13, transform, new GridSettings {
                NormalAxis = Axis.Y
            });
            _linearState = Vector <float> .Build.Dense(2);

            _history = new LinkedList <QState>();
            QAIManager.InitAgent(this, new QOption {
                NetworkArgs = new [] { new CNNArgs {
                                           FilterCount = 1, FilterSize = 1, PoolLayerSize = 1, Stride = 1
                                       } }
            });
        }
Beispiel #8
0
 public void FixedUpdate()
 {
     if (_testModel)
     {
         Instantiate(Resources.Load <ModelTest>("ModelTest"));
         _testModel = false;
     }
     _grid.DebugDraw(value => value == 0 ? Color.red : value == 1 ? Color.gray : Color.yellow);
     if (QAIManager.CurrentMode != QAIMode.Imitating)
     {
         var state = GetState();
         QAIManager.GetAction(state)();
         ArchiveState(state);
     }
     else
     {
         Action currentAction = null;
         if (Key(KeyCode.UpArrow, KeyCode.W))
         {
             currentAction = MoveUp;
         }
         if (Key(KeyCode.DownArrow, KeyCode.S))
         {
             currentAction = MoveDown;
         }
         if (Key(KeyCode.RightArrow, KeyCode.D))
         {
             currentAction = MoveRight;
         }
         if (Key(KeyCode.LeftArrow, KeyCode.A))
         {
             currentAction = MoveLeft;
         }
         if (currentAction != null)
         {
             QAIManager.Imitate(this, GetState(), currentAction);
         }
     }
 }
Beispiel #9
0
        public Action GetLearningAction(QState state)
        {
            if (!ModelReady())
            {
                Iteration = 1;
                Initialize(state.GridSize, state.VectorSize, state.Depth);
            }
            if (!_isFirstTurn)
            {
                if (state.IsTerminal)
                {
                    StoreSARS(new SARS(_prevState, _prevAction, state));
                    _isFirstTurn = true;
                    return(null);
                }
                if (state.Equals(_prevState) && (Discretize || (!Discretize && _stateCounter <= 10)))
                {
                    _stateCounter++;
                    return(_prevAction.Action);
                }
                StoreSARS(new SARS(_prevState, _prevAction, state));
            }
            var a = EpsilonGreedy(Epsilon(Iteration), state);

            _prevAction   = a;
            _prevState    = state;
            _stateCounter = 0;
            _isFirstTurn  = false;
            _trainingCounter++;
            if (_trainingCounter >= TrainingInterval && Time.timeScale != 0)
            {
                var ts = Time.timeScale;
                _trainingCounter = 0;
                Time.timeScale   = 0;
                QAIManager.RunCoroutine(PrioritySweeping ? RunPriotizedTraining(ts) : RunTraining(ts));
            }
            return(a.Action);
        }
Beispiel #10
0
    // Use this for initialization
    void Start()
    {
        GetComponentInChildren <SpriteRenderer>().shadowCastingMode = ShadowCastingMode.On;
        _onTrack           = true;
        _distanceTravelled = StartPosition;
        Track.GetPointAtDistance(_distanceTravelled);
        _grid = new QGrid(16, transform, new GridSettings {
            Offset = Vector3.up * 5.2f
        });
        _vector = Vector <float> .Build.Dense(10, 0);

        _velocityBin = new Bin(0.01f, 0.25f, 0.5f, 75f);
        _forceBin    = new Bin(0.01f, 0.25f, 0.5f, 75f);

        var options = new QOption {
            Discretize       = false,
            MaxPoolSize      = 2000,
            BatchSize        = 2000,
            EpsilonStart     = 0.7f,
            Discount         = 0.8f,
            TrainingInterval = 50,
            NetworkArgs      = new [] { new CNNArgs {
                                            FilterSize = 4, FilterCount = 1, PoolLayerSize = 2, Stride = 2
                                        } }
        };

        options.Discretize = false;

//		if(AiControlled || QAIManager.CurrentMode == QAIMode.Imitating) {
        QAIManager.InitAgent(this, options);
        if (QAIManager.CurrentMode == QAIMode.Learning)
        {
            Time.timeScale = 2.0f;
        }
//		}
        StartCoroutine(Spas());
    }
Beispiel #11
0
    // Update is called once per frame
    void FixedUpdate()
    {
        if (_onTrack)
        {
            if (AiControlled)
            {
                QAIManager.GetAction(GetState())();
            }

            UpdatePosistion();
        }
        LapNumber = (int)((_distanceTravelled - StartPosition) / Track.length);
        if (LapNumber != PrevLap && LapNumber != 0)
        {
            PrevLap = LapNumber;
            Debug.Log("Time: " + LapTime);
            Debug.Log("Score: " + Track.length / LapTime);
            LapTime = 0;
        }
        else
        {
            LapTime += Time.deltaTime;
        }
    }
Beispiel #12
0
 void CarOffTrack(int dir)
 {
     _onTrack = false;
     QAIManager.GetAction(GetState())();
     StartCoroutine(DerailAnimation(dir));
 }