⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tselect.cpp

📁 一个遗传算法(GA)的实现。command line 的结构。输入输出格式请见命令行
💻 CPP
字号:
/*----------------------------------------------------------------------------*/
/* tselect.c - Tournament selection 										  */
/* Contributed by Hillol Kargupta, Dept of Engr. Mechanics, U. of Alabama	  */
/*----------------------------------------------------------------------------*/

#include "tselect.h"

#include <stdlib.h>
#include "external.h"	
#include "memory.h"
#include "random.h"

static int	*tourneylist, tourneypos, tourneysize;  
/* tournament list, position in list */

void t_select_memory()
{
	unsigned nbytes;
	//char	   *malloc();
	//int j;
	
	nbytes = popsize*sizeof(int);
	if((tourneylist = (int *) malloc(nbytes)) == NULL)
		//nomemory(stderr,"tourneylist");
		nomemory("tourneylist");
	
	if(numfiles == 0)
		fprintf(outfp," Enter tournament size for selection --> ");
	fscanf(infp,"%d", &tourneysize);
	if(tourneysize > popsize)
	{
		fprintf(outfp,"FATAL: Tournament size (%d) > popsize (%d)\n",
			tourneysize,popsize);
		exit(-1);
	}
	
}

void t_select_free()
{
	free(tourneylist);
}




void t_preselect()
{
	t_reset();
	tourneypos = 0;
}


int t_select()
{
	int pick, winner, i;
	
	/* If remaining members not enough for a tournament, then reset list */
	if((popsize - tourneypos) < tourneysize)
	{
		t_reset();
		tourneypos = 0;
	}
	
	/* Select tourneysize structures at random and conduct a tournament */
	winner=tourneylist[tourneypos];
	for(i=1; i<tourneysize; i++)
	{
		pick=tourneylist[i+tourneypos];
		if(oldpop[pick].fitness > oldpop[winner].fitness) winner=pick;
	}
	
	/* Update tourneypos */
	tourneypos += tourneysize; 
	return(winner);
}


void t_reset()	 
/* Shuffles the tourneylist at random */
{
	int i, rand1, rand2, temp;
	
	for(i=0; i<popsize; i++) tourneylist[i] = i;
	
	for(i=0; i < popsize; i++)
	{
		rand1=rnd(i,popsize-1);
		rand2=rnd(i,popsize-1);
		temp = tourneylist[rand1];
		tourneylist[rand1]=tourneylist[rand2];
		tourneylist[rand2]=temp;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -