基于蚁群算法求解求解TSP问题(JAVA)

节约里程法求解TSP问题 clc clear all close all C=[35,41,35,55,55,15,25,20,10,55,30,20,50,30,15,30,10,5,20,15,45,45,45,55,65,65,45,35,41,64,40,31,35,53,65,63,2,20,5,60,40,42,24,23,11,6,2,8,13,6,47,49,27,37,57,63,53,32,36,21,17,12,24,27,15,62,49,67,56,37,37,57,47,44,46,49,49,53,61 阅读详情

转载:http://blog.youkuaiyun.com/wangqiuyun/article/details/8878298

一、TSP问题

TSP问题(Travelling Salesman Problem)即旅行商问题,又译为旅行推销员问题、货郎担问题,是数学领域中著名问题之一。假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径之中的最小值。

TSP问题是一个组合优化问题。该问题可以被证明具有NPC计算复杂性。TSP问题可以分为两类,一类是对称TSP问题(Symmetric TSP),另一类是非对称问题(Asymmetric TSP)。所有的TSP问题都可以用一个图(Graph)来描述:

V={c1, c2, …, ci, …, cn},i = 1,2, …, n,是所有城市的集合.ci表示第i个城市,n为城市的数目;

E={(r, s): r,s∈ V}是所有城市之间连接的集合;

C = {crs: r,s∈ V}是所有城市之间连接的成本度量(一般为城市之间的距离);

如果crs = csr, 那么该TSP问题为对称的,否则为非对称的。


一个TSP问题可以表达为:

求解遍历图G = (V, E, C),所有的节点一次并且回到起始节点,使得连接这些节点的路径成本最低。

二、蚁群算法

蚁群算法(ant colony optimization, ACO),又称蚂蚁算法,是一种用来在图中寻找优化路径的机率型算法。它由Marco Dorigo于1992年在他的博士论文中提出,其灵感来源于蚂蚁在寻找食物过程中发现路径的行为。蚁群算法是一种模拟进化算法,初步的研究表明该算法具有许多优良的性质。针对PID控制器参数优化设计问题,将蚁群算法设计的结果与遗传算法设计的结果进行了比较,数值仿真结果表明,蚁群算法具有一种新的模拟进化优化方法的有效性和应用价值。

蚁群算法原理:假如蚁群中所有蚂蚁的数量为m,所有城市之间的信息素用矩阵pheromone表示,最短路径为bestLength,最佳路径为bestTour。每只蚂蚁都有自己的内存,内存中用一个禁忌表(Tabu)来存储该蚂蚁已经访问过的城市,表示其在以后的搜索中将不能访问这些城市;还有用另外一个允许访问的城市表(Allowed)来存储它还可以访问的城市;另外还用一个矩阵(Delta)来存储它在一个循环(或者迭代)中给所经过的路径释放的信息素;还有另外一些数据,例如一些控制参数(α,β,ρ,Q),该蚂蚁行走玩全程的总成本或距离(tourLength),等等。假定算法总共运行MAX_GEN次,运行时间为t。

蚁群算法计算过程如下:
(1)初始化
(2)为每只蚂蚁选择下一个节点。
(3)更新信息素矩阵
(4)检查终止条件
(5)输出最优值

三、蚁群算法求解TSP问题

在该JAVA实现中我们选择使用tsplib上的数据att48,这是一个对称TSP问题,城市规模为48,其最优值为10628.其距离计算方法下图所示:

具体代码如下:

[java]  view plain copy
  1. package noah;  
  2.   
  3. import java.util.Random;  
  4. import java.util.Vector;  
  5.   
  6. public class Ant implements Cloneable {  
  7.   
  8.     private Vector<Integer> tabu; // 禁忌表  
  9.     private Vector<Integer> allowedCities; // 允许搜索的城市  
  10.     private float[][] delta; // 信息数变化矩阵  
  11.     private int[][] distance; // 距离矩阵  
  12.     private float alpha;  
  13.     private float beta;  
  14.   
  15.     private int tourLength; // 路径长度  
  16.     private int cityNum; // 城市数量  
  17.     private int firstCity; // 起始城市  
  18.     private int currentCity; // 当前城市  
  19.   
  20.     public Ant() {  
  21.         cityNum = 30;  
  22.         tourLength = 0;  
  23.     }  
  24.   
  25.     /** 
  26.      * Constructor of Ant 
  27.      *  
  28.      * @param num 
  29.      *            蚂蚁数量 
  30.      */  
  31.     public Ant(int num) {  
  32.         cityNum = num;  
  33.         tourLength = 0;  
  34.     }  
  35.   
  36.     /** 
  37.      * 初始化蚂蚁,随机选择起始位置 
  38.      *  
  39.      * @param distance 
  40.      *            距离矩阵 
  41.      * @param a 
  42.      *            alpha 
  43.      * @param b 
  44.      *            beta 
  45.      */  
  46.   
  47.     public void init(int[][] distance, float a, float b) {  
  48.         alpha = a;  
  49.         beta = b;  
  50.         // 初始允许搜索的城市集合  
  51.         allowedCities = new Vector<Integer>();  
  52.         // 初始禁忌表  
  53.         tabu = new Vector<Integer>();  
  54.         // 初始距离矩阵  
  55.         this.distance = distance;  
  56.         // 初始信息数变化矩阵为0  
  57.         delta = new float[cityNum][cityNum];  
  58.         for (int i = 0; i < cityNum; i++) {  
  59.             Integer integer = new Integer(i);  
  60.             allowedCities.add(integer);  
  61.             for (int j = 0; j < cityNum; j++) {  
  62.                 delta[i][j] = 0.f;  
  63.             }  
  64.         }  
  65.         // 随机挑选一个城市作为起始城市  
  66.         Random random = new Random(System.currentTimeMillis());  
  67.         firstCity = random.nextInt(cityNum);  
  68.         // 允许搜索的城市集合中移除起始城市  
  69.         for (Integer i : allowedCities) {  
  70.             if (i.intValue() == firstCity) {  
  71.                 allowedCities.remove(i);  
  72.                 break;  
  73.             }  
  74.         }  
  75.         // 将起始城市添加至禁忌表  
  76.         tabu.add(Integer.valueOf(firstCity));  
  77.         // 当前城市为起始城市  
  78.         currentCity = firstCity;  
  79.     }  
  80.   
  81.     /** 
  82.      *  
  83.      * 选择下一个城市 
  84.      *  
  85.      * @param pheromone 
  86.      *            信息素矩阵 
  87.      */  
  88.   
  89.     public void selectNextCity(float[][] pheromone) {  
  90.         float[] p = new float[cityNum];  
  91.         float sum = 0.0f;  
  92.         // 计算分母部分  
  93.         for (Integer i : allowedCities) {  
  94.             sum += Math.pow(pheromone[currentCity][i.intValue()], alpha)  
  95.                     * Math.pow(1.0 / distance[currentCity][i.intValue()], beta);  
  96.         }  
  97.         // 计算概率矩阵  
  98.         for (int i = 0; i < cityNum; i++) {  
  99.             boolean flag = false;  
  100.             for (Integer j : allowedCities) {  
  101.                 if (i == j.intValue()) {  
  102.                     p[i] = (float) (Math.pow(pheromone[currentCity][i], alpha) * Math  
  103.                             .pow(1.0 / distance[currentCity][i], beta)) / sum;  
  104.                     flag = true;  
  105.                     break;  
  106.                 }  
  107.             }  
  108.             if (flag == false) {  
  109.                 p[i] = 0.f;  
  110.             }  
  111.         }  
  112.         // 轮盘赌选择下一个城市  
  113.         Random random = new Random(System.currentTimeMillis());  
  114.         float sleectP = random.nextFloat();  
  115.         int selectCity = 0;  
  116.         float sum1 = 0.f;  
  117.         for (int i = 0; i < cityNum; i++) {  
  118.             sum1 += p[i];  
  119.             if (sum1 >= sleectP) {  
  120.                 selectCity = i;  
  121.                 break;  
  122.             }  
  123.         }  
  124.         // 从允许选择的城市中去除select city  
  125.         for (Integer i : allowedCities) {  
  126.             if (i.intValue() == selectCity) {  
  127.                 allowedCities.remove(i);  
  128.                 break;  
  129.             }  
  130.         }  
  131.         // 在禁忌表中添加select city  
  132.         tabu.add(Integer.valueOf(selectCity));  
  133.         // 将当前城市改为选择的城市  
  134.         currentCity = selectCity;  
  135.     }  
  136.   
  137.     /** 
  138.      * 计算路径长度 
  139.      *  
  140.      * @return 路径长度 
  141.      */  
  142.     private int calculateTourLength() {  
  143.         int len = 0;  
  144.         //禁忌表tabu最终形式:起始城市,城市1,城市2...城市n,起始城市  
  145.         for (int i = 0; i < cityNum; i++) {  
  146.             len += distance[this.tabu.get(i).intValue()][this.tabu.get(i + 1)  
  147.                     .intValue()];  
  148.         }  
  149.         return len;  
  150.     }  
  151.   
  152.     public Vector<Integer> getAllowedCities() {  
  153.         return allowedCities;  
  154.     }  
  155.   
  156.     public void setAllowedCities(Vector<Integer> allowedCities) {  
  157.         this.allowedCities = allowedCities;  
  158.     }  
  159.   
  160.     public int getTourLength() {  
  161.         tourLength = calculateTourLength();  
  162.         return tourLength;  
  163.     }  
  164.   
  165.     public void setTourLength(int tourLength) {  
  166.         this.tourLength = tourLength;  
  167.     }  
  168.   
  169.     public int getCityNum() {  
  170.         return cityNum;  
  171.     }  
  172.   
  173.     public void setCityNum(int cityNum) {  
  174.         this.cityNum = cityNum;  
  175.     }  
  176.   
  177.     public Vector<Integer> getTabu() {  
  178.         return tabu;  
  179.     }  
  180.   
  181.     public void setTabu(Vector<Integer> tabu) {  
  182.         this.tabu = tabu;  
  183.     }  
  184.   
  185.     public float[][] getDelta() {  
  186.         return delta;  
  187.     }  
  188.   
  189.     public void setDelta(float[][] delta) {  
  190.         this.delta = delta;  
  191.     }  
  192.   
  193.     public int getFirstCity() {  
  194.         return firstCity;  
  195.     }  
  196.   
  197.     public void setFirstCity(int firstCity) {  
  198.         this.firstCity = firstCity;  
  199.     }  
  200.   
  201. }  

[java]  view plain copy
  1. package noah;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.FileInputStream;  
  5. import java.io.IOException;  
  6. import java.io.InputStreamReader;  
  7.   
  8. public class ACO {  
  9.   
  10.     private Ant[] ants; // 蚂蚁  
  11.     private int antNum; // 蚂蚁数量  
  12.     private int cityNum; // 城市数量  
  13.     private int MAX_GEN; // 运行代数  
  14.     private float[][] pheromone; // 信息素矩阵  
  15.     private int[][] distance; // 距离矩阵  
  16.     private int bestLength; // 最佳长度  
  17.     private int[] bestTour; // 最佳路径  
  18.   
  19.     // 三个参数  
  20.     private float alpha;  
  21.     private float beta;  
  22.     private float rho;  
  23.   
  24.     public ACO() {  
  25.   
  26.     }  
  27.   
  28.     /** 
  29.      * constructor of ACO 
  30.      *  
  31.      * @param n 
  32.      *            城市数量 
  33.      * @param m 
  34.      *            蚂蚁数量 
  35.      * @param g 
  36.      *            运行代数 
  37.      * @param a 
  38.      *            alpha 
  39.      * @param b 
  40.      *            beta 
  41.      * @param r 
  42.      *            rho 
  43.      *  
  44.      **/  
  45.     public ACO(int n, int m, int g, float a, float b, float r) {  
  46.         cityNum = n;  
  47.         antNum = m;  
  48.         ants = new Ant[antNum];  
  49.         MAX_GEN = g;  
  50.         alpha = a;  
  51.         beta = b;  
  52.         rho = r;  
  53.     }  
  54.   
  55.     // 给编译器一条指令,告诉它对被批注的代码元素内部的某些警告保持静默  
  56.     @SuppressWarnings("resource")  
  57.     /** 
  58.      * 初始化ACO算法类 
  59.      * @param filename 数据文件名,该文件存储所有城市节点坐标数据 
  60.      * @throws IOException 
  61.      */  
  62.     private void init(String filename) throws IOException {  
  63.         // 读取数据  
  64.         int[] x;  
  65.         int[] y;  
  66.         String strbuff;  
  67.         BufferedReader data = new BufferedReader(new InputStreamReader(  
  68.                 new FileInputStream(filename)));  
  69.         distance = new int[cityNum][cityNum];  
  70.         x = new int[cityNum];  
  71.         y = new int[cityNum];  
  72.         for (int i = 0; i < cityNum; i++) {  
  73.             // 读取一行数据,数据格式1 6734 1453  
  74.             strbuff = data.readLine();  
  75.             // 字符分割  
  76.             String[] strcol = strbuff.split(" ");  
  77.             x[i] = Integer.valueOf(strcol[1]);// x坐标  
  78.             y[i] = Integer.valueOf(strcol[2]);// y坐标  
  79.         }  
  80.         // 计算距离矩阵  
  81.         // 针对具体问题,距离计算方法也不一样,此处用的是att48作为案例,它有48个城市,距离计算方法为伪欧氏距离,最优值为10628  
  82.         for (int i = 0; i < cityNum - 1; i++) {  
  83.             distance[i][i] = 0; // 对角线为0  
  84.             for (int j = i + 1; j < cityNum; j++) {  
  85.                 double rij = Math  
  86.                         .sqrt(((x[i] - x[j]) * (x[i] - x[j]) + (y[i] - y[j])  
  87.                                 * (y[i] - y[j])) / 10.0);  
  88.                 // 四舍五入,取整  
  89.                 int tij = (int) Math.round(rij);  
  90.                 if (tij < rij) {  
  91.                     distance[i][j] = tij + 1;  
  92.                     distance[j][i] = distance[i][j];  
  93.                 } else {  
  94.                     distance[i][j] = tij;  
  95.                     distance[j][i] = distance[i][j];  
  96.                 }  
  97.             }  
  98.         }  
  99.         distance[cityNum - 1][cityNum - 1] = 0;  
  100.         // 初始化信息素矩阵  
  101.         pheromone = new float[cityNum][cityNum];  
  102.         for (int i = 0; i < cityNum; i++) {  
  103.             for (int j = 0; j < cityNum; j++) {  
  104.                 pheromone[i][j] = 0.1f; // 初始化为0.1  
  105.             }  
  106.         }  
  107.         bestLength = Integer.MAX_VALUE;  
  108.         bestTour = new int[cityNum + 1];  
  109.         // 随机放置蚂蚁  
  110.         for (int i = 0; i < antNum; i++) {  
  111.             ants[i] = new Ant(cityNum);  
  112.             ants[i].init(distance, alpha, beta);  
  113.         }  
  114.     }  
  115.   
  116.     public void solve() {  
  117.         // 迭代MAX_GEN次  
  118.         for (int g = 0; g < MAX_GEN; g++) {  
  119.             // antNum只蚂蚁  
  120.             for (int i = 0; i < antNum; i++) {  
  121.                 // i这只蚂蚁走cityNum步,完整一个TSP  
  122.                 for (int j = 1; j < cityNum; j++) {  
  123.                     ants[i].selectNextCity(pheromone);  
  124.                 }  
  125.                 // 把这只蚂蚁起始城市加入其禁忌表中  
  126.                 // 禁忌表最终形式:起始城市,城市1,城市2...城市n,起始城市  
  127.                 ants[i].getTabu().add(ants[i].getFirstCity());  
  128.                 // 查看这只蚂蚁行走路径距离是否比当前距离优秀  
  129.                 if (ants[i].getTourLength() < bestLength) {  
  130.                     // 比当前优秀则拷贝优秀TSP路径  
  131.                     bestLength = ants[i].getTourLength();  
  132.                     for (int k = 0; k < cityNum + 1; k++) {  
  133.                         bestTour[k] = ants[i].getTabu().get(k).intValue();  
  134.                     }  
  135.                 }  
  136.                 // 更新这只蚂蚁的信息数变化矩阵,对称矩阵  
  137.                 for (int j = 0; j < cityNum; j++) {  
  138.                     ants[i].getDelta()[ants[i].getTabu().get(j).intValue()][ants[i]  
  139.                             .getTabu().get(j + 1).intValue()] = (float) (1. / ants[i]  
  140.                             .getTourLength());  
  141.                     ants[i].getDelta()[ants[i].getTabu().get(j + 1).intValue()][ants[i]  
  142.                             .getTabu().get(j).intValue()] = (float) (1. / ants[i]  
  143.                             .getTourLength());  
  144.                 }  
  145.             }  
  146.             // 更新信息素  
  147.             updatePheromone();  
  148.             // 重新初始化蚂蚁  
  149.             for (int i = 0; i < antNum; i++) {  
  150.                 ants[i].init(distance, alpha, beta);  
  151.             }  
  152.         }  
  153.   
  154.         // 打印最佳结果  
  155.         printOptimal();  
  156.     }  
  157.   
  158.     // 更新信息素  
  159.     private void updatePheromone() {  
  160.         // 信息素挥发  
  161.         for (int i = 0; i < cityNum; i++)  
  162.             for (int j = 0; j < cityNum; j++)  
  163.                 pheromone[i][j] = pheromone[i][j] * (1 - rho);  
  164.         // 信息素更新  
  165.         for (int i = 0; i < cityNum; i++) {  
  166.             for (int j = 0; j < cityNum; j++) {  
  167.                 for (int k = 0; k < antNum; k++) {  
  168.                     pheromone[i][j] += ants[k].getDelta()[i][j];  
  169.                 }  
  170.             }  
  171.         }  
  172.     }  
  173.   
  174.     private void printOptimal() {  
  175.         System.out.println("The optimal length is: " + bestLength);  
  176.         System.out.println("The optimal tour is: ");  
  177.         for (int i = 0; i < cityNum + 1; i++) {  
  178.             System.out.println(bestTour[i]);  
  179.         }  
  180.     }  
  181.   
  182.   
  183.     /** 
  184.      * @param args 
  185.      * @throws IOException 
  186.      */  
  187.     public static void main(String[] args) throws IOException {  
  188.         System.out.println("Start....");  
  189.         ACO aco = new ACO(48, 10, 100, 1.f, 5.f, 0.5f);  
  190.         aco.init("c://data.txt");  
  191.         aco.solve();  
  192.     }  
  193.   
  194. }  

运行结果截图:

四、总结

蚁群算法是一种本质上并行的算法。每只蚂蚁搜索的过程彼此独立,仅通过信息激素进行通信。所以蚁群算法则可以看作是一个分布式的多agent系统,它在问题空间的多点同时开始进行独立的解搜索,不仅增加了算法的可靠性,也使得算法具有较强的全局搜索能力,但是也正是由于其并行性的本质,蚁群算法的搜索时间较长,在求解小规模的NP问题时耗费的计算资源相比其他启发式算法要多,因而显得效率很低下,而当问题趋向于大规模时,蚁群算法还是存在难收敛的问题,个人感觉除非你真想耗费大量计算资源来干一件事情,否则还是慎用蚁群算法。

注:本文部分内容来源于网络,但程序以及分析结果属于本人成果,转载请注明!


蚁群算法解决TSP问题详细讲解(含python代码) 蚁群算法解决TSP问题详细讲解(含python代码)(一)TSP问题(二)蚁群算法(1)蚁群算法简单介绍(2)蚁群算法解决TSP问题基本原理(3)蚁群算法的核心步骤3.1 路径构建3.2 信息素更新(三)代码分析(1)设置参数(2)距离矩阵(3)设置信息素矩阵和蚂蚁路径矩阵(4)当前城市选择下一城市(5)更新信息素(6)完整代码 (一)TSP问题 TSP问题:旅行商问题,即TSP问题(Traveling Salesman Problem),给定一组城市和每对城市之间的距离,商家从其中一个城市出发,要求每个 阅读详情

相关推荐

蚁群算法

一、 算法步骤 1 根据实验目的初始化城市的距离矩阵 2 用贪心算法,随机选择起点,根据信息素初始化公式初始化信息素矩阵 3 蚁群的每一只蚂蚁随机选择出发点,通过计算公式算出转移到其他城市的概率,再根据轮盘赌算法选择下一个城市,直到城市全部走完 4 根据蚂蚁所走路线的长度,使用参数公式更新信息素矩阵,并得到局部最优解 5 迭代4.3和4.4直至结果满足特定条件或设定迭代次

怀楚之心 2436

【路径规划】基于蚁群算法求解TSP问题

​问题定义:巡回旅行商问题 给定一组n个城市和俩俩之间的直达距离,寻找一条闭合的旅程,使得每个城市刚好经过一次且总的旅行距离最短。TSP问题也称为货郎担问题,是一个古老的问题。最早可以追溯到1759年Euler提出的骑士旅行的问题。1948年,由美国兰德公司推动,TSP成为近代组合优化领域的典型难题。TSP是一个具有广泛的应用背景和重要理论价值的组合优化问题。近年来,有很多解决该问题的较为有效的算法不断被推出,例如Hopfield神经网络方法,模拟退火方法以及遗传算法方法等。TSP搜索空间随着城市数n的.

m0_60703264的博客 4781

蚁群算法java实现_蚁群算法java实现以及TSP问题蚁群算法求解

1. 蚁群算法简介蚁群算法(Ant Clony Optimization, ACO)是一种群智能算法,它是由一群无智能或有轻微智能的个体(Agent)通过相互协作而表现出智能行为,从而为求解复杂问题提供了一个新的可能性。蚁群算法最早是由意大利学者Colorni A., Dorigo M. 等于1991年提出。经过20多年的发展,蚁群算法在理论以及应用研究上已经得到巨大的进步。蚁群算法是一种仿生学算...

weixin_26997697的博客 891

蚁群算法java实现以及TSP问题蚁群算法求解

1. 蚁群算法简介      蚁群算法(Ant Clony Optimization, ACO)是一种群智能算法,它是由一群无智能或有轻微智能的个体(Agent)通过相互协作而表现出智能行为,从而为求解复杂问题提供了一个新的可能性。蚁群算法最早是由意大利学者Colorni A., Dorigo M. 等于1991年提出。经过20多年的发展,蚁群算法在理论以及应用研究上已经得到巨大的进步。

Fisher_n的专栏 3413

基于java的蚁群算法求解TSP问题改良

基于java的蚁群算法求解TSP问题改良 第一次发表文章,写的不好的地方还请各位看官批评指正 前面看了一篇优快云博主「Keyu_」的原创文章:记一次蚁群算法解决TSP问题,文章链接:link.,和自己需要解决的问题实际结合以后,发现存在许多问题,对其进行了改进,并且为了方便各位看官理解,所有代码我都进行了注解,手打不易。 问题:这位博主的代码中求解城市间距离的二维数组为int类型,在进行开平方计算的时候,会将小数点忽略掉,导致误差。对代码里的错误进行了修改。一共计算70个城市。话不多说,直接上代码。 蚂蚁

weixin_46879837的博客 622

基于蚁群算法求解TSP问题的Java实现完整项目

旅行商问题(Traveling Salesman Problem, TSP)是运筹学与组合优化领域中最具代表性的难题之一。其核心任务是在给定一组城市及其两两之间的距离后,寻找一条经过每个城市恰好一次并最终返回起点的最短闭合路径。从图论的角度来看,TSP可以被严格地形式化为在一个加权完全图 $ G = (V, E) $ 中寻找一条哈密尔顿回路(Hamiltonian Cycle),使得该回路的总权重最小。

weixin_36064575的博客 762

蚁群算法的Java实现求解TSP问题

基于蚁群算法求解求解TSP问题(JAVA) 分类: 算法2013-05-03 00:25 2034人阅读 评论(9) 收藏 举报 蚁群算法TSP 一、TSP问题 TSP问题(Travelling Salesman Problem)即旅行商问题,又译为旅行推销员问题、货郎担问题,是数学领域中著名问题之一。假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路径的

alaclp的专栏 3474

[数据转换]将NetCDF(NC)文件转换成单个GeoTIFF文件

有时候要提取tif格式数据中的气象数据,但从气象网站上下载的却是NC格式的文件。这就需要我们将NC格式的文件转换成TIF格式的文件。

G_sea_young的博客 1004

tsp java_蚁群算法java实现以及TSP问题蚁群算法求解

1. 蚁群算法简介蚁群算法(Ant Clony Optimization, ACO)是一种群智能算法,它是由一群无智能或有轻微智能的个体(Agent)通过相互协作而表现出智能行为,从而为求解复杂问题提供了一个新的可能性。蚁群算法最早是由意大利学者Colorni A., Dorigo M. 等于1991年提出。经过20多年的发展,蚁群算法在理论以及应用研究上已经得到巨大的进步。蚁群算法是一种仿生学算...

weixin_39951419的博客 349

升降机SEW MOVIDRIVE变频器设置

选择PO1 第2,3,9,13 位,点击“SendPA”Start reference,编码器反馈值为0(PI2/3 Actual position=0)提示:传送参考位置前请断开变频器安全24V电源,否则会弹出禁止修改提示框;提示:做这一步时,如果出现电机不能转动,或产生报警不能通过编码器匹配。下载配置的参数,提示:下载参数需要断开变频器的安全24V电源。编码器匹配通过后点击下一步,进入下图画面传送参考位置。1电机不能转动:a可能是由于变频器的安全24V未给。点击2.SEW总线扩展定位,定位块设置。

xdpcxq的专栏 5395

Auto.js凉了之后,我们该用啥?AutoX.js保姆级环境搭建与第一个脚本实战(2024最新)

本文详细介绍了AutoX.js作为Auto.js替代方案的环境搭建与脚本开发实战指南。从技术生态现状分析到2024最新环境配置,再到编写第一个实用脚本和进阶调试技巧,帮助开发者无缝迁移至AutoX.js平台。特别适合需要手机自动化的JavaScript开发者,涵盖从基础到企业级应用的全套解决方案。

weixin_28737073的博客 388
上一篇: 隐马尔可夫模型攻略
下一篇: 基于模拟退火算法求解TSP问题(JAVA)
Savitch
博客等级 码龄16年 84粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值