示例#1
0
    //-----------------------------------------------------
    //【関数定義】パラメータの初期化(担当:小林)
    //-----------------------------------------------------
    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;
            }
        }
    }
示例#2
0
    //-----------------------------------------------------
    //【関数定義】突然変異(担当:池田)
    //-----------------------------------------------------
     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);
    }