/* (c) https://github.com/MontiCore/monticore */ package torcs.agent.network; component Reward { ports in Q^{29} state, in B isTerminal, out Q reward; implementation Math { Q speedX = state(22) * 300; Q angle = state(1) * 3.1416; Q trackPos = state(21); if speedX < 0 speedX = 0; end reward = (speedX * cos(angle)) - (speedX * sin(angle)) - (speedX * abs(trackPos)); if abs(trackPos) > 1.0 reward = -200; end for i=2:20 if abs(state(i)) > 1.0 reward = -200; end end } }