Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.03.2016, 18:43   #1
Teka_malai_DSB
Новичок
Джуниор
 
Регистрация: 10.03.2016
Сообщений: 1
По умолчанию Генетические Алгоритмы wxdev C++

Господа уважамые форумчане делал курсовую работу по данной теме, откопал в интернете задачу, но научный рук-ль сказал чтобы я закоментил все строчки в коде проги и составил условие задачи к этой программе, сам не толком не шарю в С++, но надеюсь на вашу помощь, естетественно не за бесплатно)
вот код прогрраммы
Код:
 #pragma warning(disable:4786)		// Отключаем отладочные преду-преждения
#include <iostream>				// Для cout и т.п
#include <vector>					// Для класса vector
#include <string>					// Для класса string
#include <algorithm>				// Для алгоритма сортировки
#include <time.h>					// Для случайных величин
#include <math.h>				// Для abs()	

#define GA_POPSIZE		2048		// Размер популяции
#define GA_MAXITER		16384		// Кол-во максимальных итераций
#define GA_ELITRATE		0.10f		// Элитарность
#define GA_MUTATIONRATE	0.25f		// Мутации
#define GA_MUTATION		RAND_MAX * GA_MUTATIONRATE
#define GA_TARGET		std::string("This is my course work ") // Резуль-тат которого желаем добиться

using namespace std;
struct ga_struct 	// Описание структуры ГА
{
string str;			// Строка			
	unsigned int fitness;	// Приспособленность		
};

typedef vector<ga_struct> ga_vector; 		// Для краткости
void init_population(ga_vector &population,
					 ga_vector &buffer ) 
{
	int tsize = GA_TARGET.size();
for (int i=0; i<GA_POPSIZE; i++) {
		ga_struct citizen;
		citizen.fitness = 0;
		citizen.str.erase();
		for (int j=0; j<tsize; j++)
			citizen.str += (rand() % 90) + 32;
population.push_back(citizen);
	}
buffer.resize(GA_POPSIZE);
}
void calc_fitness(ga_vector &population)
{
	string target = GA_TARGET;
	int tsize = target.size();
	unsigned int fitness;

	for (int i=0; i<GA_POPSIZE; i++) {
		fitness = 0;
		for (int j=0; j<tsize; j++) {
			fitness += abs(int(population[i].str[j] - target[j]));
		}
		
		population[i].fitness = fitness;
	}
}

bool fitness_sort(ga_struct x, ga_struct y) 
{ return (x.fitness < y.fitness); }

inline void sort_by_fitness(ga_vector &population)
{ sort(population.begin(), population.end(), fitness_sort); }

void elitism(ga_vector &population, 
				ga_vector &buffer, int esize )
{
	for (int i=0; i<esize; i++) {
		buffer[i].str = population[i].str;
		buffer[i].fitness = population[i].fitness;
	}
}

void mutate(ga_struct &member)
{
	int tsize = GA_TARGET.size();
	int ipos = rand() % tsize;
	int delta = (rand() % 90) + 32; 

	member.str[ipos] = ((member.str[ipos] + delta) % 122);
}

void mate(ga_vector &population, ga_vector &buffer)
{
	int esize = GA_POPSIZE * GA_ELITRATE;
	int tsize = GA_TARGET.size(), spos, i1, i2;

	elitism(population, buffer, esize);

	// Скрещивание оставшихся
	for (int i=esize; i<GA_POPSIZE; i++) {
		i1 = rand() % (GA_POPSIZE / 2);
		i2 = rand() % (GA_POPSIZE / 2);
		spos = rand() % tsize;

		buffer[i].str = population[i1].str.substr(0, spos) + 
			            population[i2].str.substr(spos, esize - spos);

		if (rand() < GA_MUTATION) mutate(buffer[i]);
	}
}

inline void print_best(ga_vector &gav)
{ cout << "Best: " << gav[0].str << " (" << gav[0].fitness << ")" << endl; }

inline void swap(ga_vector *&population,
				 ga_vector *&buffer)
{ ga_vector *temp = population; population = buffer; buffer = temp; }

int main()
{
	srand(unsigned(time(NULL)));

	ga_vector pop_alpha, pop_beta;
	ga_vector *population, *buffer;
init_population(pop_alpha, pop_beta);
	population = &pop_alpha;
	buffer = &pop_beta;

	for (int i=0; i<GA_MAXITER; i++) {
		calc_fitness(*population);	//Вычисляем приспособленности
		sort_by_fitness(*population);	 // Сортируем поппуляцию
		print_best(*population);		// Выводим лучшую поппуляцию

		if ((*population)[0].fitness == 0) break;

		mate(*population, *buffer);		// Спариваем  популяции
		swap(population, buffer);	// Очищаем буферы
	}
    system("Pause");			// Задержка экрана
	return 0;				
}
Teka_malai_DSB вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Генетические алгоритмы Олеся1992 Фриланс 2 06.04.2015 18:59
генетические алгоритмы Наталья72 Фриланс 4 30.05.2014 15:24
Генетические алгоритмы в криптографии 12345ab Помощь студентам 4 10.03.2013 20:37
Генетические алгоритмы [Поиск Литературы] MooNDeaR Свободное общение 1 17.01.2012 23:41
Нейронная сеть+генетические алгоритмы. gusluk Софт 0 22.04.2009 07:58