发布时间:2019-07-29 17:05:00
很急 大作业 做了好几天啦 啊啊啊 跪求帮帮忙
#include "function.h"
#include<stdlib.h>
double btod(bitset<16> b) //bitset to double
{
bool a=0;
if(b.test(15))
b.reset(15), a=1;
return a -static_cast <double>(b.to_ulong())/10000;
static_cast<double>(b.to_ulong())/10000;
}
double function (bitset<16>bx)//适应度函数
{
return 5-2*btod(bx)*btod(bx);
}
void gamble (bitset<16>*bx)//轮盘赌
{
bitset<16>tbx[10];
int i;
double p[10],sum=0;
for(i=0;i!=10;++i)
sum+=function(bx[i]);
for(i=0;i!=10;++i)
p[i]=function(bx[i])/sum;
for(i=1;i!=10;++i)
p[i]+=p[i-1];
p[9]=1;
for(i=0;i!=10;++i)
{
sum/*临时用作随机数存储器*/=(double)(rand()%10001)/10000;
for(int j=0;j!=10;++j)
if(sum<=p[j])
{
tbx[i]=bx[j];
break;
}
}
for(i=0;i!=10;++i)
bx[i]=tbx[i];
}
void overlap(bitset<16>*bx) //交叉
{
//交叉率:100%
bitset<16> tmp0,tmp1,tmp2,tmp3;
for(int i=0;i!=10;i+=2)
{
tmp0=bx[i]&0xff00;(显示这行有错误)
tmp1=bx[i+1]&0xff00;
tmp2=bx[i]&0x00ff;
tmp3=bx[i+1]&0x00ff;
bx[i]=tmp0|tmp3;
bx[i+1]=tmp1|tmp2;
}
}
void variation(bitset<16> *bx)?//变异率
//变异率:0.01
for (int i=0;i!=10;++i)
{
int p=rand()%101;
if(p==1)
{
int j=rand()%16;
p=rand()%2;
bx[i][j]=p;
}
}
}
显示错误no match for 'operator&' (operand types are 'std::bitset<16ull>' and 'int')
你的bx与tmp0都是bitset类型,系统本身没有对bitset & 这个运算的(&只能对整形及其兼容的类型进行运算)
你要自己实现两个bitset的&功能的