c_cpp Genetic_Algorithm

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp Genetic_Algorithm相关的知识,希望对你有一定的参考价值。

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <ctime>
using namespace std;
#define MAX 20
#define MAX_S 0xFFFF
 
int ge[MAX][MAX_S];
int child1[MAX_S];
int child2[MAX_S];
int maxes[MAX];
char msg[MAX_S] = { 0 };
int tmp[MAX_S] = { 0 };

int main()
{
	cin.getline(msg, 0xFFFF);
	int msgsz = strlen(msg);
	int i, k, j;
	int min = 0, min2 = 0, minNumber = 0;

	srand(time(0));
	for (i = 0; i<MAX; i++)
		for (k = 0; k<msgsz; k++)
		ge[i][k] = 33 + rand() % 127;
	 
	for (j = 0;; j++)
	{
		memset(maxes, 0, sizeof(int) * MAX);
		for (i = 0; i<MAX; i++)
			for (k = 0; k<msgsz; k++)
				maxes[i] += (msg[k] - ge[i][k]) * (msg[k] - ge[i][k]);
		 
		if (j % 100 == 0)
		{
			for (i = 0; i<MAX; i++)
			{
				for (k = 0; k<msgsz; k++)
				/* ターミナルからBELLがなるときはコメントをはずす */
				if (ge[i][k] != 0x07) printf("%c", ge[i][k]);
				putchar('\n');
			}
		}
		for (i = 0; i<MAX; i++)
		{
			if (maxes[i] == 0)
			{
				for (k = 0; k<msgsz; k++)
				/*if (ge[i][k] != 0x07)*/ printf("%c", ge[i][k]);
				putchar('\n');
			}
		}
		 
		for (i = 0; i < MAX; i++)
		{
			min2 = min = maxes[i];
			for (k = i; k < MAX; k++)
			{
				min2 = maxes[k];
				if(min2 < min)
				{
					minNumber = k;
					min = min2;
					if( 0 == min ) 
					{
						cout << j << endl; 
						return 0;
					}
				}
			}
			memcpy(&ge[i], &ge[minNumber], sizeof(int) * msgsz);
		}

		// 一様交叉
		for (i = 0; i < msgsz; i++)
		{
			if( rand() % 2 ) child1[i] = ge[0][i];
			else child1[i] = ge[1][i];

			if( rand() % 2 ) child2[i] = ge[0][i];
			else child2[i] = ge[1][i];
		}
	
		memcpy(&ge[MAX-1 -0], child1, sizeof(int) * msgsz);
		memcpy(&ge[MAX-1 -1], child2, sizeof(int) * msgsz);
		memcpy(&ge[MAX-1 -2], child1, sizeof(int) * msgsz);
		 
		// 突然変異
		for (i = 0; i < MAX / 2; i++)
			ge[rand() % MAX][rand() % msgsz] += rand() % 2 ? -1 : 1;
	}
	 
	return 0;
} 
 
	

以上是关于c_cpp Genetic_Algorithm的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 200.岛屿数量

c_cpp 127.单词阶梯

c_cpp MOFSET

c_cpp MOFSET

c_cpp 31.下一个排列

c_cpp string→char *