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

📄 geneticalgorithm.h

📁 一个使用遗传算法实现桥梁的最优化维护的代码
💻 H
字号:
#pragma once


#include <stdio.h>
#include "malloc.h"
#include <math.h>
#include "stdlib.h"


/* 全局变量 */
class CGeneticAlgorithm
{
	struct individual                       /* 个体*/
	{
		unsigned *chrom;                    /* 染色体 */
		double   fitness;                   /* 个体适应度*/
		double   varible;                   /* 个体对应的变量值*/
		int      xsite;                     /* 交叉位置 */
		int      parent[2];                 /* 父个体  */
		int      *utility;                  /* 特定数据指针变量 */
	};
	struct bestever                         /* 最佳个体*/
	{
		unsigned *chrom;                    /* 最佳个体染色体*/
		double   fitness;                   /* 最佳个体适应度 */
		double   varible;                   /* 最佳个体对应的变量值 */
		int      generation;                /* 最佳个体生成代 */
	};

public:
	CGeneticAlgorithm(void);
	~CGeneticAlgorithm(void);
public:
	
    /* 随机数发生器使用的静态变量 */
	double oldrand[55];
	int jrand;
	double rndx2;
	int rndcalcflag;
   /* 输出文件指针 */
	struct individual *oldpop;             /* 当前代种群 */
    struct individual *newpop;             /* 新一代种群 */
	struct bestever bestfit;               /* 最佳个体 */
	double sumfitness;                     /* 种群中个体适应度累计 */
	double max;                            /* 种群中个体最大适应度 */
	double avg;                            /* 种群中个体平均适应度 */
	double min;                            /* 种群中个体最小适应度 */
	float  pcross;                         /* 交叉概率 */
	float  pmutation;                      /* 变异概率 */
	int    popsize;                        /* 种群大小  */
	int    lchrom;                         /* 染色体长度*/
	int    chromsize;                      /* 存储一染色体所需字节数 */
	int    gen;                            /* 当前世代数 */
	int    maxgen;                         /* 最大世代数   */
	int    run;                            /* 当前运行次数 */
	int    maxruns;                        /* 总运行次数   */
	int    printstrings;                   /* 输出染色体编码的判断,0 -- 不输出, 1 -- 输出 */
	int    nmutation;                      /* 当前代变异发生次数 */
	int    ncross;                         /* 当前代交叉发生次数 */

	
	FILE *outfp ;
	/* 函数定义 */
	void advance_random();
	int flip(float);
	int rnd(int, int);
	void randomize();
	double randomnormaldeviate();
	float randomperc();
	float rndreal(float,float);
	void warmup_random(float);
	void initialize(),initdata(),initpop();
	void initreport(),generation(),initmalloc();
	void freeall(),nomemory(char *),report();
	void writepop(),writechrom(unsigned *);
	void preselect();
	void statistics(struct individual *);
	void title(),repchar (FILE *,char *,int);
	void skip(FILE *,int);
	int select();
	void objfunc(struct individual *);
	int crossover (unsigned *, unsigned *, unsigned *, unsigned *);
	void mutation(unsigned *);

	// 设置种群的大小
	void SetPopsize(int iVar);
	// 设置染色体长度
	void SetLchrom(int iVar);
	// 设置最大世代数
	void SetMaxgen(int iVar);
	// 设置交叉率
	void SetCross(float fVar);
	// 设置变异率
	void SetMutation(float fVar);
	// 运行遗传算法
	int  Run(void);
	// 初始化种群中个体染色体重1出现的概率
	float fInitPop;
	// 设置出示种群个体中染色体中1出现的概率
	void SetInitPop(float fVar);
};

⌨️ 快捷键说明

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