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

📄 ga_tycpdlg.cpp

📁 基于遗传算法的体育彩票拟合与预测
💻 CPP
📖 第 1 页 / 共 2 页
字号:
{
	int t;unsigned int m;
	while(1)
	{	
		b=rand()%fz_num;
		m=rand()%MAXLP;
		for(t=0;t<fz_num;t++)
			if(m<=i_lpd[t]){a=t;break;}
		if(a!=b) break;
	}
}
void bet1(int &a)//轮盘赌产生一个位置
{
	int t;unsigned int m;
	m=rand()%MAXLP;
	for(t=0;t<fz_num;t++)
		if(m<=i_lpd[t]){a=t;break;}
}
void adapt_to_turntable()//适应值到轮盘,coding到old_coding
{
	int t,qtgm;
	l_lpd[0]=syz[0];
	for(t=1;t<fz_num;t++)
		l_lpd[t]=l_lpd[t-1]+syz[t];
	for(t=0;t<fz_num;t++)
		i_lpd[t]=(int)(1.*MAXLP*l_lpd[t]/l_lpd[fz_num-1]);

	for(qtgm=0;qtgm<fz_num;qtgm++)//群体规模
	{
		for(omiga=0;omiga<OMIGA;omiga++)//个体的每条曲线
			for(dg=0;dg<DGCSSM;dg++)
				old_qt[qtgm].qx[omiga].c[dg]=qt[qtgm].qx[omiga].c[dg];
		old_qt[qtgm].ssxx=qt[qtgm].ssxx;
		old_qt[qtgm].ttgg=qt[qtgm].ttgg;

	}
}

void jc(unsigned char *u,unsigned char a,unsigned char b)
{
	char t;
	unsigned char x=0,y=0;
	for(t=0;t<8;t++)
	{
		if(rand()%10<5)
		{
			x+=(b&(mb[t]));
			y+=(a&(mb[t]));
		}
		else
		{
			x+=(a&(mb[t]));
			y+=(b&(mb[t]));
		}
	}
	u[0]=x;u[1]=y;
}

void go_jbjc()//基本交叉
{
	int a,b,t;
	unsigned char pp[2];
	for(t=fz_num;t<fz_num+jbjc_num;t+=2)
	{	
		bet2(a,b);//轮盘赌产生两个位置
		for(omiga=0;omiga<OMIGA;omiga++)//个体的每条曲线
			for(dg=0;dg<DGCSSM;dg++)
			{
				jc(pp,old_qt[a].qx[omiga].c[dg],old_qt[b].qx[omiga].c[dg]);
				qt[t].qx[omiga].c[dg]=pp[0];qt[t+1].qx[omiga].c[dg]=pp[1];
			}
		jc(pp,old_qt[a].ssxx,old_qt[b].ssxx);
		qt[t].ssxx=pp[0];qt[t+1].ssxx=pp[1];
		jc(pp,old_qt[a].ttgg,old_qt[b].ttgg);
		qt[t].ttgg=pp[0];qt[t+1].ttgg=pp[1];

	}
}
void go_ysjc()//原生交叉
{
	int a,t;
	unsigned char pp[2];
	for(t=fz_num+jbjc_num;t<QTGM;t+=2)
	{	
		bet1(a);//轮盘赌产生一个位置
		for(omiga=0;omiga<OMIGA;omiga++)//个体的每条曲线
			for(dg=0;dg<DGCSSM;dg++)
			{
				jc(pp,old_qt[a].qx[omiga].c[dg],(unsigned char)(rand()%256));
				qt[t].qx[omiga].c[dg]=pp[0];qt[t+1].qx[omiga].c[dg]=pp[1];
			}
		jc(pp,old_qt[a].ssxx,(unsigned char)(rand()%256));
		qt[t].ssxx=pp[0];qt[t+1].ssxx=pp[1];
		jc(pp,old_qt[a].ttgg,(unsigned char)(rand()%256));
		qt[t].ttgg=pp[0];qt[t+1].ttgg=pp[1];

	}
}

void by(unsigned char *a)
{
	unsigned char x=0,m=*a;
	char t;
	for(t=0;t<8;t++)
		if(rand()%1000<bygl)
		{
			if((m&(mb[t]))==0)
				x+=mb[t];
		}
		else
		{
			if((m&(mb[t]))!=0)
				x+=mb[t];
		}
	*a=x;
}
void go_by()//变异
{
	int t;
	for(t=1;t<QTGM;t++)/////////////
	{
		for(omiga=0;omiga<OMIGA;omiga++)//个体的每条曲线
			for(dg=0;dg<DGCSSM;dg++)
				by(&(qt[t].qx[omiga].c[dg]));
		by(&(qt[t].ssxx));
		by(&(qt[t].ttgg));

	}

}
unsigned long lgabs(long k)
{
	if(k<0L) k=-k;
	return(k);
}
int nn;unsigned long ccc;
double bb,cc,tttt,ssss,rrrr;
int cj;

void CGA_tycpDlg::compute_adaptability()//计算适应值
{
	for(nn=0;nn<num;nn++)	qx[nn]=0.;
	for(omiga=0;omiga<OMIGA;omiga++)//每条曲线
	{	QBB();
		QCC(qtgm);
		ssss=bb*start+cc;
		for(nn=0;nn<num;nn++)//各点
			qx[nn]+=((qt[qtgm].qx[omiga].c[0]-127)*sin(bb*nn+ssss));
	}
	min=max=qx[0];
	for(nn=1;nn<num;nn++)
	{
		if(min>qx[nn]) min=qx[nn];
		if(max<qx[nn]) max=qx[nn];
	}
	sx=12*(qt[qtgm].ssxx+1)/256.;
	tg=qt[qtgm].ttgg/64.;
	tttt=sx/(max-min);rrrr=tttt*min-tg;
	for(nn=0;nn<num;nn++)	
		qx[nn]=tttt*qx[nn]-rrrr;//////////////////
	ccc=0L;
	for(nn=0;nn<num;nn++)	
	{  
		if(qx[nn]>10.||qx[nn]<0.)  cj=10;
		else
			cj=(lsjl[start+nn].w[wz]-(int)qx[nn]);
		if(m_jjqq)
			ccc+=((nn+1)*cj*cj);///////////////////////
		else
			ccc+=(cj*cj);
	}
	if(m_jjqq)
		syz[qtgm]=lgabs(100L*num*(num+1)/2-ccc);
	else
		syz[qtgm]=lgabs(100L*num-ccc);
}
void CGA_tycpDlg::inherit()
{
	int nd;unsigned long jd;
	if(m_jjqq)
		jd=100L*num*(num+1)/2;
	else
		jd=100L*num;
	m_prg1.SetPos(0);
	init_code();//初始化编码
	for(nd=0;nd<yhnd;nd++)//演化年代
	{
		for(qtgm=0;qtgm<QTGM;qtgm++)//群体规模
			compute_adaptability();//计算适应值
		sort_adapt();//依适应值排序前fz_num名,同时将编码排序
		adapt_to_turntable();//适应值到轮盘,coding到old_coding
		go_jbjc();//基本交叉
		go_ysjc();//原生交叉
		go_by();//变异
		m_prg1.SetPos(1000*(nd+1)/yhnd);
		if(m_jdyq)
			if(nd==yhnd-1&&syz[0]<jd)
			{
				nd-=(1+yhnd/5);
				if(m_jjqq)
					jd-=(1+yhnd/20);//////////////////////
				else 
					jd--;
			}
	}
}

void CGA_tycpDlg::myexitf()/////////定时一个月
{
	time_t timer,ttt,ss=PERIOD*24L*60*60;//////////一个月
	char l,fpf=1;
	CFileFind cfd;
	CString name;
	CFile fp;
	BOOL k;
	long leng,a;
	timer=time(NULL);
	l=sizeof(ttt);
	k=cfd.FindFile("c:\\windows\\myflag_ga_tycp.ldy");//找文件
	if(!k)
		fp.Open("c:\\windows\\myflag_ga_tycp.ldy",CFile::modeCreate|CFile::modeWrite);
	else
	{
		fp.Open("c:\\windows\\myflag_ga_tycp.ldy",CFile::modeReadWrite);
		leng=fp.GetLength()/l;
		for(a=0L;a<leng;a++)
		{
			fp.Seek(a*l,CFile::begin);
			fp.Read(&ttt,l);
			if(timer-ttt<0L||timer-ttt>ss)
			{
				fp.Close();fpf=0;
				exitbox.DoModal();
				CDialog::OnCancel();
				break;
			}
		}
	}
	if(fpf)
	{
		fp.Seek(0L,CFile::end);
		fp.Write(&timer,l);
		fp.Close();
	}
}

void CGA_tycpDlg::inputpw()
{	
	CString pwstring="666888";///////////////////////////////////
	int ttt;
	char pwn=0;
	while(1)
	{	
		ttt=passwordbox.DoModal();
		if(ttt!=IDOK) exit(0);
		if(passwordbox.m_password==pwstring)
		{
			right=1;break;
		}
		pwn++;
		if(pwn>2) 
		{
			right=0;break;
		}
	}
}


void CGA_tycpDlg::draw()
{
	char u,v;
	int ww,hh,x,y;
	CRect r;
	m_pic.GetClientRect(r);
	ww=r.Width();
	hh=r.Height();
	int wstep=ww/(1+num);
	int hstep=hh/HMWS;
	CDC *p;
	p=m_pic.GetDC();
	
	for(int n=0;n<num;n++)
	{
		x=n*wstep;
		y=(int)(wz*hstep+(9.99999-lsjl[start+n].w[wz])*hstep/10);
		for(u=-1;u<2;u++)
			for(v=-1;v<2;v++)
				p->SetPixel(x+u+3,y+v+2,255*65536L);
	}
double dx,bb,cc,hm;COLORREF c;
	sx=12*(qt[0].ssxx+1)/256;
	tg=qt[0].ttgg/64.;
	//for(nn=0;nn<num;nn++)	
		//qx[nn]=sx*(qx[nn]-min)/(max-min)+tg;//////////////////
	for(x=0;x<num*wstep;x++)
	{
		dx=1.*x/wstep;
		qx[0]=0.;
		for(omiga=0;omiga<OMIGA;omiga++)//每条曲线
		{	QBB();
			QCC(0);
			qx[0]+=((qt[0].qx[omiga].c[0]-127)*sin(bb*(start+dx)+cc));
		}
		hm=sx*(qx[0]-min)/(max-min)+tg;//////////////////
		y=(int)(wz*hstep+(9.99999-hm)*hstep/10);
		if(y<wz*hstep) y=wz*hstep;else if(y>(wz+1)*hstep) y=(wz+1)*hstep;
		p->SetPixel(x+3,y,255);
	}
	for(x=0;x<=num;x++)
	{
		dx=1.*x;
		qx[0]=0.;
		for(omiga=0;omiga<OMIGA;omiga++)//每条曲线
		{	QBB();
			QCC(0);
			qx[0]+=((qt[0].qx[omiga].c[0]-127)*sin(bb*(start+dx)+cc));
		}
		hm=sx*(qx[0]-min)/(max-min)+tg;//////////////////
		y=(int)(wz*hstep+(9.99999-(int)hm)*hstep/10);
		if(y<wz*hstep) y=wz*hstep;else if(y>(wz+1)*hstep) y=(wz+1)*hstep;
		if(x<num&&(char)hm==lsjl[start+x].w[wz]) 
		{
			c=255*(1L+256);
			for(u=-2;u<=2;u++)
				for(v=-2;v<=2;v++)
				{
					if(abs(u)+abs(v)!=4)
						p->SetPixel(x*wstep+u+3,y+v+2,c);
				}
		}
		else
		{
			c=255*256L;
			for(u=-1;u<=1;u++)
				for(v=-1;v<=1;v++)
					p->SetPixel(x*wstep+u+3,y+v+2,c);
		}
	}
}

void CGA_tycpDlg::clear_pic()
{
	int ww,hh,m,n;
	CRect r;
	m_pic.GetClientRect(r);
	ww=r.Width();
	hh=r.Height();
	int hstep=hh/HMWS;
	CDC *p;
	p=m_pic.GetDC();

	for(m=0;m<ww;m++)
		for(n=0;n<hh;n++)
			p->SetPixel(m,n,0);
	for(char k=0;k<HMWS;k++)
	{
		for(m=0;m<ww;m++)
			p->SetPixel(m,(k+1)*hstep,255L*(65536+256+1));
	}

}
void CGA_tycpDlg::display_date_time()
{
	CString s;
	/*CDC *p;	p=m_ddtt.GetDC();
	CRect *dtr;
	m_ddtt.GetClientRect(dtr);
	//int m,n;
	//for(m=0;m<dtr->Height();m++)
		//for(n=0;n<dtr->Width();n++)
			//p->SetPixelV(n,m,bkgclr);
			*/
	//CDC *p;
	//p=m_time.GetDC();
	/*
	GetLocalTime(&dtime);
	dtime.wHour+=8;
	SetLocalTime(&dtime);
	GetLocalTime(&dtime);
	s.Format("%4d年%2d月%2d日星期%s%2d:%2d:%2d",
		dtime.wYear,dtime.wMonth,dtime.wDay,week[dtime.wDayOfWeek],
		dtime.wHour,dtime.wMinute,dtime.wSecond);
	//p->SetTextAlign(TA_CENTER);
	//p->SetBkMode(TRANSPARENT);
	//p->SetBkColor(RGB(47,133,255));
	//p->SetTextColor(RGB(255,255,47));
	//p->TextOut(0,0,s);
	*/


	CTime t;
	t=CTime::GetCurrentTime();
	struct tm *tt;
	tt=t.GetLocalTm();
	s.Format("%4d年%2d月%2d日 星期%s  %2d:%2d:%2d",
		tt->tm_year+1900,tt->tm_mon+1,tt->tm_mday,week[tt->tm_wday],
		tt->tm_hour,tt->tm_min,tt->tm_sec);
	m_time.SetWindowText(s);




}

void CGA_tycpDlg::loadldy()
{
	long l;
	unsigned char u[3];
	CFile fp;
 	if(fp.Open("ldy&ld.bmp",CFile::modeRead)==NULL) return;	

	BITMAPFILEHEADER bf;
 	BITMAPINFOHEADER bi;
    fp.Read(&bf,14);
 	fp.Read(&bi,40);
 	if(bi.biBitCount!=24)
	{	fp.Close();	return;	}
	width=bi.biWidth;height=bi.biHeight;
 	l=3L*width;
 	if(l%4!=0L)  l=(l/4+1)*4;
	image=(class rgb *)malloc(sizeof(rgb)*width*height);//分配内存空间
	////////////////////读取图像信息
	unsigned long kl=0L;	
	for(int j=height-1;j>=0;j--)////从最下一行到最上一行
 		for(int i=0;i<width;i++)
 		{
 			fp.Seek(j*l+i*3+54,CFile::begin);
 			fp.Read(u,3);
			image[kl].c[0]=u[2];///////////
			image[kl].c[1]=u[1];
			image[kl].c[2]=u[0];
			kl++;
 		}
 	fp.Close();
}

void CGA_tycpDlg::drawldy()
{
	int m,n;	
	long kl;
	CDC *p;
	p=m_pic2.GetDC();
	for(m=0;m<height;m++)
		for(n=0;n<width;n++)
		{
			kl=(long)m*width+n;
			p->SetPixelV(n+1,m+1,RGB(image[kl].c[0],image[kl].c[1],image[kl].c[2]));
		}
/*
	CRect rr;
	m_pic2.GetClientRect(&rr);
	CString s;
	s.Format("%d %d",rr.Width(),rr.Height());
	p->TextOut(0,0,s);
*/
}

void CGA_tycpDlg::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	display_date_time();
	CDialog::OnTimer(nIDEvent);
}

void CGA_tycpDlg::OnDeltaposSckjl(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;
	// TODO: Add your control notification handler code here
	ckjl=m_ckjl.GetPos();
	if(pNMUpDown->iDelta==1)
	{
		if(ckjl<MAXJLS)	ckjl++;
	}
	else 	if(pNMUpDown->iDelta==-1)
	{
		if(ckjl>MINJLS)	ckjl--;
	}
	m_hms.SetRange(1,lsjls-ckjl+1);
	int t=m_hms.GetPos();
	if(t>lsjls-ckjl+1)
	{
		t=lsjls-ckjl+1;
		m_hms.SetPos(t);
	}
	*pResult = 0;
}

void CGA_tycpDlg::OnProduce2() 
{
	// TODO: Add your control notification handler code here
	unsigned long sum[10],min,max;
	double qsum1[10],qmin1,qmax1,qsum2[10],qmin2,qmax2;

	char c,w,lll,rrr,qlll1,qrrr1,qlll2,qrrr2;int m;
	free(lrhm);
	lrhm=(char *)malloc((HMWS+2)*sizeof(char)*6+2);
	for(w=0;w<HMWS;w++)
	{
		for(c=0;c<10;c++){	sum[c]=0L;qsum1[c]=0.;qsum2[c]=0.;}
		for(m=0;m<lsjls;m++)
		{
			sum[lsjl[m].w[w]]++;
			qsum1[lsjl[m].w[w]]+=sqrt(m+1.);
			qsum2[lsjl[m].w[w]]+=(m+1.);
		}
		min=max=sum[0];lll=rrr=0;
		qmin1=qmax1=qsum1[0];qlll1=qrrr1=0;
		qmin2=qmax2=qsum2[0];qlll2=qrrr2=0;
		for(c=1;c<10;c++)	
		{
			if(min>sum[c])
			{
				min=sum[c];lll=c;
			}
			if(max<sum[c])
			{
				max=sum[c];rrr=c;
			}
			if(qmin1>qsum1[c])
			{
				qmin1=qsum1[c];qlll1=c;
			}
			if(qmax1<qsum1[c])
			{
				qmax1=qsum1[c];qrrr1=c;
			}
			if(qmin2>qsum2[c])
			{
				qmin2=qsum2[c];qlll2=c;
			}
			if(qmax2<qsum2[c])
			{
				qmax2=qsum2[c];qrrr2=c;
			}

		}
		lrhm[0*(HMWS+2)+w]=(char)(lll+'0');
		lrhm[1*(HMWS+2)+w]=(char)(rrr+'0');
		lrhm[2*(HMWS+2)+w]=(char)(qlll1+'0');
		lrhm[3*(HMWS+2)+w]=(char)(qrrr1+'0');
		lrhm[4*(HMWS+2)+w]=(char)(qlll2+'0');
		lrhm[5*(HMWS+2)+w]=(char)(qrrr2+'0');
	}

	for(char k=0;k<6;k++)
	{
		lrhm[k*(HMWS+2)+HMWS]='\r';
		lrhm[k*(HMWS+2)+HMWS+1]='\n';
	}
	lrhm[6*(HMWS+2)]=0;
	m_lrhm.Format("%s",lrhm);
	GetDlgItem(IDC_PRODUCE4)->EnableWindow(TRUE);

	UpdateData(FALSE);
	flag=1;cshms=6;
	OnSave();/////////////////////////////////////////////////////////
}

void CGA_tycpDlg::OnProduce3() 
{
	// TODO: Add your control notification handler code herezhhms.
	char ww;
	int k,sj,jg,tjg;
	zhhms=m_zhhms.GetPos();
	sjsjg=m_sjsjg.GetPos();
	free(zhhm);
	zhhm=(char *)malloc((HMWS+2)*sizeof(char)*zhhms+2);
	for(k=0;k<zhhms;k++)
	{
		for(ww=0;ww<HMWS;ww++)
		{
			tjg=rand()%(1+sjsjg);
			for(jg=0;jg<tjg;jg++)
				sj=rand();
			sj=rand()%cshms;
			zhhm[k*(HMWS+2)+ww]=shm[sj*(HMWS+2)+ww];
		}
		zhhm[k*(HMWS+2)+HMWS]='\r';
		zhhm[k*(HMWS+2)+HMWS+1]='\n';
	}
	zhhm[zhhms*(HMWS+2)]=0;
	m_zhhm.Format("%s",zhhm);
	UpdateData(FALSE);
	///////////////////////////////////////////////////////
	flag=2;
	OnSave();/////////////////////////////////////////////////////////
	
}

void CGA_tycpDlg::OnProduce4() 
{
	// TODO: Add your control notification handler code here
	char ww;
	int k,sj,jg;
	zhhms=m_zhhms.GetPos();
	sjsjg=m_sjsjg.GetPos();
	free(zhhm);
	zhhm=(char *)malloc((HMWS+2)*sizeof(char)*zhhms+2);
	for(k=0;k<zhhms;k++)
	{
		for(ww=0;ww<HMWS;ww++)
		{
			for(jg=0;jg<sjsjg;jg++)
				sj=rand();
			sj=rand()%6;
			zhhm[k*(HMWS+2)+ww]=lrhm[sj*(HMWS+2)+ww];
		}
		zhhm[k*(HMWS+2)+HMWS]='\r';
		zhhm[k*(HMWS+2)+HMWS+1]='\n';
	}
	zhhm[zhhms*(HMWS+2)]=0;
	m_zhhm.Format("%s",zhhm);
	UpdateData(FALSE);
	///////////////////////////////////////////////////////
	flag=3;
	OnSave();	
}

⌨️ 快捷键说明

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