Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 蚁群优化——蚂蚁的移动_Algorithm_Mathematical Optimization - Fatal编程技术网

Algorithm 蚁群优化——蚂蚁的移动

Algorithm 蚁群优化——蚂蚁的移动,algorithm,mathematical-optimization,Algorithm,Mathematical Optimization,我正在尝试实现蚁群优化。试图引用本文:。 由于我没有得到这些问题的任何答案,我在实现过程中被困在了一半。所以我现在要问一些关于蚁群的具体问题: 到目前为止,我所做的是,为地图周围的边界以及障碍物设置一个2d阵列地图,带有0值 通过在该阵列中随机插入0[行,列],在随机位置生成障碍物 我把所有蚂蚁开始旅程的源头放在左下角。我把目的地位置放在右上角 用VB.Net中的图形功能编写了可视化绘制地图的代码,效果良好。信息素的颜色渐变显示在地图上(即,更多的信息素沉积在地图上,更多的白色阴影,否则为深色阴

我正在尝试实现蚁群优化。试图引用本文:。 由于我没有得到这些问题的任何答案,我在实现过程中被困在了一半。所以我现在要问一些关于蚁群的具体问题:

  • 到目前为止,我所做的是,为地图周围的边界以及障碍物设置一个2d阵列地图,带有
    0

  • 通过在该阵列中随机插入
    0
    [行,列],在随机位置生成障碍物

  • 我把所有蚂蚁开始旅程的源头放在左下角。我把目的地位置放在右上角

  • 用VB.Net中的图形功能编写了可视化绘制地图的代码,效果良好。信息素的颜色渐变显示在地图上(即,更多的信息素沉积在地图上,更多的白色阴影,否则为深色阴影)

  • 我当前的实现伪代码如下所示:

    for each ant from 1 to colonysize
      create an ant and insert it to the ant_array
      set the ant's current position to the starting position in the map
    end for
    
    for each rows in map array
      for each column in map array
        if it is first row or first column or last row or last column(these holds the boundary), then...
           assign 0 as value to <row,column> in the map array
        otherwise,
           assign INITIAL_PHEROMONE_FACTOR as value to <row,column> in the map array 
        end if
      end for
    end of
    
    for 5 random locations in map(ie. <row, column> )
      insert 0 as value to denote obstacle
    end for
    
    for 1 to TOTAL_NUMBER_OF_ITERATIONS
      for 1 to TOTAL_ANTS_IN_COLONY
    
         find the neighbors of the current ant in top, right, bottom and left positions
    
         choose randomly a neighboring position from the above 
         check whether that location has an obstacle or is a boundary (ie. if it has 0 as value in array map)
         if so, 
        repeat the above two steps of randomly chosing another neighboring position which was not already considered
         otherwise, continue to the next line..
    
    
         set the neighbor position we have selected above as the current position of the ant
         save this position to the ant's local path storage
    
         if the current position of this ant is the destination location, 
        then end program
    
      end for
    
      evaporate pheromones in the map at a constant factor
      deposit pheromones on the current location of all the ants
    
    
      draw the visual representationg of the map
    end for
    
    从1到colonysize的每只蚂蚁
    创建一个ant并将其插入ant_数组
    将蚂蚁的当前位置设置为地图中的起始位置
    结束
    对于映射数组中的每行
    对于映射数组中的每列
    如果它是第一行或第一列或最后一行或最后一列(它们保持边界),那么。。。
    将0指定为映射数组中的值
    否则,,
    将初始信息素因子指定为地图数组中的值
    如果结束
    结束
    结束
    地图中的5个随机位置(即)
    插入0作为表示障碍物的值
    结束
    对于1到总迭代次数
    在蚁群中的蚂蚁总数为1
    在顶部、右侧、底部和左侧位置查找当前蚂蚁的邻居
    从上面随机选择一个相邻位置
    检查该位置是否有障碍物或是边界(即,在阵列图中是否有0作为值)
    如果是,,
    重复上述两个步骤,随机选择另一个尚未考虑的相邻位置
    否则,请继续下一行。。
    将上面选择的相邻位置设置为蚂蚁的当前位置
    将此位置保存到ant的本地路径存储
    如果该蚂蚁的当前位置是目标位置,
    然后结束程序
    结束
    以恒定因子蒸发地图中的信息素
    在所有蚂蚁的当前位置放置信息素
    绘制地图的视觉表示
    结束
    
    以下是我迄今为止所做工作的屏幕截图:

    目前,实施陷入僵局。当我读到谷歌上提到的其他文章时,据说蚂蚁最初是随机行走的。但是路径上的信息素浓度被其他蚂蚁用来选择路径。这意味着,如果一只蚂蚁找到了目标,它应该返回巢穴而不是终止程序?其他蚂蚁如何选择信息素浓度高的路径?无法保证其他蚂蚁会沿着正确的道路前进

    我真的很困惑。我理解这个简单的现实例子。蚂蚁开始随机移动寻找食物,如果蚂蚁找到食物,它会返回巢穴并再次返回,因此该路径中的信息素沉积会更高,其他蚂蚁会选择该路径

    但当我尝试实现时,它对我来说变得棘手和混乱。
    我真的希望能有一些简单的想法或解释。我不是在寻找代码。这就是为什么我编写了psuedo代码,而没有发布到目前为止实际实现的代码。

    以下是蚁群优化所做的:

  • 派第一只蚂蚁来。因为最初板上没有信息素,第一只蚂蚁只能用随机移动来寻找食物的路径
  • 在形成第一只蚂蚁找到的路径的所有细胞上增加少量信息素值
  • 发送另一只蚂蚁,这只蚂蚁应该通过选择下一个要前往的细胞找到一条路径,这样,信息素值高的细胞比信息素值低的细胞更有可能被选中。由于随机因素的影响,蚂蚁有时会选择信息素含量较低的路径,有时会产生更好/更短的路径
  • 如果蚂蚁成功了,那么增加路径上的信息素值,这样路径上的细胞更有可能被选中。如果ant没有成功,则中止ant并重新开始
  • 偶尔,减少整个电路板上的信息素,这样成功率较低的细胞会被拾取的越来越少
  • 重复3次,直到路径足够好
  • 在一段时间内,最成功的路径将比不成功的路径包含更多的信息素

    不能保证其他蚂蚁会沿着正确的道路前进


    这就是算法中的随机性。如果蚂蚁只使用经过尝试和测试的路径,那么它将永远无法改进路径。使用加权随机性来选择下一个单元的意义在于,这样一只迷路的蚂蚁可能会意外地发现一条比原始路径更好的路径。

    您可能需要查看视觉表示。对于延迟,我非常抱歉。我刚做了些别的事情。谢谢你的解释。根据你的解释,我的理解是,我们先派了一只蚂蚁。然后我们把信息素放在它走的路上。第二只蚂蚁被部署(同时不是吗?),它会选择具有较高信息素水平的细胞并移向它。但是我们不是在蚂蚁移动的时候储存信息素吗?在这种情况下,它会选择起始位置本身,因为它有很高的信息素,从而导致回路无限大,而没有任何蚂蚁移动?@VppMan:蚂蚁只喜欢走信息素浓度较高的路径,仅仅是因为一条neig