FitnessP SymbRegEvalOp::evaluate(IndividualP individual) { // stvaranje zeljenog Fintess objekta: FitnessP fitness = static_cast<FitnessP> (new FitnessMin); // dohvat genotipa jedinke TreeP tree = boost::dynamic_pointer_cast<Tree::Tree> (individual->getGenotype()); //Tree* tree = (Tree*) individual->at(0).get(); double value = 0; for(uint i = 0; i < nSamples; i++) { tree->setTerminalValue("X", &domain[i]); /* for(uint term = 0; term < tree->primitiveSet_->terminalSet.size(); term++) tree->primitiveSet_->terminalSet[term]->value = domain[i]; */ double result; tree->execute(&result); value += fabs(codomain[i] - result); } fitness->setValue(value); // primjer koristenja vlastitog tipa podatka za terminale //my_type x; //x.b = true; //x.v = false; //tree->setTerminalValue("term", &x); //tree->execute(&x); //fitness->setValue(x.v); return fitness; }
FitnessP ModularRobotEvalOp::evaluate(IndividualP individual) { //-- Create a fitness object to maximize the objective (distance travelled in m) FitnessP fitness (new FitnessMax); //-- We get the genotype: FloatingPoint::FloatingPoint* genotype = (FloatingPoint::FloatingPoint*) individual->getGenotype(0).get(); //-- Value to store the fitness (distance travelled) double fitness_value = 0; //-- Here we record the genotypes on a gait table file: std::cout << "[Evolve] Convert to gait table!" << std::endl; genotypeToRobot( genotype ); //-- Reset the robot: std::cout << "[Evolve] Reset!" << std::endl; robotInterface->reset(); //-- Run the robot: std::cout << "[Evolve] Run!" << std::endl; //-- Here you put the main loop unsigned long elapsed_time = 0; //-- Should be in uS unsigned long max_time_us = max_runtime*1000; joint_values.clear(); for (int i = 0; i < (int) n_modules; i++) joint_values.push_back(0); while( elapsed_time < max_time_us ) { //-- Update joint values for ( int i = 0; i < (int) oscillators.size(); i++) joint_values[i] = oscillators[i]->calculatePos(elapsed_time); //-- Send joint values robotInterface->sendJointValues(joint_values, timestep); elapsed_time+=(unsigned long) (timestep*1000); //std::cout << "[Evolve] Time: " << elapsed_time << "us" << std::endl; } //-- Select the fitness value (distance travelled in m) fitness_value = robotInterface->getTravelledDistance(); //-- Set the fitness value fitness->setValue( fitness_value); std::cout << "[Evolve] Return!" << std::endl; return fitness; }
FitnessP CgdaPaintFitnessFunction::evaluate(IndividualP individual) { // Evaluation creates a new fitness object using a smart pointer // in our case, we try to minimize the function value, so we use FitnessMin fitness (for minimization problems) FitnessP fitness (new FitnessMin); // we define FloatingPoint as the only genotype (in the configuration file) FloatingPoint::FloatingPoint* gen = (FloatingPoint::FloatingPoint*) individual->getGenotype().get(); // we implement the fitness function 'as is', without any translation // the number of variables is read from the genotype itself (size of 'realValue' vactor) double value =0; value= getCustomFitness(gen->realValue); fitness->setValue(value); return fitness; }
FitnessP GAFitnessEvalOp::evaluate(IndividualP individual) { FitnessP fitness = static_cast<FitnessP> (new FitnessMin); double value = infinitePrice; BinaryP bin = boost::dynamic_pointer_cast<Binary> (individual->getGenotype()); if(selector_.isInProgress()) { selector_.clearSelection(); for(uint i = 0; i < bin->realValue.size(); ++i) { // int intVal = (int) bin->realValue.at(i); // if(intVal < 0) intVal = 0; int intVal = getSelectCount(bin, i, ubound_); // debugFitnessElements(bin->realValue.at(i), ubound_, // selector_.getInitialSelectLimit(selector_.getOffer(i)), intVal); selector_.selectOffer(selector_.getOffer(i), intVal); } if(selector_.isCurrentSelectionFeasible()) { value = selector_.selection().getTotalPrice(); selector_.updateBestSelection(selector_.selection()); } else { const int C = 100; int flow = selector_.calcMaxFlow(); int total = selector_.total_disj_req_quantity(); value = selector_.worst_acceptable_price()+1 + C*(total*total - flow*flow); double d = 0; for(uint i = 0; i < bin->realValue.size(); ++i) { const PurchasableOffer& offer = selector_.getOffer(i); // d += pow(selector_.selection().getOfferCount(offer), 2.0); d += pow(selector_.getInitialSelectLimit(offer) -selector_.selection().getOfferCount(offer), 2.0); } value += C - log(1+d); } } fitness->setValue(value); return fitness; }
FitnessP MazeEnv::evaluate(IndividualP ind) { FitnessP fitness = static_cast<FitnessP> (new FitnessMax); fitness->setValue(0); int move = 0; BitStringP bstring = boost::dynamic_pointer_cast<BitString::BitString> (ind->getGenotype(1)); //TODO napravit neku metodu za pretvaranje bitstringa u int i obratno for (int i =0; i < 3; i++){ move *= 2; if (bstring->bits[i]) move += 1; } //make move only if there is no wall on target location pair<int, int> pos = makeMove(position, move); if (getLocation(pos) != MZ_WALL) { position = pos; if (changePositionEvent) changePositionEvent(pos); } return fitness; }