private void UpdateLearning(InterPlatformPlayedGameStateInfo state, DateTime endTime) { double stateValue = 1 + 100 * (1 - (endTime - state.Link.StartTime).TotalSeconds / _model.TimeLimit); if (stateValue > 1) { stateValue *= (state.PlayedTime - state.Link.StartTime).TotalMilliseconds; } if (stateValue > 0) { if (_interplatformLessonsLearnt.ContainsKey(state.State.GetStateId())) { if (_interplatformLessonsLearnt[state.State.GetStateId()].ContainsKey(state.Move)) { _interplatformLessonsLearnt[state.State.GetStateId()][state.Move] = 0.99 * _interplatformLessonsLearnt[state.State.GetStateId()][state.Move] + 0.01 * stateValue; } else { _interplatformLessonsLearnt[state.State.GetStateId()].Add(state.Move, stateValue); } } else { _interplatformLessonsLearnt.Add(state.State.GetStateId(), new Dictionary <Moves, double>()); _interplatformLessonsLearnt[state.State.GetStateId()].Add(state.Move, stateValue); } } }
private double CalculateCollectibleDistanceValue(InterPlatformPlayedGameStateInfo state) { double agentXPosition = state.State.xPos; double agentYPosition = state.State.yPos; switch (state.Move) { case Moves.ROLL_LEFT: agentXPosition -= 2 * CircleWorldModel.DEFAULT_RADIUS; break; case Moves.ROLL_RIGHT: agentXPosition += 2 * CircleWorldModel.DEFAULT_RADIUS; break; case Moves.JUMP: agentYPosition -= 2 * CircleWorldModel.DEFAULT_RADIUS; break; default: break; } return(10000 * 1 / Utils.Utils.CalculateL2(agentXPosition, agentYPosition, state.Link.FromXPos, state.Link.FromNode.Platform.Top)); }