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

📄 ga12.cpp

📁 这是一个用C++编写的
💻 CPP
字号:
#include <stdlib.h>
#include "Genetic.hpp"
#include <iostream.h>
#include "GenDup.hpp"
#include "stdafx.h"
#include <math.h>
#include <time.h>


//派生自己的ga类
class MyGA :public Genetic
{
protected:
	virtual double EvalVal(INDIVIDUAL& );
public:
	MyGA(int n, int gl) : Genetic(n, gl){};
};

//评价函数
double MyGA :: EvalVal(INDIVIDUAL& ind)
{
 	const char* ch = ind.Chrom.GetGeneStr();
 	int n[32];//基因二进制代码

 	for (int i=0; i<=32; i++)
 	{
 		n[i] = ch[i] - 48;//根据asc编码直接从char型转换为int型
 	}
//  	double FTU[12] = {1,1,1,0,0,1,0,0,0,0,0,0};
//  	double pExpect[12];
//  	//各点的开关函数
//  	pExpect[0] = n[0] || n[1] || n[2] || n[3] || n[4] || n[5] || n[6] 
//  		|| n[7] || n[8] || n[9] || n[10] || n[11];
//  	pExpect[1] = n[1] || n[2] || n[3] || n[4] || n[5] || n[6] || n[7] 
//  		|| n[8] || n[9] || n[10] || n[11];
// 	pExpect[2] = n[2] || n[3] || n[4] || n[5] || n[6] || n[7] 
//  		|| n[8] || n[9] || n[10] || n[11];
//  	pExpect[3] = n[3] || n[4];
//  	pExpect[4] = n[4];
//  	pExpect[5] = n[5] || n[6] || n[7] || n[8] || n[9] || n[10] || n[11];
//  	pExpect[6] = n[6] || n[7] || n[8] || n[9];
//  	pExpect[7] = n[8] || n[9];
//  	pExpect[8] = n[8];
//  	pExpect[9] = n[9];
//  	pExpect[10] = n[10] || n[11];
//  	pExpect[11] = n[11];

	//IEEE 33节点配电网
	
// 支路号             1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32		
	double FTU[32] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
	double pExpect[32];
	//各点的开关函数
	pExpect[0] = n[0] || n[1] || n[2] || n[3] || n[4] || n[5] || n[6] || n[7] || n[8] || n[9] 
		|| n[10] || n[11] || n[12] || n[13] || n[14] || n[15] || n[16] || n[17] || n[18] || n[19]
		|| n[20] || n[21] || n[22] || n[23] || n[24] || n[25] || n[26] || n[27] || n[28] || n[29]
		|| n[30] || n[31] ;
	pExpect[1] = n[1] || n[2] || n[3] || n[4] || n[5] || n[6] || n[7] || n[8] || n[9] 
		|| n[10] || n[11] || n[12] || n[13] || n[14] || n[15] || n[16] 
		|| n[21] || n[22] || n[23] || n[24] || n[25] || n[26] || n[27] || n[28] || n[29]
		|| n[30] || n[31] ;
	pExpect[2] = n[2] || n[3] || n[4] || n[5] || n[6] || n[7] || n[8] || n[9] 
		|| n[10] || n[11] || n[12] || n[13] || n[14] || n[15] || n[16] 
		|| n[24] || n[25] || n[26] || n[27] || n[28] || n[29]
		|| n[30] || n[31] ;
	pExpect[3] = n[3] || n[4] || n[5] || n[6] || n[7] || n[8] || n[9] 
		|| n[10] || n[11] || n[12] || n[13] || n[14] || n[15] || n[16]  
		|| n[24] || n[25] || n[26] || n[27] || n[28] || n[29]
		|| n[30] || n[31] ;
	pExpect[4] = n[4] || n[5] || n[6] || n[7] || n[8] || n[9] 
		|| n[10] || n[11] || n[12] || n[13] || n[14] || n[15] || n[16] 
		|| n[24] || n[25] || n[26] || n[27] || n[28] || n[29]
		|| n[30] || n[31] ;
	pExpect[5] = n[5] || n[6] || n[7] || n[8] || n[9] 
		|| n[10] || n[11] || n[12] || n[13] || n[14] || n[15] || n[16]; 
	pExpect[6] = n[6] || n[7] || n[8] || n[9] 
		|| n[10] || n[11] || n[12] || n[13] || n[14] || n[15] || n[16];
	pExpect[7] = n[7] || n[8] || n[9] 
		|| n[10] || n[11] || n[12] || n[13] || n[14] || n[15] || n[16];
	pExpect[8] = n[8] || n[9] 
		|| n[10] || n[11] || n[12] || n[13] || n[14] || n[15] || n[16];
	pExpect[9] = n[9] 
		|| n[10] || n[11] || n[12] || n[13] || n[14] || n[15] || n[16];
	pExpect[10] = n[10] || n[11] || n[12] || n[13] || n[14] || n[15] || n[16] ;
	pExpect[11] = n[11] || n[12] || n[13] || n[14] || n[15] || n[16] ;
	pExpect[12] = n[12] || n[13] || n[14] || n[15] || n[16] ;
	pExpect[13] = n[13] || n[14] || n[15] || n[16] ;
	pExpect[14] = n[14] || n[15] || n[16] ;
	pExpect[15] = n[15] || n[16] ;
	pExpect[16] = n[16] ;
	pExpect[17] = n[17] || n[18] || n[19] || n[20] ;
	pExpect[18] = n[18] || n[19] || n[20] ;
	pExpect[19] = n[19] || n[20] ;
	pExpect[20] = n[20] ;
	pExpect[21] = n[21] || n[22] || n[23] ;
	pExpect[22] = n[22] || n[23] ;
	pExpect[23] = n[23] ;
	pExpect[24] = n[24] || n[25] || n[26] || n[27] || n[28] || n[29] || n[30] || n[31] ;
	pExpect[25] = n[25] || n[26] || n[27] || n[28] || n[29] || n[30] || n[31] ;		
	pExpect[26] = n[26] || n[27] || n[28] || n[29] || n[30] || n[31] ;		
	pExpect[27] = n[27] || n[28] || n[29] || n[30] || n[31] ;		
	pExpect[28] = n[28] || n[29] || n[30] || n[31] ;		
	pExpect[29] = n[29] || n[30] || n[31] ;		
	pExpect[30] = n[30] || n[31] ;		
	pExpect[31] = n[31] ;			

 	
	ind.Val = 0;
 	for ( i=0; i<32; i++)
		ind.Val = ind.Val + abs(FTU[i] - pExpect[i]) + 0.5 * n[i];
	ind.Val = 1000 - ind.Val;//转化为适合度越大越好

	return ind.Val;
}

//声明全局变量
extern long count ;//迭代次数
extern long BadCount;//收敛于错误解的次数
extern double BestVal;//最优解的适应值

//定义通讯函数
void MyCom(const char* gen,double fit,double val)
{

//	count++;
	
	char *strFile ;
    FILE *pF;
	strFile = "迭代过程.txt";
	pF = fopen(strFile, "a");//"r","w",a追加
	if(!pF) 
	{
		printf("\n\n!!!!!!!!  结果文件打开错误 !  请检查 !!!!!!!!!\n\n");
		return ;
	}
		
	
	fprintf(pF,"第%d次迭代\tBestFit=%f\tBest=",count,val);
//	for(int i=0; i<PDim; i++)
	fprintf(pF,"%s",gen);
	fprintf(pF,"\n");
    fclose(pF);
	
// 	cout<<"第"<<count<<"次迭代"<<"\t"<<"BestFit="<<val<<"\n";
// 	cout<<"Best"<<"\t";
// 	cout<<gen<<"\n";
// 	
// 	cout<<"\n";

	return ;
}

void main()
{
	char *strFile ;
    FILE *pF;
	strFile = "迭代过程.txt";
	pF = fopen(strFile, "w");//"r","w",a追加
	fprintf(pF,"\n================ 基于遗传算法的故障定位--迭代过程 =================\n\n");
	fclose(pF);

	clock_t Start,Finish;//计算程序运行时间
	Start = clock();

	double Duration;//平均运行时间(s)
	BadCount = 0;
	long TotalCount = 0;	
	const char* Best;
	
	for (int i = 0; i < 1000; i++)
	{
		MyGA MyGA32(100,32);
		count = 0;
//		MyGA32.SetComm(MyCom);
		Best = MyGA32.RunFitN(20);
		TotalCount = TotalCount + count;		
// 		cout << "第" << i+1 << "次运行程序" << "\t" << "迭代次数:" << count << "\t"
// 			<< "最优解适应值:" << BestVal << "\n" << "最优解:" << Best << "\n\n";	
	}

	Finish =clock();
	Duration = (double) (Finish - Start)/CLOCKS_PER_SEC/1000;

	cout << "总迭代次数:\t" << TotalCount <<"\n";
	cout << "未收敛于正确解次数:\t" << BadCount <<"\n";
	double Per = (double) (1000 - BadCount)/1000;
	cout << "正确率:\t" << Per <<"\n";
	cout << "平均运行时间:\t" << Duration << "秒\n";
}


⌨️ 快捷键说明

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