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); }
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); } }
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); } }
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); } }
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); } }
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); } }
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); } }
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; }
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);// }
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"); } }
// 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]; }
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(); //查询结果 } }
public int CompareTo(gene other) { if (fitness == other.fitness) { return(0); } else if (fitness > other.fitness) { return(1); } else { return(-1); } }
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); } }
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); } }
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; }
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); } }
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); } }
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); } }
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); } }
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); } }
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); } }
public training(int[] layers) { this.score = 0f; this.brain = new gene(layers); }
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(); }
public void InitGenes() { for(int i = 0; i < genes.Length; i++) { genes[i] = new gene(); } }
public training(gene newGene) { this.score = 0f; this.brain = newGene; }