1 void Connect6Form::ComTurn() // 进行空位估值计算 2 { 3 for (i = 0 ;i <= 18 ;i ++ ) // 计算玩家在空格子上的获胜分数 4 for (j = 0 ;j <= 18 ;j ++ ) 5 { 6 pgrades[i][j] = 0 ; 7 if (board[i][j] == 2 ) 8 for (k = 0 ;k < 924 ;k ++ ) 9 if (ptable[i][j][k]) 10 { 11 switch (win[ 0 ][k]) 12 { 13 case 1 : 14 pgrades[i][j] += 5 ; 15 break ; 16 case 2 : 17 pgrades[i][j] += 50 ; 18 break ; 19 case 3 : 20 pgrades[i][j] += 100 ; 21 break ; 22 case 4 : 23 pgrades[i][j] += 600 ; 24 break ; 25 case 5 : 26 pgrades[i][j] += 800 ; 27 break ; 28 } 29 } 30 } 31 for (i = 0 ;i <= 18 ;i ++ ) // 计算计算机在空格子上的获胜分数 32 for (j = 0 ;j <= 18 ;j ++ ) 33 { 34 cgrades[i][j] = 0 ; 35 if (board[i][j] == 2 ) 36 if (ctable[i][j][k]) 37 { 38 switch (win[ 1 ][k]) 39 { 40 case 1 : 41 cgrades[i][j] += 5 ; 42 break ; 43 case 2 : 44 cgrades[i][j] += 50 ; 45 break ; 46 case 3 : 47 cgrades[i][j] += 100 ; 48 break ; 49 case 4 : 50 cgrades[i][j] += 200 ; 51 break ; 52 case 5 : 53 cgrades[i][j] += 400 ; 54 break ; 55 } 56 } 57 } 58 if ((computer == 1 &&! start) || computer == 2 ) // 取出 cgrades 与 pgrades 数组 59 中的最高分数 60 { 61 for (i = 0 ;i < 19 ;i ++ ) 62 for (j = 0 ;j < 19 ;j ++ ) 63 if (board[i][j] == 2 ) 64 { 65 if (cgrades[i][j] >= cgrade) 66 { 67 cgrade = cgrades[i][j]; 68 mat = i; 69 nat = j; 70 } 71 if (pgrades[i][j] >= pgrade) 72 { 73 pgrade = pgrades[i][j]; 74 mde = i; 75 } 76 } 77 if (cgrade >= pgrade) // cgrade>=pgrade 计算机攻击玩家 78 { 79 m = mat; // 落子在对计算机方有利的位置 80 n = nat; 81 } 82 else // 计算机防守 83 { 84 m = mde; // 落子在对玩家有利的位置,进行防御 85 n = nde; 86 } 87 } 88 }
空位估值算法
void ParticleFly()//粒子飞行寻优{ srand((unsigned)time(NULL));static int k=10;w=Wmax-k*(Wmax-Wmin)/Kmax; //惯性权重采用线性递减方法k++;for (int i=0;i=Parr.FitBest){ Parr.FitBest=Parr.Fit;for (int j=0;j Parr[GBIndex].FitBest&&i!=GBIndex){GBIndex=i;}}}
粒子群优化算法的寻优过程