Example #1
0
void GenAlg::mutate(std::vector<float> &chromo)
{
	for(int i = 0; i < chromo.size(); ++i)
	{
		if(abs(small_rand()) < mutation_rate)
		{
			chromo[i] += small_rand() * my_params.perterbation;
		}
	}
}
Example #2
0
GenAlg::GenAlg(parameters &my_params , int number_weights) : my_params(my_params)
{
	pop_size = my_params.num_sweepers;
	mutation_rate = my_params.mutation_rate;
	crossover_rate = my_params.crossover_rate;
	weights_per_chromo = number_weights;
	total_fitness = 0;
	best_fitness = 0;
	average_fitness = 0;
	worst_fitness = 99999999;
	generation_count = 0;
	
	//generate random weights for initial population
	for(int i = 0; i < pop_size; ++i)
	{
		population.push_back(Genome());
		
		for(int j = 0; j < weights_per_chromo; ++j)
		{
			population[i].weights.push_back(small_rand());
		}
	}
}
Example #3
0
void AircraftSim::update_state()  {

  const GlidePolar &glide_polar = task_manager.get_glide_polar();
  const ElementStat stat = task_manager.get_stats().current_leg;
  
  switch (acstate) {
  case Cruise:
  case FinalGlide:
    if (positive(stat.solution_remaining.VOpt)) {
      state.TrueAirspeed = stat.solution_remaining.VOpt*speed_factor;
    } else {
      state.TrueAirspeed = glide_polar.get_VbestLD();
    }
    state.Vario = -glide_polar.SinkRate(state.TrueAirspeed)*parms.sink_factor;
    update_bearing();
    break;
  case Climb:
    state.TrueAirspeed = glide_polar.get_Vmin();
    bearing += Angle::degrees(fixed_20+small_rand());
    state.Vario = climb_rate*parms.climb_factor;
    break;
  };
  state.NettoVario = state.Vario+glide_polar.SinkRate(state.TrueAirspeed);
}
Example #4
0
void GenAlg::crossover(const std::vector<float> &mother, const std::vector<float> &father,
						std::vector<float> &child1, std::vector<float> &child2)
{
	if(abs(small_rand()) > crossover_rate || mother == father)
	{
		child1 = mother;
		child2 = father;
	}
	else
	{
		int crossover_point = rand() % weights_per_chromo - 1;
		
		for(int i = 0; i < crossover_point; ++i)
		{
			child1.push_back(mother[i]);
			child2.push_back(father[i]);
		}
		for(int i = crossover_point; i < mother.size(); ++i)
		{
			child1.push_back(father[i]);
			child2.push_back(mother[i]);
		}
	}
}
Example #5
0
void AircraftSim::update_bearing() {
  const ElementStat stat = task_manager.get_stats().current_leg;
  Angle bct = stat.solution_remaining.CruiseTrackBearing;

  if (goto_target && (awp>0)) {
    bearing = stat.solution_remaining.Vector.Bearing;

    if (enable_bestcruisetrack && (stat.solution_remaining.Vector.Distance>fixed_1000)) {
      bearing = bct;      
    }

  } else {
    bearing = state.Location.bearing(target());
  }

  if (positive(state.wind.norm) && positive(state.TrueAirspeed)) {
    const fixed sintheta = (state.wind.bearing-bearing).sin();
    if (fabs(sintheta)>fixed(0.0001)) {
      bearing +=
        Angle::radians(asin(sintheta * state.wind.norm / state.TrueAirspeed));
    }
  }
  bearing += Angle::degrees(small_rand());
}