//----------------------------------------------------- //【関数定義】パラメータの初期化(担当:小林) //----------------------------------------------------- void initParam() { param.genCount = 1; param.creatureParams = new CreatureParam[param.creatureCount]; //max_position_y = new float[param.creatureCount]; // 生物の各個体にパラメータを設定 for (int i = 0; i < param.creatureCount; ++i) { //max_position_y[i] = 0; param.creatureParams[i].finParams = new finParam[6]; // 関節は6個 for (int j = 0; j < 6; ++j) { finParam lp = param.creatureParams[i].finParams[j]; lp.RotRange = new Vector3[4]; if (j < 3) { // 4動作分の値を保持する for (int k = 0; k < 4; k++) { lp.RotRange[k] = new Vector3( Random.Range(-bodyRotateLimit.x, bodyRotateLimit.x), Random.Range(-bodyRotateLimit.y, bodyRotateLimit.y), Random.Range(-bodyRotateLimit.z, bodyRotateLimit.z)); } } else { for (int k = 0; k < 4; k++) { lp.RotRange[k] = new Vector3( Random.Range(-finRotateLimit.x, finRotateLimit.x), Random.Range(-finRotateLimit.y, finRotateLimit.y), Random.Range(-finRotateLimit.z, finRotateLimit.z)); } } param.creatureParams[i].finParams[j] = lp; } } }
//----------------------------------------------------- //【関数定義】突然変異(担当:池田) //----------------------------------------------------- protected CreatureParam Mutation(CreatureParam np) { // 関節のパラメータを1~4回ランダムで変更する // (同じ関節が複数回変更されることもある) int mpc = Random.Range(1, 4); for (int j = 0; j < mpc; ++j) { // パラメータを突然変異させる関節をランダムに選ぶ int lr = Random.Range(0, 6); finParam lp = np.finParams[lr]; lp.RotRange = new Vector3[4]; if (lr < 3) { for (int k = 0; k < 4; k++) { lp.RotRange[k] = new Vector3( Random.Range(-bodyRotateLimit.x, bodyRotateLimit.x), Random.Range(-bodyRotateLimit.y, bodyRotateLimit.y), Random.Range(-bodyRotateLimit.z, bodyRotateLimit.z)); } } else { for (int k = 0; k < 4; k++) { lp.RotRange[k] = new Vector3( Random.Range(-finRotateLimit.x, finRotateLimit.x), Random.Range(-finRotateLimit.y, finRotateLimit.y), Random.Range(-finRotateLimit.z, finRotateLimit.z)); } } np.finParams[lr] = lp; } return(np); }