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

📄 gareal.cpp

📁 用VC++变得实数编码遗传算法,还挺不错的
💻 CPP
字号:
// gareal.cpp: implementation of the gareal class.
//
//////////////////////////////////////////////////////////////////////

#include "gareal.h"
#include "stdio.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

gareal::gareal()
{
/*	double t=0.;
	nreal=1;
	vecreal=&t;*/
    nreal=1;
    vecreal=new double[nreal];
	for(int i=0;i<nreal;i++) vecreal[i]=0.;
	objv=0.;
	fitness=0.;
	ne=0;nle=0;nf=0;valid=1;state=-1;
}
gareal::gareal(int nr)
{
	if(nr>0&&nr<=150) nreal=nr;
	else nreal=1;
	vecreal=new double[nreal];
	for(int i=0;i<nreal;i++) vecreal[i]=0.;
	objv=0.;
	fitness=0.;
	ne=0;nle=0;nf=0;valid=1;state=-1;
}

gareal::gareal(int nr,double* r1)
{
	if(nr>0&&nr<=150) nreal=nr;
	else nreal=1;
	vecreal=new double[nreal];
	for(int i=0;i<nreal;i++) vecreal[i]=r1[i];
	objv=0.;
	fitness=0.;
	ne=0;nle=0;nf=0;valid=1;state=-1;
}

gareal::gareal(int nr,double r)
{
	if(nr>0&&nr<=150) nreal=nr;
	else nreal=1;
	vecreal=new double[nreal];
	for(int i=0;i<nreal;i++) vecreal[i]=r;
	objv=0.;
	fitness=0.;
	ne=0;nle=0;nf=0;valid=1;state=-1;
}

gareal::~gareal()
{
	if(nreal>0) delete []vecreal;
    if(ne>0) delete []pe;
	if(nle>0) delete []ple;
	if(nf>0) delete []pf;
}

int gareal::nReal()
{
	return nreal;
}

int gareal::nE()
{
	return ne;
}

int gareal::nF()
{
	return nf;
}

int gareal::nLe()
{
	return nle;
}

void gareal::nReal(int nr)
{
	if(nreal>0) delete []vecreal;
	if(nr>0&&nr<=150) 
	nreal=nr;
	else nreal=1;
	vecreal=new double[nreal];
	for(int i=0;i<nreal;i++) vecreal[i]=0.;
}

void gareal::nF(int nf1)
{
	if(nf>0) delete []pf;
	if(nf1>0&&nf1<=150) 
	nf=nf1;
	else nf=0;
	if(nf>0)
	{
	pf=new double[nf];
	for(int i=0;i<nf;i++) pf[i]=0.;
	}
}

void gareal::nE(int ne1)
{
	if(ne>0) delete []pe;
	if(ne1>0&&ne1<=150) ne=ne1;
	else ne=0;
	if(ne>0)
	{
	pe=new double[ne];
	for(int i=0;i<ne;i++) pe[i]=0.;
	}
}

void gareal::nLe(int nle1)
{
	if(nle>0) delete []ple;
	if(nle1>0&&nle1<=150) nle=nle1;
	else nle=0;
	if(nle>0)
	{
	ple=new double[nle];
	for(int i=0;i<nle;i++) ple[i]=0.;
	}
}

void gareal::vecReal(int n, double r1)
{
	if(n>=0&&n<nreal)  vecreal[n]=r1;
//	else  *vecreal=r1;
}

void gareal::vecReal(double* r1)
{
	for(int i=0;i<nreal;i++) vecreal[i]=r1[i];
}

void gareal::vecpe(int n, double e1)
{
	if(n>=0&&n<ne)  pe[n]=e1;
//	else  *vecreal=r1;
}

void gareal::vecpe(double* e1)
{
	for(int i=0;i<ne;i++) pe[i]=e1[i];
}

void gareal::vecpf(int n, double f1)
{
	if(n>=0&&n<nf)  pf[n]=f1;
//	else  *vecreal=r1;
}

void gareal::vecpf(double* f1)
{
	for(int i=0;i<nf;i++) pf[i]=f1[i];
}

void gareal::vecple(int n, double le1)
{
	if(n>=0&&n<nle)  ple[n]=le1;
//	else  *vecreal=r1;
}

void gareal::vecple(double* le1)
{
	for(int i=0;i<nle;i++) ple[i]=le1[i];
}

double gareal::vecReal(int n)
{
	/*if(n>=0&&n<nreal&&nreal>1) return vecreal[n];
	else if(nreal==1) return *vecreal;
	else return 0.;*/
    if(n>=0&&n<nreal) return vecreal[n];
    else return 0.;
}

double gareal::vecpe(int n)
{
    if(n>=0&&n<ne) return pe[n];
    else return 0.;
}

double gareal::vecpf(int n)
{
    if(n>=0&&n<nf) return pf[n];
    else return 0.;
}

double gareal::vecple(int n)
{
    if(n>=0&&n<nle) return ple[n];
    else return 0.;
}

double gareal::Fitness()
{
	return fitness;
}

void gareal::Fitness(double fs)
{
//	if(fs>=0) fitness=fs;
//	else fitness=0.;
	fitness=fs;
}

double gareal::Objv()
{
	return objv;
}

void gareal::Objv(double ob)
{
	objv=ob;
}

/*
void gareal::init()
{
	vecreal=new double[nreal];
	for(int i=0;i<nreal;i++) vecreal[i]=0.;
	objv=0.;
	fitness=0.;
}*/

void gareal::init(int nr,double* r1)
{
	if(nr>0&&nr<=150) nreal=nr;
	else nreal=1;
	vecreal=new double[nreal];
	for(int i=0;i<nreal;i++) vecreal[i]=r1[i];
	objv=0.;
	fitness=0.;
}

void gareal::init(int nr,double r)
{
	if(nr>0&&nr<=150) nreal=nr;
	else nreal=1;
	vecreal=new double[nreal];
	for(int i=0;i<nreal;i++) vecreal[i]=r;
	objv=0.;
	fitness=0.;
}

gareal& gareal::operator =(gareal& gr1)
{
	if(nreal>0)  delete [] vecreal;
    //vecreal=new double[nreal];
	nreal=gr1.nReal();
    vecreal=new double[nreal];
	for(int i=0;i<nreal;i++) vecreal[i]=gr1.vecReal(i);
	objv=gr1.Objv();
	fitness=gr1.Fitness();
	valid=gr1.Valid();
	state=gr1.State();
	if(gr1.nE()>0) 
	{
		nE(gr1.nE());
		for(i=0;i<gr1.nE();i++) pe[i]=gr1.vecpe(i);
	}
	if(gr1.nLe()>0) 
	{
		nLe(gr1.nLe());
		for(i=0;i<gr1.nLe();i++) ple[i]=gr1.vecple(i);
	}
	if(gr1.nF()>0) 
	{
		nF(gr1.nF());
		for(i=0;i<gr1.nF();i++) pf[i]=gr1.vecpf(i);
	}
	return *this;
}
gareal& gareal::operator =(gareal* gr1)
{
	if(nreal>0)  delete [] vecreal;
    //vecreal=new double[nreal];
	nreal=gr1->nReal();
    vecreal=new double[nreal];
	for(int i=0;i<nreal;i++) vecreal[i]=gr1->vecReal(i);
	objv=gr1->Objv();
	fitness=gr1->Fitness();
	valid=gr1->Valid();
	state=gr1->State();
	if(gr1->nE()>0) 
	{
		nE(gr1->nE());
		for(i=0;i<gr1->nE();i++) pe[i]=gr1->vecpe(i);
	}
	if(gr1->nLe()>0) 
	{
		nLe(gr1->nLe());
		for(i=0;i<gr1->nLe();i++) ple[i]=gr1->vecple(i);
	}
	if(gr1->nF()>0) 
	{
		nF(gr1->nF());
		for(i=0;i<gr1->nF();i++) pf[i]=gr1->vecpf(i);
	}
	return *this;
}

gareal::gareal(gareal &gr1)
{
	/*if(nreal>0)  delete [] vecreal;
	nreal=gr1.nReal();
    vecreal=new double[nreal];
	for(int i=0;i<nreal;i++) vecreal[i]=gr1.vecReal(i);
	objv=gr1.Objv();
	fitness=gr1.Fitness();*/
	*this=gr1;
}

 ostream& operator<<(ostream &os,gareal & ga1)
{
	 //os.width(8);
	 //os.precision(6);
	 for(int i=0;i<ga1.nReal();i++)
	 {
		 //os.width(8);
		 //os.precision(6);
		 os<<ga1.vecReal(i)<<"\t";
	 }
  //   os.width(10);
//	 os.precision(6);
	 if(ga1.State()>-1) 
	 {
		 os<<ga1.Fitness()<<"\t"<<ga1.Objv()<<"\t";	
		 if(ga1.nF()>0) 
		 {
			 for(int i=0;i<ga1.nF();i++)
				 os<<ga1.vecpf(i)<<"\t";
		 }
		 if(ga1.nE()>0) 
		 {
			 for(int i=0;i<ga1.nE();i++)
				 os<<ga1.vecpe(i)<<"\t";
		 }
		 if(ga1.nLe()>0) 
		 {
			 for(int i=0;i<ga1.nLe();i++)
				 os<<ga1.vecple(i)<<"\t";
		 }
//       os.width(2);
//		 os.precision(0);
		 if(ga1.nE()>0||ga1.nLe()>0) 
		 { 
			 os<<ga1.Valid()<<"\t";
		 }
		 //os<<ga1.State();
	 }
	 /*else 
	 { 
		 os.width(2);
		 os.precision(0);
		 os<<ga1.State()<<"\t";
	 }*/
     os<<endl;
	 return os;
}

 istream& operator>>(istream &is,gareal & ga1)
{
	 //os.width(8);
	 //os.precision(6);
	 double t;
	 for(int i=0;i<ga1.nReal();i++)
	 {
	//	 os.width(8);
	//	 os.precision(6);
		 is>>t;
		 ga1.vecReal(i,t);
	 }
  //   os.width(10);
//	 os.precision(6);
	 if(ga1.State()>-1) 
	 {
		 is>>t;
		 ga1.Fitness(t);
		 is>>t;
		 ga1.Objv(t);	
		 if(ga1.nF()>0) 
		 {
			 for(int i=0;i<ga1.nF();i++)
			 {is>>t;ga1.vecpf(i,t);}
		 }
		 if(ga1.nE()>0) 
		 {
			 for(int i=0;i<ga1.nE();i++)
			 { is>>t;ga1.vecpe(i,t);}
		 }
		 if(ga1.nLe()>0) 
		 {
			 for(int i=0;i<ga1.nLe();i++)
			 {is>>t;ga1.vecple(i,t);}
		 } 
	}
//       os.width(2);
//		 os.precision(0);
		 /*if(ga1.nE()>0||ga1.nLe()>0) 
		 { 
			 os>>
				 ga1.Valid();
		 }*/
	
	 /*else 
	 { 
		 os.width(2);
		 os.precision(0);
		 os>>ga1.State()>>"\t";
	 }*/
//     os>>endl;
	 return is;
 }

void myfwrite(FILE* fo,gareal & ga1)
{
	for(int i=0;i<ga1.nReal();i++)
		fprintf(fo,"%f8.1\t",ga1.vecReal(i));
	if(ga1.State()>-1) 
	{
		//os<<<<"\t"<<<<"\t";
		fprintf(fo,"%f12.1\t%f12.1\t",ga1.Fitness(),ga1.Objv());
		if(ga1.nF()>0) 
		{
			for(int i=0;i<ga1.nF();i++)
				fprintf(fo,"%f12.3\t",ga1.vecpf(i));//os<<ga1.vecpf(i)<<"\t";
		}
		if(ga1.nE()>0) 
		{
			for(int i=0;i<ga1.nE();i++)
				fprintf(fo,"%f12.3\t",ga1.vecpe(i));//os<<ga1.vecpe(i)<<"\t";
		}
		if(ga1.nLe()>0) 
		{
			for(int i=0;i<ga1.nLe();i++)
				fprintf(fo,"%f12.3\t",ga1.vecple(i));//os<<ga1.vecple(i)<<"\t";
		}
		if(ga1.nE()>0||ga1.nLe()>0) 
		{ 
			fprintf(fo,"%d\t",ga1.Valid());//os<<ga1.Valid()<<"\t";
		}
	}
	else 
	{ 
		fprintf(fo,"%d\t",ga1.State());
		//os<<ga1.State()<<"\t";
	}
	fprintf(fo,"\n");
}

⌨️ 快捷键说明

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