概念AI神经网络——具有蚁群优化的数据网络负载平衡

ANTNet是一种动态路由算法,受到蚂蚁行为的启发,利用信息素表来适应网络变化和流量。通过比较ANTNet与非ANTNet的性能,研究表明ANTNet能更有效地减少节点跳数,提高网络效率和可靠性。此外,环路消除技术进一步优化了网络性能,使系统能更快适应节点故障或变化。
摘要由CSDN通过智能技术生成

目录

介绍

背景

路由算法

ANTNet简介

算法

计划

计划特点

仿真结果

ANTNet vs. non-ANTNet

环路消除

适应性

引用


介绍

蚂蚁在大约120亿年前首次进化,形成于11,400多种不同的物种中,由于其高度组织的殖民地,有时由数百万只蚂蚁组成,被认为是最成功的昆虫之一。

蚂蚁的一个特别值得注意的地方是它们创造蚂蚁街道的能力。单文件路径的长双向通道,它们在其中导航景观,以便在最佳时间内到达目的地。这些不断变化的网络是通过使用信息素来实现的,这些信息素使用最短路径机制引导它们。该技术允许在找到更优化的路径或跨现有路径放置障碍物时更新自适应路由系统。

计算机科学家在1990年代初开始研究蚂蚁的行为,以发现新的路由算法。这些研究的结果是蚁群优化(ACO),在实施良好的ACO技术的情况下,最佳性能与现有的顶级路由算法相比。

本文详细介绍了如何使用ACO来有效地动态路由流量。高效的路由算法将最大限度地减少呼叫需要连接的节点数量才能完成;最小化网络负载并提高可靠性。已经设计了基于Marco DorigoThomas StützleANTNet实现,并通过此产生了许多视觉辅助测试,以将遗传算法与非通用算法进行比较。该报告最后将总结算法的性能以及如何进一步优化。

背景

电子通信网络可分为电路交换或分组交换。电路交换网络依赖于从源到目标的专用连接,该连接在启动时进行一次,并在连接断开之前保持不变。电路交换网络的一个例子是英国电信电话网络。然而,分组交换网络的工作方式完全不同,所有要传输的数据都被分成多个段并作为数据包发送。数据包可以在分组交换网络中无序到达,通过不同的节点采用各种路径才能到达目的地。互联网和办公室局域网都是分组交换网络的好例子。

可以采用多种技术来优化网络周围的流量。此类技术包括流量和拥塞控制,其中节点从目标节点发送数据包确认,以提高或降低数据包传输速度。本报告中感兴趣的领域集中在网络路由和路由表的概念上。这些表保存路由算法使用的信息,以便为将要访问的下一个节点上的数据包做出本地转发决策,以便到达其最终目的地。

网络路由(特别是在互联网等非常大的网络中)的问题之一是适应性。不仅流量可能高得不可预测,而且随着旧节点的删除和新节点的添加,网络的结构也会发生变化。这可能使得几乎不可能找到常量参数的组合来最佳地路由网络。

路由算法

分组交换网络通过存储在链路状态中的路由表动态引导数据包到达目的地,并通过链路状态算法进行选择。

链路状态算法的工作原理是向网络中的每个节点提供网络连接图。此图描述了哪些节点是直接连接的。连接节点的值存储在映射中,该映射表示到其他节点的最短路径。网络路由中使用的一种这样的链路状态算法是Dijkstra算法。找到两个节点之间的路径时,其权重将在表中更新。如果找到较短的路径,新的最优权重将更新到表中,替换旧值。

该算法允许流量在网络中路由,同时连接到尽可能少数量的节点。系统可以工作,但不考虑流量和负载平衡的涌入。

ANTNet简介

通过将Dijkstra的算法替换为通用算法,调用所采用的路径可以根据它们所采用的路径短短进行评分;这样,如果他们在繁忙的网络上排队,他们的表现会很差。因此,其他路径将相对得分并选择。这将实时工作,并允许路由系统在传输数据包时进行调整。ANTNet使用虚拟信息素表,就像蚂蚁遵循路径一样,丢弃信息素以重新强化它。蚂蚁沿着路径移动得越快,蚂蚁的吞吐量就越大,因此信息素的浓度就越高。同样,ANTNet中的信息素表允许快速路由获得更高的被选择机会,而不太理想的路由得分较低的被选择的机会。

ANTNet背后的想法是,当发出呼叫时,Ant将使用链路状态确定性算法遍历网络。每个节点都持有网络所有其他节点的信息素表。每个信息素表都包含一个表条目列表,其中包含当前节点的所有连接节点。

算法

首先,每个可能的路径都有被选择的偶数可能性。将蚂蚁放置在由4个节点组成的网络上,源节点1和目标节点2。调用机会机制并选择路径。

图片3.1——网络图

下一个节点

%几率

2

33.33333%

3

33.33333%

4

33.33333%

3.1——节点1的信息素表

在这种情况下,节点2已被选中[3.2],并且蚂蚁到达其源目的地。

然后,蚂蚁移动并更新具有更高(且数学上更偏向)值的已访问节点的信息素表。图3.2和表3.2的计算方式如下:

  • 节点2是最终目的地
  • 花了1跳才到达目的地
  • 将1(跃点)除以100:100%
  • 节点100(当前为2.33)的概率值加3333:133.3333
  • 将其他节点的值添加到133.3333(133.3333 + 33.3333 + 33.3333):200(大约)
  • 计算比率:比率=100/200 0.5
  • 将节点的概率设置为其当前值乘以比率
    • 节点2:133.3333 *比率(0.5)=66.6666%
    • 节点3:33.3333 *比率(0.5)=16.6666%
    • 节点4:33.3333 *比率(0.5)=16.6666%
  • 节点2(66.6666%)+节点3(16.6666%)+节点4(16.6666%)=99.9999%

该系统不是100%准确的,因为总数加起来永远不会精确到100%,但它足够接近以允许精度在所需的水平内。

下图描述了更新后的路径和信息素表是如何发生的。

3.2

下一个节点

%几率

2

66.6666%

3

16.6666%

4

16.6666%

3.2

计划

出于该计划的目的,已经创建了一个由30个节点组成的双向,未加权拓扑网络,并且与英国同步数字层次结构(SDH)网络非常相似。设置基本数量的参数后,将运行模拟。首先,所有信息素表默认为相等的权重,然后生成调用并将其放置在网络上。最初,选择的路线是随机的。如果调用无法连接到节点,则会强制等待,并枚举等待计数器以反映量程(以计时器时钟周期为单位)。一旦节点到达其目标节点,它将向后工作,在遍历时更改本地节点的信息素表。所走的路线越短,其在信息素表中的表条目的概率就越大。这种情况反复发生,直到最快节点的权重移动,使得较慢的路由被选中的概率非常低。

注意:为了编译和运行该程序,您需要从 dotnetcharting.com 下载dotnetcharting

计划特点

  • ANTNet开/关——打开和关闭算法
  • 仿真速度——1 tick p/s -1,000 tick p/s(或接近系统可以运行的速度)
  • 要拨打的呼叫总数——模拟终止前已完成的呼叫数
  • 最大并发呼叫数——同时允许的呼叫数
  • 节点容量——节点一次可以路由的呼叫数
  • 通话时长——通话时长(以刻度为单位)
  • 减少I/O——绕过网络可视化以提高仿真速度
  • 连接时返回——连接后立即将节点返回到源
  • 实时网络负载可视化——查看节点ID、容量和路由状态(blue = OFF)
  • 带有标签和模拟叠加的绘图工具
  • 将信息素表呈现为HTML

  • MainForm——应用程序的图形用户界面
  • DrawPanel——实时网络可视化自定义控制
  • Global——包含应用程序访问的静态变量
  • Node——表示一个节点并保存用于路由的PheromoneTable对象数组
  • Call——表示网络上的调用并保存源节点和目标节点
  • Simulation——表示已完成的模拟,用于创建图形
  • PheromoneTable——Node的路由表

网络包含30 Node,每个Node包含一个PheromoneTable对象数组,网络(29)中每个对象一个Node。每个PheromoneTable都包含一个TableEntry数组,每个Node对应于连接到当前的Node

下图表示程序中类之间的关系:

更新信息素表:

// returns the next Node of the path
        public int ProbablePath(ArrayList VisitedNodes)
{
    // create a random generator
    Random r = new Random(Global.Seed);

    double val=0;
    double count = 0;
    double Lastcount = -1;

    ArrayList tempTEVector=new ArrayList();

    // loop through all the connected nodes
    for(int i=0;i<tableEntry.Length;i++)
    {
        // has the node been visited?
        bool v=false;

        //loop through all the visited nodes
        for(int j=0;j<VisitedNodes.Count;j++)
        {
            // if the ID's match then this node has alrady been visited
            if(tableEntry[i].NodeID==(int)VisitedNodes[j])
                v=true;
        }
        
        // If v is false, then the node hasn't been visited.. so Add
        if(!v) 
        {
            // get the node
            Node n = Global.Nodes[tableEntry[i].NodeID];

            // if the node is accepting connections
            if(!n.FullCapacity)
            {
                // add the node as a possible candidate
                tempTEVector.Add(tableEntry[i]);
            }
        }
    }
    
    // if all connections have been visited
    if(tempTEVector.Count==0)
    {
        // loop through all the connected nodes
        for(int i=0;i<tableEntry.Length;i++)
            tempTEVector.Add(tableEntry[i]);
    }

    // get the ceiling amount for probabilities
    for(int i=0;i<tempTEVector.Count;i++)
        val+= ((TableEntry)tempTEVector[i]).Probablilty;

    //create random value
    val = r.NextDouble()*val;

    // loop through the temp Table Entries
    for(int i=0;i<tempTEVector.Count;i++)
    {
        // increment the count on each loop
        count += ((TableEntry)tempTEVector[i]).Probablilty;

        // if the random value falls into delegated range,
        // then select that path as the next node
        if(val>Lastcount && val < count)
            return ((TableEntry)tempTEVector[i]).NodeID;

        // get the value of the last count
        Lastcount=count;
    }

    // method should never return here
    return -1;
}

通过信息素表返回下一个节点:

// updates the probabilities of the pheromone table by multiplying the selected 
// nodes probability by a radio of  newVal
public void UpdateProbabilities(double newVal, int EntryTableNodeID)
{
    TableEntry t;
    double total=0;

    // loop through all the table entries
    // get the total enumeration of probabilities and add the new value.
    // Since this total will be more than 100, a ratio multiplication is
    // applied. Although these values will not equate to exactly 100%, floating
    // point calculations will be accurate enough 
    // at least 99.99999% which is satisfactory
    for(int j=0;j<tableEntry.Length;j++)
    {
        t = tableEntry[j];

        // enumerate the total Probablilty
        total += t.Probablilty;
    
        // if the table entry matches the id of the chosen node path
        if(EntryTableNodeID==t.NodeID)
        {
            // add the new value to the total
            total += newVal;
            t = tableEntry[j];
            // add the new value the current value of the selected path
            t.Probablilty += newVal;
        }
    }

    // calculate the ratio for the multiplication
    double ratio = 100/total;

    // loop through each table entry and multiple the current probability
    // by the new ratio
    for(int j=0;j<tableEntry.Length;j++)
    {
        tableEntry[j].Probablilty *= ratio;
    }

    // this will enumerate all the values to 99.99999%
}

// Constructor takes a node to represent and a list of all connected nodes off the
// calling node
public PheromoneTable(Node n, int[] conns)
{
    this.NodeID = n.ID;

    // create a tableEntry array the same length as the number of connections
    this.tableEntry = new TableEntry[conns.Length];

    // create a new tableEntry for each connection
    for(int i=0;i<conns.Length;i++)
        tableEntry[i] = new TableEntry(conns[i]);

    // set default equal values
    for(int i=0;i<conns.Length;i++)
        tableEntry[i].Probablilty = (100 / (double)conns.Length);
}

仿真结果

以下测试将说明ANTNet算法如何影响流量路由。这些测试将显示该算法对在没有ANTNet的情况下运行的系统的有效性。由于可以打开和关闭节点,因此将进行许多测试比较,以显示当路径不再有效并且必须选择新路由时,ANTNet如何改进网络的路由。

这些测试已使用以下参数运行:

  • ANTNet
  • 模拟速度——1,000 tick p/s
  • 要拨打的呼叫总数——5000
  • 最大并发呼叫数——60
  • 节点容量——35
  • 通话持续时间——170(通话时长(以刻度为单位)
  • 减少I/O——绕过网络可视化以提高仿真速度
  • 连接时返回——连接后立即将节点返回到源

ANTNet vs. non-ANTNet

第一个测试包含两个模拟:

  • 模拟1(橙色)——ANTNet算法关闭
  • 模拟2 (蓝色)——ANTNet开启

从这个模拟中可以清楚地看出,即使完成了前500个调用,ANTNet的平均跳数也减少了大约1.5个节点。在仿真结束时,这一点变得更加明显,其中最佳路径作为选择变得更加偏向,并被重新强化为最佳路由,从而使ANTnet将网络性能提高了近3.5跳。

5.1 - 非自适应算法(橙色)与 ANTNet 算法(蓝色)

为了从不同的角度查看算法,下图描述了在关闭ANTNet算法的情况下运行,然后在第2,000次调用时激活的系统。这可以通过标签来识别,随后平均跳数花减少了近2个。

5.2 - ANTNet2000次调用后激活

环路消除

在蚂蚁返回到其源节点之前,可以调用循环消除的优化技术。循环的问题在于它们可以接收比应有的数量多几倍的信息素,从而导致自我强化循环的问题。

5.3 - 环路移除(蓝色)与非环路移除(橙色)

5.3 显示了两个模拟:

  • 模拟 1(橙色)- 循环消除OFF
  • 模拟 2(蓝色)- 循环消除ON

从这个测试来看,环路消除将平均跳数减少了1个节点,适应更加稳定。这意味着当必须选择替代路径时,循环消除算法的响应速度比常规实现快得多。

注意:两行都显示遍历的实际节点数,而不是环路删除后的数字。

适应性

模拟从网络中移除节点时网络如何适应非常重要。静态路由表可能保存最短路径,但它们不一定考虑网络流量和脱机节点。该程序已经运行了三个模拟,以显示与非自适应算法相比,系统如何适应。

5.4 - 自适应与非自适应算法

模拟1(橙色)

这是模拟器的正常运行,用于为接下来的两个模拟创建优化的信息素表。

模拟2(蓝色)

自适应算法已关闭。

节点141517被关闭,因为这些节点是进入伦敦的主要北部接入枢纽,因此交通需要转移到英格兰西部。由于网络是非自适应的,信息素表偏向于已经脱机的节点,随后被连续重定向并每次都需要更长的旅程。这一增长在图6.4中用蓝线显示。

模拟3(绿色)

自适应算法已打开。

节点141517仍然关闭,但由于网络现在设置为自适应,信息素表被重新调整,系统学习替代路由。这可以在图6.4中的绿线中看到。

引用

  1. Appleby,S.,Steward,S. (1994)。用于电信网络中控制的移动软件代理。在BT技术杂志,第12卷,第2
  2. ANTNet:自适应路由的移动代理方法。詹尼·迪卡罗和马可·多里戈。
  3. 电信网络中基于 Ant 的负载平衡。Ruud Schoonderwoerd1,2,Owen Holland3,Janet Bruten1和Leon Rothkrantz。
  4. 数据网络。Bertsekas,D.,Gallager,R. (1992)。

https://www.codeproject.com/Articles/14011/A-Conceptual-AI-Neural-Network-Data-Network-Load-B

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值