📄 ga12.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 + -