Move this to agent class?
| 44 | |
| 45 | // Move this to agent class? |
| 46 | float TrainingGround::EvaluateFitness(shared_ptr<Car> &car_agent) { |
| 47 | uint32_t nVroad = boost::get<shared_ptr<NFS3_4_DATA::TRACK>>(training_track->trackData)->col.vroadHead.nrec; |
| 48 | |
| 49 | int closestVroadID = 0; |
| 50 | float lowestDistanceSqr = FLT_MAX; |
| 51 | for (uint32_t vroad_Idx = 0; vroad_Idx < nVroad; ++vroad_Idx) { |
| 52 | INTPT refPt = boost::get<shared_ptr<NFS3_4_DATA::TRACK>>(training_track->trackData)->col.vroad[vroad_Idx].refPt; |
| 53 | glm::vec3 vroadPoint = glm::normalize(glm::quat(glm::vec3(-SIMD_PI / 2, 0, 0))) * |
| 54 | glm::vec3((refPt.x / 65536.0f) / 10.f, ((refPt.y / 65536.0f) / 10.f), |
| 55 | (refPt.z / 65536.0f) / 10.f); |
| 56 | |
| 57 | float distanceSqr = glm::length2(glm::distance(car_agent->car_body_model.position, vroadPoint)); |
| 58 | if (distanceSqr < lowestDistanceSqr) { |
| 59 | closestVroadID = vroad_Idx; |
| 60 | lowestDistanceSqr = distanceSqr; |
| 61 | } |
| 62 | } |
| 63 | |
| 64 | // Return a number corresponding to the distance driven |
| 65 | return (float) closestVroadID; |
| 66 | } |
| 67 | |
| 68 | void TrainingGround::InitialiseAgents(uint16_t populationSize) { |
| 69 | // Create new cars from models loaded in training_car to avoid VIV extract again, each with new RaceNetworks |
nothing calls this directly
no outgoing calls
no test coverage detected