...
来源:互联网 发布:js防水双组分配方 编辑:程序博客网 时间:2024/06/05 19:35
#include<iostream>
using namespace std;
struct person
{
int value[8][8];//静态评估表的
int sum; //静态评估表的所有数据之和
int num; //赢的盘数
};
int n=20;
struct person p[20];
void calcu();
void competition();
void selbest(int best[]);
void crossvar(int best[]);
void copyps(struct person q[20]);
int main()
{
//readdata();
//init();
calcu();
//output();
return 0;
}
void calcu()
{
int i;
int best[20]; //选优的结果。
for(i=0; i<500; i++)
{
//1、竞争
competition();
//2、选优(只选了标号)
selbest(best);
//3、交叉(现根据选优的结果复制样本)
crossvar(best);
}
}
void competition()
{
}
void selbest(int best[])
{
int q[20];
int i,j,sum;
int randnum;
sum=0;
for(i=0; i<20; i++)
{
sum=sum+p[i].num;
q[i]=sum;
}
for(i=0; i<n; i++)
{
randnum=rand()%1721;
j=0;
while(randnum>=q[j])
{
j++;
}
best[i]=j;
}
}
void crossvar(int best[])
{//先复制,再交叉后结果放在q[20]里,最后变异
int pos; //交叉的位置
int tmp;
struct person q[20];
int r,c,sum;
int i,j,k;
//1、复制
copyps(q);
pos=rand()%50 + 5;
//2、交叉
for(i=0; i<n; i=i+2)
{//交换best[i]和best[i+1]的尾部数据(pos位置以后所有的元素)
for(j=pos; j<64; j++)
{
r=j/8;
c=j%8;
tmp=q[i].value [r][c];
q[i].value [r][c]=q[i+1].value [r][c];
q[i+1].value [r][c]=tmp;
}
}
//3、填回到样本集并变异
for(i=0; i<n; i++)
{
sum=0;
for(j=0; j<8; j++)
{
for(k=0;k<8; k++)
{
if(rand()<0.002)
{
p[i].value [j][k]=q[i].value [j][k]+(rand()%5-2);
}
else
{
p[i].value [j][k]=q[i].value [j][k];
}
sum=sum+p[i].value [j][k];
}
}
p[i].sum =sum;
}
}
void copyps(struct person q[20])
{
int i,j,k;
for(i=0; i<n; i++)
{
for(j=0; j<8; j++)
{
for(k=0; k<8; k++)
{
q[i].value[j][k]=p[i].value [j][k];
}
}
}
}
- 程序员
- 程序员?
- 程序员
- 程序员
- 程序员
- 程序员
- 程序员
- 程序员
- 程序员
- 程序员
- 程序员
- 程序员
- 程序员
- 程序员
- 程序员
- 程序员
- 程序员
- 程序员
- 深入理解字符串处理函数 strlen() strcpy() strcat() strcmp()
- jquery插件开发入门
- Panda总结
- 第十周 项目1
- papers for metric learning
- ...
- Bannear实现一个详情页面
- TCP建立连接的三次握手和释放连接的四次挥手
- c# 判断时间是否在 某一时间段内
- sscanf--格式化转换字符数组
- 常见浏览器兼容性问题与解决方案
- index range scan,index fast full scan,index skip scan
- 第12周 【项目三】 Floyd算法验证
- 第十三周项目3-分块查找