📄 ga_tycpdlg.cpp
字号:
{
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 + -