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;
}
Example #4
0
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;
}
Example #5
0
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;
}