コード例 #1
0
ファイル: ga.c プロジェクト: Mr-Phoebe/QT-learning
void cross()
{
	int i , j , k ;
	int mask1 , mask2;
	int a[SUM];
	for(i = 0 ; i < SUM ; i++)  a[i] = 0;
	k = 0;
	for(i = 0 ; i < SUM ; i++)
	{
		if( a[i] == 0)
		{
			for( ; ; )//随机找到一组未进行过交叉的染色体与a[i]交叉
			{
   				j = randbit(i + 1 , SUM - 1);
				if( a[j] == 0)	break;
			}
			if(randsign(crossp) == 1)		//按照crossp的概率对选择的染色体进行交叉操作 
			{
				mask1 = createmask(randbit(0 , 14));		//由ranbit选择交叉位 
				mask2 = ~mask1;				//形成一个类似 111000 000111之类的二进制码编码 
				gen_new[k].info = (gen_group[i].info) & mask1 + (gen_group[j].info) & mask2;
				gen_new[k+1].info=(gen_group[i].info) & mask2 + (gen_group[j].info) & mask1;
				k = k + 2;
			}
			else 		//不进行交叉 
			{
				gen_new[k].info=gen_group[i].info;
				gen_new[k+1].info=gen_group[j].info;
				k=k+2;
			}
			a[i] = a[j] = 1;
		}
	}
}
コード例 #2
0
// 1>随机选择将要进行交叉的染色体对,保证种群中的每个染色体都有唯一一次交叉的机会
// 2>按crossp的概率对选择的染色体对进行交叉操作
// 3>未进行交叉的染色体直接复制作为子染色体
void cross() { // 将父种群按概率crossp做交叉操作
  int i, j, k;
  int mask1, mask2;
  int a[SUM];
  for (i = 0; i < SUM; i++) a[i] = 0;
  k = 0;
  for (i = 0; i < SUM; i++) {
    if (a[i] == 0) {
      for ( ; ; ) {   // 随机找到一组未进行过交叉的染色体与a[i]交叉
        j = randbit(i + 1, SUM - 1);
        if (a[j] == 0) break;
      }
      if (randsign(crossp) == 1) {
        mask1 = createmask(randbit(0, 14));
        mask2 = -mask1;
        gen_new[k].info = (gen_group[i].info) & mask1 + (gen_group[j].info) & mask2;
        gen_new[k + 1].info = (gen_group[i].info) & mask2 + (gen_group[j].info) & mask1;
        k = k + 2;
      } else {
        gen_new[k].info = gen_group[i].info;
        gen_new[k + 1].info = gen_group[j].info;
        k = k + 2;
      }
      a[i] = a[j] = 1;
    }
  }
}
コード例 #3
0
/*----------------------------------------------------------------------------*/
int sobel_y_image(my1Image *src, my1Image *dst)
{
	int coeff[] = { -1,-2,-1, 0,0,0, 1,2,1 };
	my1Mask mask;

	if(createmask(&mask,3)==0x0)
		return -1;

	setmask(&mask,coeff);
	mask.orig_x = 1;
	mask.orig_y = 1;

	filter_image(src,dst,&mask);
	freemask(&mask);

	return 0;
}
コード例 #4
0
/*----------------------------------------------------------------------------*/
int laplace_image(my1Image *src, my1Image *dst)
{
	int coeff[] = { 0,-1,0, -1,4,-1, 0,-1,0 };
	my1Mask mask;

	if(createmask(&mask,3)==0x0)
		return -1;

	setmask(&mask,coeff);
	mask.orig_x = 1;
	mask.orig_y = 1;

	filter_image(src,dst,&mask);
	freemask(&mask);

	return 0;
}
コード例 #5
0
void VstXSynth::processReplacing(float **inputs, float **outputs, long sampleFrames)
{
	float *out1 = outputs[0];
	float *out2 = outputs[1];
	float *in1 = inputs[0];
	float *in2 = inputs[1];

	short mask = createmask(SAVE);
	bool or = SAVE[kOr]>0.5f;
	bool and = SAVE[kAnd]>0.5f;
	bool sig = SAVE[kSig]>0.5f;

	for(long i=0;i<sampleFrames;i++)
	{
		out1[i] = process1(in1[i],mask,or,and,sig);
		out2[i] = process1(in2[i],mask,or,and,sig);
	}
}