蚁群算法再优化:combine aco algorithm with Sarsa in RL

news2024/12/26 20:46:51

蚁群算法再优化:combine aco algorithm with Sarsa in RL

  • 蚁群算法、Sarsa介绍和TSP问题介绍
    • TSP和Sarsa
    • aco algorithm
  • 具体的改进和代码
    • 改进说明
    • 部分代码
  • 数值实验
    • 结论分析
  • 参考文献

蚁群算法、Sarsa介绍和TSP问题介绍

在进行蚁群算法优化介绍之前,笔者先将涉及到的算法等应用背景与大家说清楚。

TSP和Sarsa

TSP问题叫旅行商问题,即给定n个城市和他们的坐标,城市之间的距离表示为dij(i,j分别为不同城市的下标),d的距离一般用欧式距离,且为对称问题(就是i->j 和 j->i的距离是相等的),我们要寻找一个哈密顿回路,来使得回路的消耗最小,这就是我们的TSP问题的目标。
Sarsa算法是强化学习中智能体在未知空间学习策略的一种经典算法。其大致思路是智能体(agent)下一时刻采取的动作参考动作所带来的收益,且以ε的概率采取获得收益的最大动作,1-ε的概率随机选取剩下的动作进行寻优。
具体的相关的文章可以参看笔者之前的blog,强化学习的Sarsa与Q-Learning的Cliff-Walking对比实验.下面引用文章中Sarsa的伪代码。
在这里插入图片描述

aco algorithm

蚁群算法是一种仿生的启发式算法,也是经典的启发式算法之一。提出多年来有不少学者在研究蚁群并进行改进,很多算法会将蚁群算法和其他启发式算法结合起来,或者和现在流行的深度学习,强化学习结合,从而产生寻优能力更加强大的算法。当然经典的蚁群算法在解决TSP问题中的效果已经远不如最好的方法,但是从基础小部分研究改进起,才能构建好高楼大厦。这也是文章的目的。
蚁群算法根据之前蚂蚁留下的信息素来决定接下来将要走的道路,直到到达目的地,也就是著名的蚂蚁效应。该思路被用来设计成ACO,在TSP问题中进行了应用。下面是蚁群算法的流程图
在这里插入图片描述

具体的改进和代码

改进说明

以一定概率rr(用伪随机数),当rr>0.1时,选最大的下一个城市,来进行城市回路的构建
以1-ε的概率选择3个最好的下一个城市中的一个
改进的原因:

 引用了Sarsa的思路进行探索
 且探索的是较好的那几个城市中一个
 不是所有城市是因为,最优解的边不会太差,所以不是选取所有的边进行等概率的选择

全部的代码,笔者已经上传到了CSDN中,有需要的可以下载实验
蚁群算法改进

部分代码

下面是根据原来的蚁群算法中,进行改进的部分,其他与原来的一致

        if rr > 0.1:
            for i, probability in enumerate(probabilities):
                rand -= probability
                if rand <= 0:
                    selected = i
                    break
        else:
            sorted_allowed = sorted(enumerate(probabilities), key=lambda x: x[1],reverse=True)
            ex_allowed = sorted_allowed[:2]
            selected = random.choice([tup[0] for tup in ex_allowed])
            while probabilities[selected] == 0:
                selected = random.choice([tup[0] for tup in ex_allowed])

图取自参考文献【1】

数值实验

笔者经过在TSP的公开测试机att48上进行实验证明,经过调参和参数的确定,在进行了1000次的总体实验中,进行数据的收集和总结,最后证明该改进是有效果的,比原来本身的算法取得**1%**的进步。
数据集和代码在签名的代码csdn文件的分享中。
笔者用两组参数进行原蚁群算法和改进蚁群算法的实验,一共4组实验,下面给出参数和实验结果,并进行讨论。
参数的意义分别是,ant数,迭代次数,α,β,衰减率r,固定的Q值 和 选取的计算信息素方式

第一组参数
10, 100, 1.0, 10.0, 0.5, 10, 3
改进的蚁群:ave = 36366      min = 34575
未改进的蚁群:ave = 36536    min=35251


第二组参数
40, 50, 0.1, 18.0, 0.7, 48, 3
改进的蚁群:ave = 35949      min = 34448
未改进的蚁群:ave = 35667    min=34852

结论分析

在参数等控制变量的前提下,改进的蚁群比未改进的最小值要小,注意到第二组参数的改进的ave比没改进的ave高,但是最小值更小,这说明改进的蚁群进行的搜索空间比未改进的更大,所以获得的寻优结果更好。

参考文献

【1】MATLAB智能算法30个案例分析,ISBN:9787512403512,作者:史峰,王辉 等编著

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/385702.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Apache Pulsar 云原生消息中间件之王

一、简介 pulsar&#xff0c;消息中间件&#xff0c;是一个用于服务器到服务器的消息系统&#xff0c;具有多租户、高性能等优势。 pulsar采用发布-订阅的设计模式&#xff0c;producer发布消息到topic&#xff0c;consumer订阅这些topic处理流入的消息&#xff0c;并当处理完…

OIDC OAuth2.0 认证协议最佳实践系列 02 - 授权码模式(Authorization Code)接入 Authing

在上一篇文章OIDC & OAuth2.0 认证协议最佳实践系列 02 - 授权码模式&#xff08;Authorization Code&#xff09;接入 Authing中&#xff0c;我们整体介绍 OIDC / OAuth2.0 协议&#xff0c;本次我们将重点围绕授权码模式&#xff08;Authorization Code&#xff09;以及接…

RabbitMQ第一讲

目录 一、RabbitMQ-01 1.1 MQ概述 1.2 MQ的优势和劣势 1.2.1 优势 1.2.2 劣势 1.2.3 MQ应用场景 1.2.4 常用的MQ产品 1.3 RabbitMQ的基本介绍 1.3.1 AMQP介绍 1.3.2 RabbitMQ基础架构 1.3.3 RabbitMQ的6种工作模式 ​编辑 1.4 AMQP和JMS 1.4.1 AMQP 1.4.2 JMS …

00后跨专业学软件测试,斩获8.5K高薪逆袭职场

我想说的第一句&#xff1a;既然有梦想&#xff0c;就应该去拼搏还记得&#xff0c;我大学毕业前&#xff0c;就已经暗下决心到xxx培训机构接受培训。那个时候&#xff0c;没有任何海同公司的人主动找我或者联系过我&#xff0c;我是自己在网上发现了xxxx培训机构的&#xff01…

PLC实验—西门子S7 1200 PID控制步进电机转速

PLC实验—西门子S7 1200 PID控制步进电机转速 严格讲并不是PID控制&#xff0c;因为并不是并不研究这个方向&#xff0c;研二又比较忙&#xff0c;时间限制只加了比例系数 这里只是抛砖引玉&#xff0c;希望大家可以进一步完善补充 思路 大体思路如下&#xff0c;根据超声波…

三八节买什么数码好物?三八女神节实用不吃灰的数码好物推荐

三八节快到了&#xff0c;在这个小节日里&#xff0c;有哪些实用性强的数码好物值得入手呢&#xff1f;针对这个问题&#xff0c;我来给大家推荐几款实用性超强的数码好物&#xff0c;一起来看看吧。 一、蓝牙耳机 推荐产品&#xff1a;南卡小音舱 参考价&#xff1a;239 南…

Python中Opencv和PIL.Image读取图片的差异对比

近日&#xff0c;在进行深度学习进行推理的时候&#xff0c;发现不管怎么样都得不出正确的结果&#xff0c;再仔细和正确的代码进行对比了后发现原来是Python中不同的库读取的图片数组是有差异的。 image np.array(Image.open(image_file).convert(RGB)) image cv2.imread(…

【持续学习引导:pansharpening】

A continual learning-guided training framework for pansharpening &#xff08;一种持续学习引导的全色锐化训练框架&#xff09; 基于监督学习的全色锐化方法自出现以来一直受到批评&#xff0c;因为它们依赖于尺度移位假设&#xff0c;即这些方法在降低分辨率时的性能通…

IntelliJ IDEA如何整合Maven图文教程详解

Maven 1.Maven简述 Maven是一个构建工具,服务与构建.使用Maven配置好项目后,输入简单的命令,如:mvn clean install,Maven会帮我们处理那些繁琐的任务. Maven是跨平台的. Maven最大化的消除了构建的重复. Maven可以帮助我们标准化构建过程.所有的项目都是简单一致的,简化了学习…

ChatGPT能完全取代软件开发吗,看看它怎么回答?

最近网上一直疯传&#xff0c;ChatGPT 最可能取代的 10 种工作。具体包括①、技术类工作&#xff1a;程序员、软件工程师、数据分析师②、媒体类工作&#xff1a;广告、内容创作、技术写作、新闻③、法律类工作&#xff1a;法律或律师助理④、市场研究分析师⑤、教师⑥、金融类…

如何提高推广邮件的发送成功率?

随着经济的发展&#xff0c;国际之间的贸易往来越加频繁&#xff0c;很多外贸企业需要发送大量的商业推广邮件&#xff0c;来获得销售订单开拓公司业务市场。 随之而来的问题也是越来越多&#xff0c;给众多的外贸企业带来诸多的困扰。外贸企业在发送推广邮件中究竟会遇到什么问…

2.4G收发一体芯片NRF24L01P跟国产软硬件兼容 SI24R1对比

超低功耗高性能 2.4GHz GFSK 无线收发器芯片Si24R1&#xff0c;软硬件兼容NRF24L01P. Si24R1 是一颗工作在 2.4GHz ISM 频段&#xff0c;专为低功耗无线场合设计&#xff0c;集成嵌入式ARQ 基带协议引擎的无线收发器芯片。工作频率范围为 2400MHz-2525MHz&#xff0c;共有 126个…

Nginx网络服务

目录 1.Nginx基础 1.Nginx和Apache的差异 2.Nginx和Apache的优缺点比较 3.编译安装nginx服务 2.认识Nginx服务的主配置文件 nginx.conf 1.全局配置 2.I/O事件配置 3.HTTP设置 4.访问状态统计配置 5.基于授权密码的访问控制 6.基于客户端的访问控制 7.基于域名的ng…

SpringCloud简单介绍

文章目录1. 开源组件2. CAP原则1. 开源组件 功能springcloud netflixspringcloud alibabaspringcloud官方其他服务注册与发现eurekanacosconsulzookeeper负载均衡ribbondubbo服务调用openFeigndubbo服务容错hystrixsentinel服务网关zuulgateway服务配置的同一管理cofig-server…

图论初入门

目录 一、前言 二、图的概念 三、例题及相关概念 1、全球变暖&#xff08;2018年省赛&#xff0c;lanqiao0J题号178&#xff09; 2、欧拉路径 3、小例题 4、例题&#xff08;洛谷P7771&#xff09; 一、前言 本文主要讲了树与图的基本概念&#xff0c;图的存储、DFS遍历…

pytorch训练第一个项目VOC2007分割

一、环境 condapytorch1.2.0cuda10.0pycharm 二、训练内容 数据集&#xff1a;VOC2007 网络&#xff1a;U-net 功能&#xff1a;分割图像分类 三、步骤 安装软件、框架、包、cuda&#xff08;不安用cpu跑也可以&#xff09;&#xff0c;下载数据集、代码、权重文件等。。…

测试外包干了5年,感觉自己已经废了····

前两天有读者想我资讯&#xff1a; 我是一名软件测试工程师&#xff0c;工作已经四年多快五年了。现在正在找工作&#xff0c;由于一直做的都是外包的项目。技术方面都不是很深入&#xff0c;现在找工作都是会问一些&#xff0c;测试框架&#xff0c;自动化测试&#xff0c;感…

Java Map和Set

目录1. 二叉排序树(二叉搜索树)1.1 二叉搜索树的查找1.2 二叉搜索树的插入1.3 二叉搜索树的删除&#xff08;7种情况&#xff09;1.4 二叉搜索树和TreeMap、TreeSet的关系2. Map和Set的区别与联系2.1 从接口框架的角度分析2.2 从存储的模型角度分析【2种模型】3. 关于Map3.1 Ma…

QML键盘事件

在QML中&#xff0c;当有一个按键按下或释放时&#xff0c;会产生一个键盘事件&#xff0c;将其传递给获得有焦点的QML项目&#xff08;讲focus属性设置为true&#xff0c;则获得焦点&#xff09;。 按键处理的基本流程&#xff1a; Qt接收密钥操作并生成密钥事件。如果 QQuic…

keepalived学习记录:对其vip漂移过程采用gdb跟踪

对其vip漂移过程采用gdb跟踪keepalived工具主要功能产生vip漂移过程两种情况gdb调试常用命令gdb调试时打到的函数栈&#xff08;供学习参考&#xff09;函数栈的图是本人理解下画的&#xff0c;不对请多指正 keepalived主要有三个进程&#xff0c;父进程是core进程&#xff0c;…