Esempio n. 1
0
        void Update()
        {
            _times += 1;
            int action;

            if (IsMultiSoulModel)
            {
                action = trainer.Predict(state / 10, lastReward: _lastReward, forceRandom: false);
            }
            else
            {
                var lastTotalReward = _lastReward.Select((t, i) => t * _soulWeights[i]).Sum();
                action = trainer.Predict(state / 10, lastReward: new[] { lastTotalReward }, forceRandom: false);
            }

            _lastReward[0] = RewardFunction0(state, action);
            _lastReward[1] = RewardFunction1(state, action);
            var totalReward = _lastReward.Select((t, i) => t * _soulWeights[i]).Sum();

            // 時々、どっちのSoulを優先するか入れ替える
            if (_times % 5000 == 1)
            {
                for (int i = 0; i < _soulWeights.Length; i++)
                {
                    if (_soulWeights[i] > 0.5f)
                    {
                        _soulWeights[i] = 0.1f;
                    }
                    else
                    {
                        _soulWeights[i] = 0.9f;
                    }
                }

                UnityEngine.Debug.Log("Time: " + _times);
                UnityEngine.Debug.Log("weights: " + string.Join(",", _soulWeights.Select(x => x.ToString()).ToArray()));
                if (IsMultiSoulModel)
                {
                    trainer.AlterRewardWeights(_soulWeights);
                }
            }

            if (_times % 1 == 0)
            {
                _logger.Write(new object[]
                {
                    "reward",
                    _lastReward[0],
                    _lastReward[1],
                    totalReward
                });
            }

            state = NextState(state, action);
            if (_times % 30 == (30 - 1))
            {
                trainer.TrainWithHistory();
            }
        }
Esempio n. 2
0
 public override void AlterSoulWeights(float[] soulWeights)
 {
     _trainer.AlterRewardWeights(soulWeights);
 }