您的位置:首页 > 其它

算法学习1简单遗传算法寻路

2010-10-10 22:42 375 查看
使用 Silverlight 做表现层

代码思路:

//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) {

}

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: