算法学习1简单遗传算法寻路
2010-10-10 22:42
375 查看
使用 Silverlight 做表现层
代码思路:
//1 随机生成 20个 Role
//2 移动
//3评分 如果 满分就退出
//4 杂交
//5变异
//6GOTO2
遗传算法的核心思想
1构造 可杂交和变异的 染色体,
2通过基因组合起来。
3通过外部 优胜劣汰 进行筛选 对应结果的匹配度。
最终得到结果。
通用神经网络类似人的神经网络。
完整源码:
部分代码
代码思路:
//1 随机生成 20个 Role
//2 移动
//3评分 如果 满分就退出
//4 杂交
//5变异
//6GOTO2
遗传算法的核心思想
1构造 可杂交和变异的 染色体,
2通过基因组合起来。
3通过外部 优胜劣汰 进行筛选 对应结果的匹配度。
最终得到结果。
通用神经网络类似人的神经网络。
完整源码:
部分代码
using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Net; using System.Threading; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; namespace Learning { public partial class MainPage : UserControl { private Thread thread1; private List<Role> list = new List<Role>(); private RoleManager roleManager; private int OPTime = 0; public MainPage() { InitializeComponent(); thread1 = new Thread(yichuan); dataGrid1.ItemsSource = list; } private void yichuan() { MapManager mapManager = new MapManager(); MapManager.Map[0, 9, 9] = -1; //1 随机生成 20个 Role //2 移动 //3评分 如果 满分就退出 //4 杂交 //5变异 //6GOTO2 //1 roleManager = new RoleManager(); for (int i = 0; i < 20; i++) { roleManager.RoleList.Add(RoleManager.GetRandomRole(9, 9)); } //2 step2: for (int i = 0; i < roleManager.RoleList.Count; i++) { var role = roleManager.RoleList[i]; foreach (var a in role.Directions) { mapManager.TryMove(ref role, a); } } //3 roleManager.RoleList.ForEach(a => a.GetGrade(Global.ENDX, Global.ENDY)); UpdataDG(); //4 var dad = roleManager.GetRole(); Role mom; do { mom = roleManager.GetRole(); } while (mom == dad); roleManager.CrossOver(ref dad, ref mom); //5 dad.Mutate(); mom.Mutate(); roleManager.RoleList.ForEach(a => { if (a.Grade == 1) { UpdataDG("ok"); Thread.CurrentThread.Abort(); return; } }); this.Dispatcher.BeginInvoke( () => { this.OPTime++; textBlock1.Text = "第" + OPTime + "次 总分:" + Environment.NewLine + "最佳表现的终点一个路线和终点" + Environment.NewLine; var first = roleManager.RoleList.OrderByDescending(a => a.Grade).FirstOrDefault(); textBlock1.Text += first.X + "/" + first.Y + Environment.NewLine; first.Directions.ToList().ForEach( a => { textBlock1.Text += a.ToString(); }); } ); Thread.Sleep(500); goto step2; } private void UpdataDG() { this.Dispatcher.BeginInvoke( () => { // MessageBox.Show("prefect !"); dataGrid1.ItemsSource = null; list = roleManager.RoleList.ToList(); //adsadadsda dataGrid1.ItemsSource = list; } ); } private void UpdataDG(Object OB) { this.Dispatcher.BeginInvoke( () => { MessageBox.Show(OB.ToString()); } ); } private void button1_Click(object sender, RoutedEventArgs e) { thread1.Start(); } private void button2_Click(object sender, RoutedEventArgs e) { try { thread1.Abort(); } catch (Exception) { } } } }
相关文章推荐
- 对于简单模拟路由寻路算法代码的学习。
- 深度寻路算法,原来算法可以这么简单的理解学习?!
- 【学习笔记】简单寻路算法(低效率)
- 《Delphi 算法与数据结构》学习与感悟[6]: 一个简单的"单向链表"
- “AS3.0高级动画编程”学习:第四章 寻路(AStar/A星/A*)算法 (中)
- A*寻路算法学习及实现
- “AS3.0高级动画编程”学习:第四章 寻路(AStar/A星/A*)算法 (中)
- 用简单直白的方式讲解A星寻路算法原理
- android学习——简单的三位数字计算器算法的实现
- Powershell生成Windows密码算法简单学习
- OpenCV 2 学习笔记(8): 利用邻域处理图像与简单的算术图像处理算法:图像滤波与加权和
- 算法设计和数据结构学习_5(BST&AVL&红黑树简单介绍)
- 特征提取算法简单学习笔记
- “AS3.0高级动画编程”学习:第四章 寻路(AStar/A星/A*)算法 (下)
- “AS3.0高级动画编程”学习:第四章 寻路(AStar/A星/A*)算法 (下)
- 算法设计和数据结构学习_5(BST&AVL&红黑树简单介绍)
- 深度学习基础(二):简单神经网络,后向传播算法及实现
- 【python学习】简单的几个算法
- 简单的八方向寻路算法
- 算法学习:Pac-Man的简单对抗