关于用C#实现蚁群算法解决TSP问题

学习了一个学期的人工智能,了解到了人工智能的强大力量.很多智能算法真是很令人向往!

 下面是我实现的蚁群算法.

下面介绍一下什么是蚁群算法:

主要是一种模拟生物的进化:

用信息素来引导蚂蚁向比较好的方向前进.

用我们熟悉的鲁迅先生的一句话:地上没有路,走的人多了也就有了路.(用在蚁群算法身上很好)

《关于用C#实现蚁群算法解决TSP问题》
using
 System;
《关于用C#实现蚁群算法解决TSP问题》

using
 System.Collections.Generic;
《关于用C#实现蚁群算法解决TSP问题》

using
 System.Text;
《关于用C#实现蚁群算法解决TSP问题》
《关于用C#实现蚁群算法解决TSP问题》

namespace
 AntSystem
《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》


{
《关于用C#实现蚁群算法解决TSP问题》    
public class AA
《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》    
{
《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》        
/**//// <summary>
《关于用C#实现蚁群算法解决TSP问题》        
/// 对信息量的重视程度
《关于用C#实现蚁群算法解决TSP问题》        
/// </summary>

《关于用C#实现蚁群算法解决TSP问题》        private int alpha;
《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》        
/**//// <summary>
《关于用C#实现蚁群算法解决TSP问题》        
/// 启发式信息的受重视程度
《关于用C#实现蚁群算法解决TSP问题》        
/// </summary>

《关于用C#实现蚁群算法解决TSP问题》        private int beta;
《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》        
/**//// <summary>
《关于用C#实现蚁群算法解决TSP问题》        
/// 信息素的挥发速度
《关于用C#实现蚁群算法解决TSP问题》        
/// </summary>

《关于用C#实现蚁群算法解决TSP问题》        private double lo;
《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》        
/**//// <summary>
《关于用C#实现蚁群算法解决TSP问题》        
/// 城市距离矩阵
《关于用C#实现蚁群算法解决TSP问题》        
/// </summary>

《关于用C#实现蚁群算法解决TSP问题》        private double[,] City;
《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》        
/**//// <summary>
《关于用C#实现蚁群算法解决TSP问题》        
/// 信息素矩阵
《关于用C#实现蚁群算法解决TSP问题》        
/// </summary>

《关于用C#实现蚁群算法解决TSP问题》        private double[,] Message;
《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》        
/**//// <summary>
《关于用C#实现蚁群算法解决TSP问题》        
/// opneList用于存放下一步可行城市
《关于用C#实现蚁群算法解决TSP问题》        
/// </summary>

《关于用C#实现蚁群算法解决TSP问题》        private Queue<int> openList=new Queue<int> ();
《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》        
/**//// <summary>
《关于用C#实现蚁群算法解决TSP问题》        
/// closedList用于存放已经访问过的城市
《关于用C#实现蚁群算法解决TSP问题》        
/// </summary>

《关于用C#实现蚁群算法解决TSP问题》        private Queue<int> closedList=new Queue<int> ();
《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》        
/**//// <summary>
《关于用C#实现蚁群算法解决TSP问题》        
/// 储存较好的路径
《关于用C#实现蚁群算法解决TSP问题》        
/// </summary>

《关于用C#实现蚁群算法解决TSP问题》        private Queue <int> BestList=new Queue<int> ();
《关于用C#实现蚁群算法解决TSP问题》        
private int Pro_time = 0;
《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》        
/**//////////////////////////////////////////////////////////
《关于用C#实现蚁群算法解决TSP问题》        
/// <summary>
《关于用C#实现蚁群算法解决TSP问题》        
/// 构造函数:形成城市距离和信息素矩阵
《关于用C#实现蚁群算法解决TSP问题》        
/// </summary>
《关于用C#实现蚁群算法解决TSP问题》        
/// <param name=”city”>城市距离矩阵</param>
《关于用C#实现蚁群算法解决TSP问题》        
/// <param name=”Lo”> 信息素的挥发速度</param>

《关于用C#实现蚁群算法解决TSP问题》        public AA(double[,] city,double Lo,int Alpha,int Beta)
《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》        
{
《关于用C#实现蚁群算法解决TSP问题》            alpha 
= Alpha;
《关于用C#实现蚁群算法解决TSP问题》            beta 
= Beta;
《关于用C#实现蚁群算法解决TSP问题》            lo
=Lo;
《关于用C#实现蚁群算法解决TSP问题》            
int temp = Convert.ToInt32( Math.Sqrt(city.Length));
《关于用C#实现蚁群算法解决TSP问题》            City
=new double [temp,temp];
《关于用C#实现蚁群算法解决TSP问题》            Message
=new double [temp,temp];
《关于用C#实现蚁群算法解决TSP问题》            
for (int i = 0; i < temp; i++)
《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》            
{
《关于用C#实现蚁群算法解决TSP问题》                
for (int j = 0; j < temp; j++)
《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》                
{
《关于用C#实现蚁群算法解决TSP问题》                    City[i, j] 
= city[i, j];
《关于用C#实现蚁群算法解决TSP问题》                }

《关于用C#实现蚁群算法解决TSP问题》            }

《关于用C#实现蚁群算法解决TSP问题》            
//初始化信息素矩阵
《关于用C#实现蚁群算法解决TSP问题》
            for (int i = 0; i < temp; i++)
《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》            
{
《关于用C#实现蚁群算法解决TSP问题》                
for (int j = 0; j < temp; j++)
《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》                
{
《关于用C#实现蚁群算法解决TSP问题》                    
if (i != j)
《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》                    
{
《关于用C#实现蚁群算法解决TSP问题》                        Message[i, j] 
= (double)1 / (temp * temp  temp);
《关于用C#实现蚁群算法解决TSP问题》                    }

《关于用C#实现蚁群算法解决TSP问题》                }

《关于用C#实现蚁群算法解决TSP问题》            }

《关于用C#实现蚁群算法解决TSP问题》        }

《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》        
/**/////////////////////////////////////////////////////////////
《关于用C#实现蚁群算法解决TSP问题》        
/// <summary>
《关于用C#实现蚁群算法解决TSP问题》        
/// 改变信息素矩阵,closed_list为较好的路径
《关于用C#实现蚁群算法解决TSP问题》        
/// </summary>
《关于用C#实现蚁群算法解决TSP问题》        
/// <param name=”closed_list”></param>

《关于用C#实现蚁群算法解决TSP问题》        private void Change_Message(Queue<int> closed_list)
《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》        
{
《关于用C#实现蚁群算法解决TSP问题》            
lock (this)
《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》            
{
《关于用C#实现蚁群算法解决TSP问题》                
int[] temp_Array = new int[closed_list.Count];
《关于用C#实现蚁群算法解决TSP问题》                temp_Array 
= closed_list.ToArray();
《关于用C#实现蚁群算法解决TSP问题》                
for (int i = 0; i < closed_list.Count  1; i++)
《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》                
{
《关于用C#实现蚁群算法解决TSP问题》                    Message[temp_Array[i], temp_Array[i 
+ 1]] = Message[temp_Array[i], temp_Array[i + 1]] + lo / ((1  lo) *Convert.ToInt32(Get_Weight(closed_list)+1));
《关于用C#实现蚁群算法解决TSP问题》                }

《关于用C#实现蚁群算法解决TSP问题》                Message[temp_Array[temp_Array.Length 
 1], temp_Array[0]] = Message[temp_Array[temp_Array.Length  1], temp_Array[0]] + lo / ((1  lo) *Convert.ToInt32(Get_Weight(closed_list)));
《关于用C#实现蚁群算法解决TSP问题》                
for (int i = 0; i < closed_list.Count; i++)
《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》                
{
《关于用C#实现蚁群算法解决TSP问题》                    
for (int j = 0; j < closed_list.Count; j++)
《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》                    
{
《关于用C#实现蚁群算法解决TSP问题》                        Message[i, j] 
= (1  lo) * Message[i, j];
《关于用C#实现蚁群算法解决TSP问题》                    }

《关于用C#实现蚁群算法解决TSP问题》                }

《关于用C#实现蚁群算法解决TSP问题》            }

《关于用C#实现蚁群算法解决TSP问题》        }

《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》        
/**////////////////////////////////////////////////////////////////
《关于用C#实现蚁群算法解决TSP问题》        
/// <summary>
《关于用C#实现蚁群算法解决TSP问题》        
/// 输入一个链表,计算出其对应的总路径
《关于用C#实现蚁群算法解决TSP问题》        
/// </summary>
《关于用C#实现蚁群算法解决TSP问题》        
/// <param name=”closed_list”></param>
《关于用C#实现蚁群算法解决TSP问题》        
/// <returns></returns>

《关于用C#实现蚁群算法解决TSP问题》        public double Get_Weight(Queue <int> closed_list)
《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》        
{
《关于用C#实现蚁群算法解决TSP问题》            
lock (this)
《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》            
{
《关于用C#实现蚁群算法解决TSP问题》                
double sum = 0;
《关于用C#实现蚁群算法解决TSP问题》                
int[] temp_Array = new int[closed_list.Count];
《关于用C#实现蚁群算法解决TSP问题》                temp_Array 
= closed_list.ToArray();
《关于用C#实现蚁群算法解决TSP问题》                
for (int i = 0; i < Convert.ToInt32(temp_Array.Length)  1; i++)
《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》                
{
《关于用C#实现蚁群算法解决TSP问题》                    sum 
= sum + City[temp_Array[i], temp_Array[i + 1]];
《关于用C#实现蚁群算法解决TSP问题》                }

《关于用C#实现蚁群算法解决TSP问题》                sum 
= sum + City[temp_Array[temp_Array.Length  1], temp_Array[0]];
《关于用C#实现蚁群算法解决TSP问题》                
return sum;
《关于用C#实现蚁群算法解决TSP问题》            }

《关于用C#实现蚁群算法解决TSP问题》        }

《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》        
/**///////////////////////////////////////////////////////////////
《关于用C#实现蚁群算法解决TSP问题》        
/// <summary>
《关于用C#实现蚁群算法解决TSP问题》        
/// 产生到i城市后,下一个可走城市的集合。并将城市编号加入到openList中。
《关于用C#实现蚁群算法解决TSP问题》        
/// 产生的城市不可以已经存在closedList中
《关于用C#实现蚁群算法解决TSP问题》        
/// </summary>
《关于用C#实现蚁群算法解决TSP问题》        
/// <param name=”i”></param>

《关于用C#实现蚁群算法解决TSP问题》        private void NextCity()
《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》        
{
《关于用C#实现蚁群算法解决TSP问题》            openList.Clear();
《关于用C#实现蚁群算法解决TSP问题》            
int temp_int=Convert.ToInt32(Math.Sqrt(City.Length));
《关于用C#实现蚁群算法解决TSP问题》            
for (int i = 0; i < temp_int; i++)
《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》            
{
《关于用C#实现蚁群算法解决TSP问题》                
if (closedList.Contains(i) ==false)
《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》                
{
《关于用C#实现蚁群算法解决TSP问题》                    openList.Enqueue(i);
《关于用C#实现蚁群算法解决TSP问题》                }

《关于用C#实现蚁群算法解决TSP问题》            }

《关于用C#实现蚁群算法解决TSP问题》        }

《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》        
/**///////////////////////////////////////////////////////////////
《关于用C#实现蚁群算法解决TSP问题》        
/// <summary>
《关于用C#实现蚁群算法解决TSP问题》        
/// 选择应该走那条路,选择完路A后,清空openList,再把A加入到openList中
《关于用C#实现蚁群算法解决TSP问题》        
/// </summary>
《关于用C#实现蚁群算法解决TSP问题》        
/// <returns></returns>

《关于用C#实现蚁群算法解决TSP问题》        private int choiceRoute()
《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》        
{
《关于用C#实现蚁群算法解决TSP问题》            
int index = 0;//记录选择的城市
《关于用C#实现蚁群算法解决TSP问题》
            Random random = new Random();
《关于用C#实现蚁群算法解决TSP问题》            
double random_value =(double) random.NextDouble();//随机选择的概率
《关于用C#实现蚁群算法解决TSP问题》
            int[] temp_Array=new int [openList.Count];
《关于用C#实现蚁群算法解决TSP问题》            temp_Array
=openList.ToArray();
《关于用C#实现蚁群算法解决TSP问题》            
double sum_Message = 0;//openList所有节点的总信息量
《关于用C#实现蚁群算法解决TSP问题》
            for (int i = 0; i < openList.Count; i++)
《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》            
{
《关于用C#实现蚁群算法解决TSP问题》                
double eta = 1 / City[Pro_time, temp_Array[i]];
《关于用C#实现蚁群算法解决TSP问题》                sum_Message 
= sum_Message +Math.Pow(Message[Pro_time, temp_Array[i]],alpha)*Math.Pow (eta,beta);
《关于用C#实现蚁群算法解决TSP问题》            }

《关于用C#实现蚁群算法解决TSP问题》            
double temp=0;
《关于用C#实现蚁群算法解决TSP问题》            
for (int j = 0; j < openList.Count; j++)
《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》            
{
《关于用C#实现蚁群算法解决TSP问题》                
double eta = 1 / City[Pro_time, temp_Array[j]];
《关于用C#实现蚁群算法解决TSP问题》                temp
=temp+Math.Pow(Message[Pro_time,temp_Array[j]],alpha)*Math.Pow(eta,beta)/sum_Message;
《关于用C#实现蚁群算法解决TSP问题》                
if (temp > random_value)
《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》                
{
《关于用C#实现蚁群算法解决TSP问题》                    index 
= temp_Array [j];
《关于用C#实现蚁群算法解决TSP问题》                    
break;
《关于用C#实现蚁群算法解决TSP问题》                }

《关于用C#实现蚁群算法解决TSP问题》            }

《关于用C#实现蚁群算法解决TSP问题》            openList.Clear();
《关于用C#实现蚁群算法解决TSP问题》            openList.Enqueue(index);
《关于用C#实现蚁群算法解决TSP问题》            
return index;
《关于用C#实现蚁群算法解决TSP问题》        }

《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》        
/**//////////////////////////////////////////////////////////////
《关于用C#实现蚁群算法解决TSP问题》        public Queue<int> Main_DW()
《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》        
{
《关于用C#实现蚁群算法解决TSP问题》            BestList.Clear();
《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》            
/**////共循环20次
《关于用C#实现蚁群算法解决TSP问题》            for (int i = 0; i < 4; i++)
《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》            
{
《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》                
/**////共有n只蚂蚁n=City’number  Convert.ToInt32(Math.Sqrt(City.Length))
《关于用C#实现蚁群算法解决TSP问题》                for (int j = 0; j < Convert.ToInt32(Math.Sqrt(City.Length)); j++)
《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》                
{
《关于用C#实现蚁群算法解决TSP问题》                    openList.Enqueue(
0);
《关于用C#实现蚁群算法解决TSP问题》                    closedList.Clear();
《关于用C#实现蚁群算法解决TSP问题》                    
while (openList.Count != 0 && closedList.Count != Convert.ToInt32(Math.Sqrt(City.Length)))
《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》                    
{
《关于用C#实现蚁群算法解决TSP问题》                        
int temp = openList.Dequeue();
《关于用C#实现蚁群算法解决TSP问题》                        Pro_time 
= temp;
《关于用C#实现蚁群算法解决TSP问题》                        closedList.Enqueue(temp);
《关于用C#实现蚁群算法解决TSP问题》                        
if (openList.Count == 0 && closedList.Count == Convert.ToInt32(Math.Sqrt(City.Length)))
《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》                        
{
《关于用C#实现蚁群算法解决TSP问题》                            
if (BestList.Count == 0)
《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》                            
{
《关于用C#实现蚁群算法解决TSP问题》                                
int[] temp_Array = new int[Convert.ToInt32(Math.Sqrt(City.Length))];
《关于用C#实现蚁群算法解决TSP问题》                                temp_Array 
= closedList.ToArray();
《关于用C#实现蚁群算法解决TSP问题》                                
for (int k = 0; k < Convert.ToInt32(Math.Sqrt(City.Length)); k++)
《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》                                
{
《关于用C#实现蚁群算法解决TSP问题》                                    BestList.Enqueue(temp_Array[k]);
《关于用C#实现蚁群算法解决TSP问题》                                }

《关于用C#实现蚁群算法解决TSP问题》                            }

《关于用C#实现蚁群算法解决TSP问题》                            
if (Get_Weight(BestList) > Get_Weight(closedList))
《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》                            
{
《关于用C#实现蚁群算法解决TSP问题》                                BestList.Clear();
《关于用C#实现蚁群算法解决TSP问题》                                
int[] temp_Array = new int[Convert.ToInt32(Math.Sqrt(City.Length))];
《关于用C#实现蚁群算法解决TSP问题》                                temp_Array 
= closedList.ToArray();
《关于用C#实现蚁群算法解决TSP问题》                                
for (int k = 0; k < Convert.ToInt32(Math.Sqrt(City.Length)); k++)
《关于用C#实现蚁群算法解决TSP问题》《关于用C#实现蚁群算法解决TSP问题》                                
{
《关于用C#实现蚁群算法解决TSP问题》                                    BestList.Enqueue(temp_Array[k]);
《关于用C#实现蚁群算法解决TSP问题》                                }

《关于用C#实现蚁群算法解决TSP问题》                            }

《关于用C#实现蚁群算法解决TSP问题》                        }

《关于用C#实现蚁群算法解决TSP问题》                        NextCity();
《关于用C#实现蚁群算法解决TSP问题》                        choiceRoute();
《关于用C#实现蚁群算法解决TSP问题》                    }

《关于用C#实现蚁群算法解决TSP问题》                }

《关于用C#实现蚁群算法解决TSP问题》                Change_Message(BestList);
//修改信息量
《关于用C#实现蚁群算法解决TSP问题》
            }

《关于用C#实现蚁群算法解决TSP问题》            
return BestList;
《关于用C#实现蚁群算法解决TSP问题》        }

《关于用C#实现蚁群算法解决TSP问题》    }

《关于用C#实现蚁群算法解决TSP问题》}

 

时间有限,关于蚁群算法就不多介绍了!有兴趣的可以上网找一点资料看一下就会很快了解了!!

    原文作者:蚁群算法
    原文地址: https://blog.csdn.net/hora_bird/article/details/1658600
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞