Beispiel #1
0
    gene mate(gene father, gene mother)
    {
        gene baby = new gene();

        baby.generation = Mathf.Max(father.generation, mother.generation) + 1;
        baby.gender     = UnityEngine.Random.Range(0, 2);
        baby.size       = (father.size + mother.size) / 2;
        //neuro crossover
        baby.neuro_network = new neuron[N_HIDDEN_LAYERS + 1][];
        int connections_count   = N_HIDDEN_LAYERS * 6 * 6 + 3 * 6;
        int crossover           = UnityEngine.Random.Range(1, connections_count);
        int father_first        = UnityEngine.Random.Range(0, 2);
        int crossover_countdown = crossover;

        for (int i = 0; i < N_HIDDEN_LAYERS + 1; i++)              //each layer
        {
            for (int j = 0; j < baby.neuro_network[i].Length; j++) //each neuron
            {
                for (int k = 0; k < baby.neuro_network[i][j].conn_weight.Length; k++)
                {
                    if ((crossover_countdown > 0 && father_first == 1) || (crossover_countdown < 0 && father_first == 0))//father section
                    {
                        baby.neuro_network[i][j].conn_weight[k] = father.neuro_network[i][j].conn_weight[k];
                    }
                    else
                    {
                        baby.neuro_network[i][j].conn_weight[k] = mother.neuro_network[i][j].conn_weight[k];
                    }
                    crossover_countdown--;
                }
            }
        }
        return(baby);
    }
Beispiel #2
0
        private void search_6_Click(object sender, EventArgs e)
        {
            if (zupu_id3.Text == String.Empty)
            {
                MessageBox.Show("请输入族谱ID!", "警告", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation);
                return;
            }
            String sql = "select count(*) from Member  where Genealogy_ID = '" + zupu_id3.Text + "'";
            gene   x   = new gene();

            x.ExecuteQuery(sql);
            DataTable d1 = new DataTable();

            d1 = x.ExecuteQuery(sql);

            if (d1 != null && d1.Rows.Count > 0)
            {
                MessageBox.Show("查询成功!", "操作结果", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
                jz_num.Text = d1.Rows[0][0].ToString();
            }
            else
            {
                MessageBox.Show("查不到此族谱人数,请重新输入族谱ID", "温馨提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation);
            }
        }
Beispiel #3
0
        private void search_3_Click(object sender, EventArgs e)
        {
            if (zupu_id1.Text == String.Empty || daishu_n.Text == String.Empty)
            {
                MessageBox.Show("请输入族谱ID和代数!", "警告", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation);
                return;
            }
            String    sql = "SELECT Member_ID,Genealogy_ID,name,sex,birth,spouse_name,spouse_state  FROM [Member] WHERE Genealogy_ID='" + zupu_id1.Text + "'and number='" + daishu_n.Text + "'";
            gene      r1  = new gene();
            DataTable d1  = new DataTable();  

                d1 = r1.ExecuteQuery(sql);
            if (d1 != null && d1.Rows.Count > 0)
            {
                MessageBox.Show("查询成功!", "操作结果", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
                dataGridView2.DataSource = d1;
                dataGridView2.Columns[0].HeaderCell.Value = "成员ID";
                dataGridView2.Columns[1].HeaderCell.Value = "族谱ID";
                dataGridView2.Columns[2].HeaderCell.Value = "姓名";
                dataGridView2.Columns[3].HeaderCell.Value = "性别";
                dataGridView2.Columns[4].HeaderCell.Value = "出生日期";
                dataGridView2.Columns[5].HeaderCell.Value = "配偶姓名";
                dataGridView2.Columns[6].HeaderCell.Value = "配偶状态";
            }
            else
            {
                MessageBox.Show("查找不到此族谱的n代成员,请重新输入", "温馨提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation);
            }
        }
Beispiel #4
0
        private void serach_peiou_Click(object sender, EventArgs e)
        {
            if (peiou.Text == String.Empty)
            {
                MessageBox.Show("请输入成员ID!", "温馨提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation);
                return;
            }
            String sql = "select spouse_name,spouse_state from Member  where Member_ID = '" + peiou.Text + "'";
            gene   x   = new gene();

            x.ExecuteQuery(sql);
            DataTable d1 = new DataTable();

            d1 = x.ExecuteQuery(sql);

            if (d1 != null && d1.Rows.Count > 0)
            {
                MessageBox.Show("查询成功!", "操作结果", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
                peiou_name.Text  = d1.Rows[0]["spouse_name"].ToString();
                peiou_state.Text = d1.Rows[0]["spouse_state"].ToString();
            }
            else
            {
                MessageBox.Show("查找不到此成员及其配偶,请重新输入成员ID", "温馨提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation);
            }
        }
Beispiel #5
0
        private void search_5_Click(object sender, EventArgs e)
        {
            if (zupu_id2.Text == String.Empty)
            {
                MessageBox.Show("请输入族谱ID!", "温馨提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation);
                return;
            }
            String sql = "select MAX(number) from Member  where Genealogy_ID = '" + zupu_id2.Text + "'";
            gene   x   = new gene();

            x.ExecuteQuery(sql);
            DataTable d1 = new DataTable();  

                d1 = x.ExecuteQuery(sql);

            if (d1 != null)
            {
                MessageBox.Show("查询成功!", "操作结果", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
                zupu_daishu.Text = d1.Rows[0][0].ToString();
            }
            else
            {
                MessageBox.Show("查找不到此族谱代数,请重新输入族谱ID", "温馨提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation);
            }
        }
Beispiel #6
0
        private void button1_Click(object sender, EventArgs e)
        {
            String str1 = 注册账号.Text;       //form里面有输入账号密码的文本框,这一步是获取其内容;
            String str2 = 注册密码.Text;
            String str3 = 族谱号.Text;
            String str4 = null;

            if (str3.Length == 0)
            {
                str4 = "insert into [User] values('" + str1 + "','" + str2 + "',NULL)";
            }
            else
            {
                str4 = "insert into [User] values('" + str1 + "','" + str2 + "','" + str3 + "')";
            }
            gene r2 = new gene();             //用来连接数据库的类gene,所以用其创建对象;
            int  d2 = r2.ExecuteUpdate(str4); //执行后会有返回值,是int类型,如果执行失败会返回0;

            if (d2 != 0)
            {
                MessageBox.Show("注册成功!", "添加结果",
                                MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
                Form 登录 = new 登录界面();     //这两行代码是实现界面跳转;
                Hide();
            }
            else
            {
                MessageBox.Show("信息错误,\n请重新输入!", "添加结果",
                                MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
            }
        }
Beispiel #7
0
        private void search_Click(object sender, EventArgs e)
        {
            String    str1 = textinput.Text;
            String    str2 = "SELECT Member_ID,Father_ID,Genealogy_ID,name,sex,birth,death,birthplace,address,spouse_name,spouse_state,number  FROM [Member] WHERE Member_ID='" + str1 + "'";
            gene      r1   = new gene();          //我写的那个用来连接数据库的类是ResM,所以用其创建对象;
            DataTable d1   = new DataTable();     //因为查询是会有结果返回的,所以需要用DataTable的对象来承接返回的结果。

                d1 = r1.ExecuteQuery(str2);
            if (d1 != null && d1.Rows.Count > 0)
            {
                text成员ID.Text = d1.Rows[0]["Member_ID"].ToString();    //查询结果
                text族谱ID.Text = d1.Rows[0]["Genealogy_ID"].ToString();
                text父亲ID.Text      = d1.Rows[0]["Father_ID"].ToString();
                text姓名.Text        = d1.Rows[0]["name"].ToString();
                sex1.Text          = d1.Rows[0]["sex"].ToString();
                text世代.Text        = d1.Rows[0]["number"].ToString();
                dateTimebirth.Text = d1.Rows[0]["birth"].ToString();
                dateTimedeath.Text = d1.Rows[0]["death"].ToString();
                textplace.Text     = d1.Rows[0]["birthplace"].ToString();
                textaddress.Text   = d1.Rows[0]["address"].ToString();
                spouse_name.Text   = d1.Rows[0]["spouse_name"].ToString();
                spouse_state.Text  = d1.Rows[0]["spouse_state"].ToString();
            }
            else
            {
                MessageBox.Show("查不到此成员,请重新输入成员ID", "温馨提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation);
            }
        }
Beispiel #8
0
    void spawnCar(int id, gene brain)
    {
        CarAIControl car = Instantiate(carPrefab, transform.position, Quaternion.identity);

        car.cpm     = this.cpm;
        car.brain   = brain;
        car.trainer = this;
        car.id      = id;
    }
Beispiel #9
0
    void submit_fitness_score(KeyValuePair <GameObject, float> param)
    {
        gene test = new gene();

        test.fitness = 0;
        int gene_index = testants_ID[param.Key];

        gene_pool[gene_index].set_fitness(param.Value);//
    }
Beispiel #10
0
 public static byte[] change(gene gene)
 {
     try
     {
         var dv  = JsonConvert.SerializeObject(gene);
         var dv2 = Encoding.UTF8.GetBytes(dv);
         return(dv2);
     }
     catch
     {
         throw new Exception("lhkrkbjjjfjbfjnjkfjbnrkjfnbnf");
     }
 }
Beispiel #11
0
    // Start is called before the first frame update
    void Start()
    {
        startTime   = Time.time;
        lastCpTime  = Time.time;
        carCollider = GetComponent <BoxCollider2D>();
        if (brain is null)
        {
            int[] layers = { 4, 5, 4, 3, 2 };
            brain = new gene(layers);
        }

        brainInput = new float[4];
        results    = new float[2];
    }
Beispiel #12
0
        private void tabControl1_Click(object sender, EventArgs e)
        {
            String    str1 = 登录界面.form1.登录账号.Text;
            String    str2 = "select genealogy_ID from [User] WHERE User_ID='" + str1 + "'";
            gene      r1   = new gene();      //用来连接数据库的类gene,所以用其创建对象;
            DataTable d1   = new DataTable(); //因为查询是会有结果返回的,所以需要用DataTable的对象来承接返回的结果。

            d1 = r1.ExecuteQuery(str2);       //使用ExecuteQuery()执行sql语句;
            if (d1 != null && d1.Rows.Count > 0)
            {
                xiugai族谱号.Text = d1.Rows[0]["genealogy_ID"].ToString();     //查询结果
                shanchu族谱.Text = d1.Rows[0]["genealogy_ID"].ToString();     //查询结果
            }
        }
Beispiel #13
0
 public int CompareTo(gene other)
 {
     if (fitness == other.fitness)
     {
         return(0);
     }
     else if (fitness > other.fitness)
     {
         return(1);
     }
     else
     {
         return(-1);
     }
 }
Beispiel #14
0
        private void button6_Click(object sender, EventArgs e)
        {
            String str1 = shanchu族谱.Text;
            String str2 = "DELETE FROM [genealogy] WHERE genealogy_ID = '" + str1 + "'";
            gene   r2   = new gene();             //用来连接数据库的类gene,所以用其创建对象;
            int    d2   = r2.ExecuteUpdate(str2); //执行后会有返回值,是int类型,如果执行失败会返回0;

            if (d2 != 0)
            {
                MessageBox.Show("确认删除族谱吗?", "温馨提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation);
            }
            else
            {
                MessageBox.Show("删除错误!\n", "删除结果",
                                MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
            }
        }
Beispiel #15
0
        private void button4_Click(object sender, EventArgs e)
        {
            String str1  = addmemID.Text;
            String str2  = addzupuID.Text;
            String str3  = add父亲ID.Text;
            String str4  = memname.Text;
            String str5  = sex.Text;
            String str6  = number.Text;
            String str7  = birthdate.Text;
            String str8  = deathdate.Text;
            String str9  = birthplace.Text;
            String str10 = address.Text;
            String str11 = spousename.Text;
            String str12 = spousestate.Text;
            String str13 = null;

            if (str11.Length == 0)
            {
                str13 = "UPDATE [Member] SET Member_ID='" + str1 + "',Genealogy_ID='" + str2 + "',Father_ID='" + str3 + "',name='" + str4 + "'," +
                        "sex='" + str5 + "' ,number='" + str6 + "',birth='" + str7 + "',death='" + str8 + "',birthplace='" + str9 + "',address='" + str10 + "'," +
                        "spouse_name=NULL,spouse_state=NULL"; //编写sql语句,赋值给一个string变量,然后传给ExecuteQuery来执行;
            }
            else
            {
                str13 = "UPDATE [Member] SET Member_ID='" + str1 + "',Genealogy_ID='" + str2 + "',Father_ID='" + str3 + "',name='" + str4 + "'," +
                        "sex='" + str5 + "' ,number='" + str6 + "',birth='" + str7 + "',death='" + str8 + "',birthplace='" + str9 + "',address='" + str10 + "'," +
                        "spouse_name='" + str11 + "',spouse_state='" + str12 + "'"; //编写sql语句,赋值给一个string变量,然后传给ExecuteQuery来执行;
            }
            gene r2 = new gene();                                                   //用来连接数据库的类gene,所以用其创建对象;
            int  d2 = r2.ExecuteUpdate(str13);                                      //执行后会有返回值,是int类型,如果执行失败会返回0;

            if (d2 != 0)
            {
                MessageBox.Show("修改成功!", "修改结果",
                                MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
            }
            else
            {
                MessageBox.Show("信息错误,\n请重新输入!", "修改结果",
                                MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
            }
        }
Beispiel #16
0
        public gene AddGene(string name, string symbol, string externalId, string externalSource, string chromosome)
        {
            var existingGene = (from g in entities.genes
                                   where g.symbol == symbol
                                   select g).FirstOrDefault();
            if (existingGene == null)
            {
                existingGene = new gene()
                {
                    name = name,
                    symbol = symbol,
                    external_id = externalId,
                    external_source = externalSource,
                    chromosome = chromosome
                };
                entities.genes.Add(existingGene);
                entities.SaveChanges();
            }

            return existingGene;
        }
Beispiel #17
0
        private void button4_Click(object sender, EventArgs e)
        {
            String str1 = xiugai族谱号.Text;       //form里面有输入账号密码的文本框,这一步是获取其内容;
            String str2 = 家族姓氏.Text;
            String str3 = 族长.Text;
            String str4 = 族谱简介.Text;
            String str5 = "UPDATE [genealogy] SET Last_name='" + str2 + "',patriarch='" + str3 + "',introduction='" + str4 + "' WHERE genealogy_ID='" + str1 + "'"; //编写sql语句,赋值给一个string变量,然后传给ExecuteQuery来执行;
            gene   r2   = new gene();                                                                                                                               //用来连接数据库的类gene,所以用其创建对象;
            int    d2   = r2.ExecuteUpdate(str5);                                                                                                                   //执行后会有返回值,是int类型,如果执行失败会返回0;

            if (d2 != 0)
            {
                MessageBox.Show("修改成功!", "修改结果",
                                MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
            }
            else
            {
                MessageBox.Show("信息错误,\n请重新输入!", "修改结果",
                                MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
            }
        }
Beispiel #18
0
        private void button1_Click(object sender, EventArgs e)
        {
            String str1 = 族谱号.Text;       //form里面有输入账号密码的文本框,这一步是获取其内容;
            String str2 = 家族姓氏.Text;
            String str3 = 族长.Text;
            String str4 = 族谱简介.Text;
            String str5 = "insert into [genealogy] values('" + str1 + "','" + str2 + "','" + str3 + "','" + str4 + "')"; //编写sql语句,赋值给一个string变量,然后传给ExecuteQuery来执行;
            gene   r2   = new gene();                                                                                    //用来连接数据库的类gene,所以用其创建对象;
            int    d2   = r2.ExecuteUpdate(str5);                                                                        //执行后会有返回值,是int类型,如果执行失败会返回0;

            if (d2 != 0)
            {
                MessageBox.Show("新建成功!", "新建结果",
                                MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
            }
            else
            {
                MessageBox.Show("信息错误,\n请重新输入!", "新建结果",
                                MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
            }
        }
Beispiel #19
0
        private void 修改_Click(object sender, EventArgs e)
        {
            String str1 = 登录界面.form1.登录账号.Text;       //form里面有输入账号密码的文本框,这一步是获取其内容;
            String str2 = 修改密码.Text;
            String str3 = 族谱号.Text;
            String str4 = "UPDATE [User] SET [key]='" + str2 + "',genealogy_ID='" + str3 + "' WHERE User_ID='" + str1 + "'"; //编写sql语句,赋值给一个string变量,然后传给ExecuteQuery来执行;
            gene   r2   = new gene();                                                                                        //用来连接数据库的类gene,所以用其创建对象;
            int    d2   = r2.ExecuteUpdate(str4);                                                                            //执行后会有返回值,是int类型,如果执行失败会返回0;

            if (d2 != 0)
            {
                MessageBox.Show("修改成功!", "修改结果",
                                MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
                Form 登录 = new 登录界面();     //这两行代码是实现界面跳转;
                Hide();
            }
            else
            {
                MessageBox.Show("信息错误,\n请重新输入!", "修改结果",
                                MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
            }
        }
Beispiel #20
0
        private void button1_Click_1(object sender, EventArgs e)
        {
            String    str1 = Father.Text;
            String    str2 = "SELECT Member_ID,Genealogy_ID,name,sex,birth  FROM [Member] WHERE Father_ID='" + str1 + "'";
            gene      r1   = new gene();          //我写的那个用来连接数据库的类是ResM,所以用其创建对象;
            DataTable d1   = new DataTable();     //因为查询是会有结果返回的,所以需要用DataTable的对象来承接返回的结果。

                d1 = r1.ExecuteQuery(str2);
            if (d1 != null && d1.Rows.Count > 0)
            {
                dataGridView1.DataSource = d1;
                dataGridView1.Columns[0].HeaderCell.Value = "成员ID";
                dataGridView1.Columns[1].HeaderCell.Value = "族谱ID";
                dataGridView1.Columns[2].HeaderCell.Value = "姓名";
                dataGridView1.Columns[3].HeaderCell.Value = "性别";
                dataGridView1.Columns[4].HeaderCell.Value = "出生日期";
            }
            else
            {
                MessageBox.Show("查不到此成员后代,请重新输入成员ID", "温馨提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation);
            }
        }
Beispiel #21
0
        private void button1_Click(object sender, EventArgs e)
        {
            String str1  = addmemID.Text;
            String str2  = addzupuID.Text;
            String str3  = add父亲ID.Text;
            String str4  = memname.Text;
            String str5  = sex.Text;
            String str6  = number.Text;
            String str7  = birthdate.Text;
            String str8  = deathdate.Text;
            String str9  = birthplace.Text;
            String str10 = address.Text;
            String str11 = spousename.Text;
            String str12 = spousestate.Text;
            String str13 = null;

            if (str11.Length == 0)
            {
                str13 = "insert into [Member] values('" + str1 + "','" + str3 + "','" + str2 + "','" + str4 + "','" + str5 + "' ,'" + str7 + "','" + str8 + "','" + str9 + "','" + str10 + "', NULL,NULL, '" + str6 + "' ) ";   //编写sql语句,赋值给一个string变量,然后传给ExecuteQuery来执行;
            }
            else
            {
                str13 = "insert into [Member] values('" + str1 + "','" + str3 + "','" + str2 + "','" + str4 + "','" + str5 + "' ,'" + str7 + "','" + str8 + "','" + str9 + "','" + str10 + "','" + str11 + "', '" + str12 + "' , '" + str6 + "' ) "; //编写sql语句,赋值给一个string变量,然后传给ExecuteQuery来执行;
            }
            gene r2 = new gene();                                                                                                                                                                                                                    //用来连接数据库的类gene,所以用其创建对象;
            int  d2 = r2.ExecuteUpdate(str13);                                                                                                                                                                                                       //执行后会有返回值,是int类型,如果执行失败会返回0;

            if (d2 != 0)
            {
                MessageBox.Show("添加成功!", "添加结果",
                                MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
            }
            else
            {
                MessageBox.Show("保存失败,\n请重新输入!", "添加结果",
                                MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
            }
        }
Beispiel #22
0
        private void button2_Click(object sender, EventArgs e)
        {
            String    str1 = 登录账号.Text;                                                                   //form里面有输入账号密码的文本框,这一步是获取其内容;
            String    str2 = 登录密码.Text;
            String    str3 = "select * FROM [User] WHERE User_ID='" + str1 + "'AND [key]='" + str2 + "'"; //编写sql语句,赋值给一个string变量,然后传给ExecuteQuery来执行;
            gene      r1   = new gene();                                                                  //用来连接数据库的类gene,所以用其创建对象;
            DataTable d1   = new DataTable();                                                             //因为查询是会有结果返回的,所以需要用DataTable的对象来承接返回的结果。

            d1 = r1.ExecuteQuery(str3);                                                                   //使用ExecuteQuery()执行sql语句;
            if (d1 != null && d1.Rows.Count > 0)                                                          //查询有结果
            {
                MessageBox.Show("欢迎使用!\n登录成功!", "欢迎进入",
                                MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
                Form 登录 = new 管理界面();     //这三行代码是实现界面跳转;
                Hide();
                登录.Show();
            }
            else
            {
                MessageBox.Show("用户名或密码错误!\n请重新输入!", "错误",
                                MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
            }
        }
Beispiel #23
0
 public training(int[] layers)
 {
     this.score = 0f;
     this.brain = new gene(layers);
 }
Beispiel #24
0
    public void sendDeath(int id, float score)       // Nous informe qu'une voiture est morte
    {
        this.aliveCars--;
        updateTextInfo();
        genes[id].score = score;
        if (this.aliveCars == 0)           // Toutes les voitures sont mortes
        {
            if (currentBatch < batches)
            {
                newBatch();
                return;
            }
        }
        else
        {
            return;             // On attend que tout le monde meurt
        }
        // On repère les 3 meilleurs
        int size = batches * carsPerBatch;

        int[]   bestIds    = { 0, 0, 0 };
        float[] bestScores = { 0f, 0f, 0f };


        for (int i = 0; i < size; i++)
        {
            bool done = false;
            for (int iBest = 0; iBest < 3; iBest++)
            {
                if (!done && (genes[i].score > bestScores[iBest]))
                {
                    shiftIntArray(bestIds, iBest);
                    bestIds[iBest] = i;
                    shiftFloatArray(bestScores, iBest);
                    bestScores[iBest] = genes[i].score;
                    done = true;
                }
            }
        }



        // Premiers candidats: les 3 meilleurs de la dernière génération
        training[] nextGen = new training[size];

        for (int i = 0; i < 3; i++)
        {
            nextGen[i] = new training(genes[bestIds[i]].brain);
        }

        // Quetrième: gènes avec la moyenne de toutes les voitures, pondérée avec leur score.

        // On est obligé de séparer en 2 tableaux
        gene[] genesOnly = new gene[size];
        for (int i = 0; i < size; i++)
        {
            genesOnly[i] = genes[i].brain;
        }
        float[] scoresOnly = new float[size];
        for (int i = 0; i < size; i++)
        {
            scoresOnly[i] = genes[i].score;
        }


        nextGen[3] = new training(gene.weightedAverage(genesOnly, scoresOnly));

        // Cinquième: gènes avec la moyenne non pondérée de toutes les coitures
        float[] one = new float[size];
        for (int i = 0; i < size; i++)
        {
            one[i] = 1f;
        }

        nextGen[4] = new training(gene.weightedAverage(genesOnly, one));

        // Six et septième: idem mais avec les 3 premiers seulement
        gene[]  bo3Genes = new gene[3];
        float[] bo3one   = { 1f, 1f, 1f };
        for (int i = 0; i < 3; i++)
        {
            bo3Genes[i] = genes[bestIds[i]].brain;
        }

        nextGen[5] = new training(gene.weightedAverage(bo3Genes, bestScores));
        nextGen[6] = new training(gene.weightedAverage(bo3Genes, bo3one));

        // Pour les autres, soit on:
        // - Met un nouveau gène aléatoire
        // - Fait une moyenne sur tous les gènes pondérée aléatoirement

        for (int i = 7; i < size; i++)
        {
            // Pour les 2 cas, on regarde la parité de i
            if ((i % 2) == 1)
            {
                // Nouveau gène aléatoire
                nextGen[i] = new training(layers);
            }
            else
            {
                // Moyenne pondérée aléatoire
                float[] randomWeights = new float[size];
                for (int iWeight = 0; iWeight < size; iWeight++)
                {
                    randomWeights[iWeight] = Random.Range(0f, 100f);
                }
                nextGen[i] = new training(gene.weightedAverage(genesOnly, randomWeights));
            }
        }

        generation++;
        genes        = nextGen;
        currentBatch = 0;

        // On scale le cooldown checkpoint
        cpCooldown *= generationCooldownScale;
        if (cpCooldown < finalCpCooldown)
        {
            cpCooldown = finalCpCooldown;
        }
        newBatch();
    }
Beispiel #25
0
 public void InitGenes()
 {
     for(int i = 0; i < genes.Length; i++) {
         genes[i] = new gene();
     }
 }
Beispiel #26
0
 public training(gene newGene)
 {
     this.score = 0f;
     this.brain = newGene;
 }