算法
ninekwll0791
这个作者很懒,什么都没留下…
展开
-
floyd的三重循环
1、其他的不多说,三重循环代码,哪里都可以找到。 2、代码如下: for(int k = 1; k <= n; k++){ for(int i = 1; i <= n; i++){ for(int j = 1; j <= n; j++){ if(d[i][j] > d[i][k] + d[k][j]){ d[i][j] = d[i][k] + d[k][j]; } } } } 3、为什么k一定要放在最外层,不是很懂。需要自己去理解。网上有很多,可以原创 2022-05-07 11:44:33 · 282 阅读 · 0 评论 -
TSP的求解
1、TSP这类问题可以总结一下,类似的排序问题也可以用这种方法解决。 2、TSP主要是指38(随便说的可以是n)个城市之间的访问顺序,然后形成的距离最小。 3、主要的问题是怎么生成 这个序列,然后迭代计算得到最优的序列。 生成序列,应该比较好办,大部分的软件都有函数,可以生成,比如matlab可以用 randperm ,不重复的数字。 4、然后是,怎么变换这个序列,得到新的一个序列,就是解。一种简单的方法,就是随机生成2个数字,比如12和34,然后让12位置和34位置 对应的数字进行对调。 分析:模拟退火算原创 2022-04-17 16:42:39 · 2997 阅读 · 0 评论 -
遗传算法的算子
1、主要说明一下交叉算子。 2、交叉算子是产生新的解,怎么产生,就是通过原有的两个旧解得到两个新解,就像一对夫妻得到新的一对子女一样。 3、比如有2个解 x1 = [1,3],x2 = 【6,5】 ,怎么得到新的解。 4、先通过十进制进行交叉,可以通过下面的公式: 参考:https://zhidao.baidu.com/question/1669552733103791747.html 这里有个参数 alpha,我们这里假设是0.3,看看结果如何? x1_new =[ 10.3+60.7 , 30.3+5原创 2022-01-23 15:34:11 · 1190 阅读 · 0 评论 -
模拟退火算法
1、抓住关进内容进行理解。 2、 两个关键点:一个解的变换,怎么变换是个关键;一个是怎么找到更优的解; (1)解的变换可以根据问题来进行,比如模拟退火大都会说道tsp问题,所以一个解代表着一条路径,变换的方式可以自己定义,如果解是0,1表示的,那么就可以用0,1变换的方式,或者是实数解,可以有一个扰动进行加减; (2)怎么找到更优的解。当进行变化了以后,就可以得到新的解,然后进行比较,soluntion_new 比 soluntion_old更优的话,可以替代;但是,如果不是更优的话,那么可以按照一定的比例原创 2021-12-29 13:45:48 · 579 阅读 · 0 评论 -
HS的记录
1、 按照自己的步骤记录. 2、 首先:初始解的产生问题。分几种情况:0-1,整数,小数 是一个解,还是多个解。我们定位为多个解,像遗传算法一样,有个群体。在和声搜索里面,叫做“音乐库”,比如有20个,就有20个曲子,肯定有一个曲子最好听,意思就是目标函数值最优。 解的编码问题,看图: matlab语言的话,可以直接randi或者rand函数去生成随机解。 3、解的变换。或者说新的解怎么产生。 思路: (1)音乐库里面取值的变换。音乐库里面有20个解,放着不动。然后,可以循环随机生成20个新解,一个一个来原创 2021-06-14 21:15:00 · 110 阅读 · 0 评论