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

📄 setup.c

📁 改编过的遗传算法
💻 C
字号:

/*
 *  GENESIS  Copyright (c) 1986, 1990 by John J. Grefenstette
 *  This program may be freely copied for educational
 *  and research purposes.  All other rights reserved.
 *
 *  file:	setup.c
 *
 *  purpose:	create an input file for GENESIS.
 *		Default values for input parameters are provided
 *		when the user gives a null response to a prompt.
 *
 *  modified:	feb. 1986
 *		10 sep 90: handle floating point option
 */

#include "define.h"

main()
{
	FILE *fp, *fopen();
	int i, j;
	char s[40];
	char ga[40];
	char infile[40];
	char templatefile[40];
	char format[20];
	char cmd[80];
	int bitlength;
	int interpret;
	int status;
	int genes;
	unsigned long values;
	unsigned long verify;
	double min;
	double max;
	int repetition;
	int ok;

	printf("File suffix []: ");
	getstring(s);
	if (strlen(s) == 0) {
		sprintf(infile, "in");
		sprintf(templatefile, "template");
	}
	else {
		sprintf(infile, "in.%s", s);
		sprintf(templatefile, "template.%s",s);
	}		

	printf("Floating point representation [y]: ");
	getstring(s);
	if (strlen(s) == 0 || strcmp(s, "y") == 0)
		interpret = 1;
	else
		interpret = 0;
		
	if (interpret)
	{
		bitlength = 0;
		
		/* get string interpretation */
		printf("number of genes: ");
		scanf("%d", &genes);
		
		fp = fopen(templatefile, "w");
		fprintf(fp, "genes: %d\n\n", genes);
		printf("\n");
		
		for (i=0; i<genes; )
		{
			printf("gene %d\n", i);
			printf("min: ");
			scanf("%lf", &min);
			printf("max: ");
			scanf("%lf", &max);
			ok = 0;
			while (!ok)
			{
				printf("values (must be a power of 2): ");
				scanf("%lu", &values);
				verify = 1L << ilog2(values);
				ok = verify == values;
				if (!ok)
					printf("bad choice for values\n");
			}
			printf("format string: ");
			scanf("%s", format);
			printf("repetition: ");
			scanf("%d", &repetition);
			printf("\n");

			for (j=0; j < repetition && i < genes; j++, i++)
			{
				fprintf(fp, "gene %d\n", i);
				fprintf(fp, "min: %g\n", min);
				fprintf(fp, "max: %g\n", max);
				fprintf(fp, "values: %lu\n", values);
				fprintf(fp, "format: %s\n", format);
				fprintf(fp, "\n");
				bitlength += ilog2(values);
			}
		}
		fclose(fp);

		/* kluge to get rid of left over LF */
		getchar();
	}

	if ((fp = fopen(infile, "w")) == NULL)
	{
		printf("can't open %s\n", infile);
		printf("Setup aborted.\n");
		exit(1);
	}

	setpar(fp, "Experiments", "1");
	setpar(fp, "Total Trials", "1000");
	setpar(fp, "Population Size", "50");
	if (interpret)
		fprintf(fp, "%18s = %d\n", "Structure Length", bitlength);
	else
		setpar(fp, "Structure Length", "30");
	setpar(fp, "Crossover Rate", "0.6");
	setpar(fp, "Mutation Rate", "0.001");
	setpar(fp, "Generation Gap", "1.0");
	setpar(fp, "Scaling Window", "5");
	setpar(fp, "Report Interval", "100");
	setpar(fp, "Structures Saved", "10");
	setpar(fp, "Max Gens w/o Eval", "2");
	setpar(fp, "Dump Interval", "0");
	setpar(fp, "Dumps Saved", "0");
	if (interpret)
		setpar(fp, "Options", "cefgl");
	else
		setpar(fp, "Options", "cel");
	setpar(fp, "Random Seed", "123456789");
	setpar(fp, "Rank Min", "0.75");
	fclose(fp);

#if TURBOC
	sprintf(cmd, "type %s", infile);
#else
	sprintf(cmd, "cat %s", infile);
#endif
	system(cmd);

	printf("Setup Done\n");
}

int ilog2(n)
	unsigned long n;
{
	int i;

	if (n <= 0)
	{
		printf("Help! values is %d, must be positive!\n", n);
		abort();
	}
	
 	i = 0;
	while ((int) (n & 1) == 0)
	{
		n >>= 1;
		i++;
	}
	return(i);
}


setpar(fp, prompt, defaultstring)
	FILE *fp;
	char *prompt;
	char *defaultstring;
{
	char s[80];
	printf("%s [%s]: ", prompt, defaultstring);
	getstring(s);
	if (strlen(s) == 0)
		strcpy(s, defaultstring);
	fprintf(fp, "%18s = %s\n", prompt, s);
}

#if TURBOC

getstring(s)
char s[];
{
	register int c;

	c = getchar();

	/* discard left over CR */
	if (c == '\r')
		c = getchar();

	/* read until next LF */
	while (c != '\n')
	{
		*s++ = c;
		c = getchar();
	}
	*s = '\0';
}

#else

getstring(s)
char s[];
{
	gets(s);
}

#endif

/*** end of file ***/

⌨️ 快捷键说明

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