ARA - 模拟






4.33/5 (2投票s)
基于蚁群的路由算法(ARA)C# 模拟
引言
我提供了一个针对(ARA)基于蚁群的路由算法在移动自组织网络(MANET)中的仿真。
MANET 是一组通过无线电通信的移动节点,不需要任何基础设施。这种类型的网络非常灵活,适用于多种情况和应用,因此它们允许在没有预先安装的基础设施的情况下建立临时通信。由于无线接口的传输范围有限,通信流量必须通过多个中间节点进行转发,才能实现两个节点之间的通信。
节点既要充当主机,又要充当路由器,为其他节点转发数据包。
移动自组织网络的主要问题仍然是找到通信端点之间的路由,而节点移动性会加剧这个问题。
ARA 是一种基于群智能的按需自组织路由算法的新方法。
蚁群是一种用于解决不同问题的优化元启发式算法,例如优化问题。

背景
蚁群算法是群智能的一个子集,它考虑了简单的蚂蚁通过合作解决复杂问题的能力。有趣的是,蚂蚁不需要直接通信来解决问题,而是通过信息素进行通信。
信息素的概念是指个体通过改变其环境进行间接通信。近年来,已经介绍了许多基于蚁群问题的算法来解决不同的问题,例如优化问题。为了证明该方法有潜力成为移动多跳自组织网络的合适算法,我们展示了一些基于我们仿真的结果。
蚁群优化元启发式算法的基本思想源于真实蚂蚁的觅食行为。当蚂蚁在寻找食物的路上时,它们从巢穴出发,走向食物。当一只蚂蚁到达一个十字路口时,它必须决定下一步走哪条路。
在行走过程中,蚂蚁会释放信息素,标记所走的路线。某种路径上的信息素浓度是其使用情况的指标。随着时间的推移,由于扩散效应,信息素的浓度会降低。
这个特性很重要,因为它将动态性整合到路径搜索过程中。
Using the Code
该方法在网络中的每个节点上运行。
public void run()
{
Console.WriteLine("Thread run for Node"+this.id);
Message message;
if (messagesToSend.Count > 0)
{
//Source and Dest must be define
message = messagesToSend.Peek();
int nextID = routingTable.getNextHop(message.dest);
System.Windows.Forms.MessageBox.Show("I'm Node ["+this.id+"] Routing table result :" + nextID);
if (nextID != -1)
{
message = messagesToSend.Dequeue();
string seqNo = new SequenceFormat().createSequance(message);
sequanceNumList.Add(seqNo);
message.sequnceNumber = seqNo;
message.messageType = MessageType.DATA;
message.publinNod = Form1.getNodeById(nextID);
send(message);
}
else
{
message = messagesToSend.Dequeue();
string seqNo = new SequenceFormat().createSequance(message);
message.sequnceNumber = seqNo;
messageInWait.Add(message);
System.Windows.Forms.MessageBox.Show("I'm Node [" + this.id + "] and i create a Fant." );
Message fantMessage = new Message();
fantMessage.source = this;
fantMessage.dest = message.dest;
fantMessage.messageType = MessageType.FANT;
string fantseq = new SequenceFormat().createSequance(fantMessage);
sequanceNumList.Add(fantseq);
fantMessage.sequnceNumber = fantseq;
broadCast(fantMessage);
}
}
checkChannel();
routingTable.updatePhermones();
Thread.Sleep(10);
}
下载代码