double EMSCRIPTEN_KEEPALIVE evaluate(int ptr, int length) { unsigned char* data = (unsigned char*) ptr; boost::random::mt19937 rng; rng.seed(ptr); ProtobufPacket<robogenMessage::EvaluationRequest> packet; std::vector<unsigned char> payloadBuffer; for (unsigned int i = ProtobufPacket<robogenMessage::EvaluationRequest>::HEADER_SIZE ; i < length; ++i) { payloadBuffer.push_back(data[i]); } packet.decodePayload(payloadBuffer); // --------------------------------------- // Decode configuration file // --------------------------------------- boost::shared_ptr<RobogenConfig> configuration = ConfigurationReader::parseRobogenMessage( packet.getMessage()->configuration()); if (configuration == NULL) { std::cerr << "Problems parsing the configuration file. Quit." << std::endl; return -1; } // --------------------------------------- // Setup environment // --------------------------------------- boost::shared_ptr<Scenario> scenario = ScenarioFactory::createScenario(configuration); if (!scenario) { return -1; } std::cout << "-----------------------------------------------" << std::endl; // --------------------------------------- // Run simulations // --------------------------------------- JSViewer* viewer = new JSViewer(); unsigned int simulationResult = runSimulations(scenario, configuration, packet.getMessage()->robot(), viewer, rng); delete viewer; if (simulationResult == SIMULATION_FAILURE) { return -1; } // --------------------------------------- // Compute fitness // --------------------------------------- double fitness; if (simulationResult == CONSTRAINT_VIOLATED) { fitness = MIN_FITNESS; } else { fitness = scenario->getFitness(); } std::cout << "Fitness for the current solution: " << fitness << std::endl << std::endl; return fitness; }
Scenarios generate(const Emma::RunState* state) { Logging::log(state, "generating data"); Scenarios simulations = runSimulations(state); std::cout << "\tcollect statistics from simulations" << std::endl; return simulations; }