65.9K
CodeProject 正在变化。 阅读更多。
Home

ARA - 模拟

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.33/5 (2投票s)

2014年5月10日

CPOL

2分钟阅读

viewsIcon

10760

基于蚁群的路由算法(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); 
        }

下载代码

© . All rights reserved.