算法篇----简易版的粒子群(PSO)实现(Matlab语言)_谷震平的博客-程序员ITS301_粒子群算法难不难

技术标签: matlab  优化算法  智能算法  粒子群  程序  pso  

前言

    粒子群算法实现起来并不是很难,算法思想可以参加我上一篇博文,不多说了。好了,Matlab版的粒子群走起。

1 定义变量

    粒子群算法有很多参数,做实验的时候会纠结在参数问题上,这里就随机设定了。有时候,参数好坏,是成败关键。没有修过Matlab语言的朋友不用担心,之后会把C或Java版的也总结一下。知识嘛,多多益善。Let's  go !

    根据公式,需要c1 c2 r1 r2 w M 

    代码如下:

2 初始化种群

    这里是随机生成在不同维度上的粒子,就是说在D个方向上撒上M个粒子。

    代码如下:


3 计算粒子适应度

    通过调用适应度函数,计算适应度值。在此处,初始化个体的适应度值p(i)和全局最优的适应度值gbest。

    代码如下:


4 更新个体最优值

    将适应度函数计算的结果和目前的个体适应度值相比较,将适应度值较小的位置保存下来。

    代码如下:


5 更新全局最优值

    上面已经将全局最优位置初始化,只需要将它和目前个体的最优位置相比较即可,位置代入适应度函数,取最小的值对应的位置,保存该位置即可。

    代码如下:



6 更新粒子的速度和位置

    根据公式来写即可,对于不同的粒子群算法这个地方会需要改动。

    代码如下:

7 适应度函数

    适应度函数最好另外建一个Script文件,把它放进去。适应度函数可以根据要研究的问题做相应的改动,下面列出一个函数,仅供测试。
    代码如下:

8  完整代码

    到目前,应该有两个m文件,一个是适应度函数的,一个是粒子群的。不过,还需要在粒子群的文件中加入一些代码,主要是调整代码顺序,迭代次数和精度问题,具体参见代码即可。

    完整代码如下:

9 实验结果

如图:


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/guzhenping/article/details/42783289

智能推荐

Lenovo T420 声音卡解决办法汇总_ajieyxw的博客-程序员ITS301_intil声音卡

1.是n记显卡的电源管理作怪,将自动管理改为全功率运行就可以了,自己网上搜吧,有人用检测软件测试过,各个驱动对声音的卡的程度,最后找到的原因,可能是i3,i5等新的能源管理造成的,最后,我把conexant 的驱动删除,重新让windows安装自带的High Definition驱动,爆音消失了。不过控制面板里SmartAudio的图标也没了。总觉得这种方法解决的有点牵强。说到底还是节能引起的毛病

HALCON单目标定_冯相文要加油呀的博客-程序员ITS301

标定之前需要提前准备好的是标定板(如果用笔记本电脑提前尝试但是没有标定板,下面有步骤会生成ps文件,可以自己打印出来试一试)HALCON有两种标定板一种是老版的如下图还有一种是新版的如下我们要用到新版的,标定的时候需要用到标定板的描述文件,因为我们的标定板和HALCON中的稍微不一样并没有现成的,需要自己生成一下。老版的标定板生成描述文件见另一篇:gen_caltab自治标定板下面演示一下生成我们标定板的描述文件的过程:打开算子窗口:输入create_caltab,下面是它的默认参数,

宝塔面板 安装与使用教程_鸟飞惊了看花人的博客-程序员ITS301_宝塔

如果你要安装宝塔linux面板,你要准备好一个纯净版的linux操作系统,没有安装过其它环境带的Apache/Nginx/php/MySQL(已有环境不可安装)。支持的操作系统有CentOS,Ubuntu、Debian、Fedora。这里给大家演示的是centos7.5。1,通过ssh工具登录服务器这里推荐大家使用Putty进行登录。注意要开放ssh连接的端口,一般默认是22,为了网站安全推荐...

二进制部署kubernetes_lookNo施的博客-程序员ITS301

2.基础环境准备2.1 系统基础设置(所有机器都要执行)2.1.1 设置主机名hostnamectl set-hostname hdss7-xx.host.com2.1.2 设置网卡~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33TYPE="Ethernet"PROXY_METHOD="none"BROWSER_ONLY="no"BOOTPROTO=noneDEFROUTE="yes"IPV4_FAILURE_FATAL="no"

EnumMap的实现原理_绅士jiejie的博客-程序员ITS301_enum map

先看看EnumMap的构造方法之一://类型private final Class<K> keyType; //所有key值的数组private transient K[] keyUniverse;//key对应的value值,长度固定为枚举个数private transient Object[] vals;public EnumMap(Class<K&gt...

学习open62541 --- [17] DisplayName和BrowseName的区别_爱就是恒久忍耐的博客-程序员ITS301_browse name

本文主要讨论OPC UA中DisplayName和BrowseName的区别一 问题以变量为例,当我们添加变量时,在变量属性里会设置其DisplayName,接着调用UA_Server_addVariableNode()时会传递其BrowseName,典型代码如下,static void addVariable(UA_Server *server) { /* Define the...

随便推点

linux下配置ODBC连接MySql_mydriverc2的博客-程序员ITS301

下载安装文件unixODBC-2.3.0.tar.gz下载地址: ftp://ftp.unixodbc.org/pub/unixODBC/unixODBC-2.3.0.tar.gzmysql-connector-odbc-5.1.8-1.rhel5.i386.rpm下载地址: http://dev.mysql.com/downloads/connector/odbc

rocketmq 消息指定_消息中间件RocketMQ的安装与部署_weixin_39682301的博客-程序员ITS301

消息中间件RocketMQ的安装与部署官方简介:RocketMQ是一款分布式、队列模型的消息中间件,具有以下特点:能够保证严格的消息顺序提供丰富的消息拉取模式高效的订阅者水平扩展能力实时的消息订阅机制亿级消息堆积能力1.安装RocketMQ1.1安装环境git,Java,Maven安装gityum install git安装jdk环境下载jdkhttp://www.oracle.com/techn...

EIGRP和OSPF__OSPF_weixin_30302609的博客-程序员ITS301

OSPF协议1.定位:开放式最短路径优先(Open Shortest Path First) 是一个内部网关协议(IGP)用于在单一自治系统(AS) 内决策路由,是对链路状态路由协议(SPF)的  一种实现。使用著名的Dijkstra算法来计算最短路径树。与RIP相比,OSPF是链路状态协议,而RIP是距离矢量协议;OSPF具有支持大型网络、路由  收敛快、占用网络资源少等优...

List方法 subList详解_洪文聊架构的博客-程序员ITS301

JDK中,List接口有一个实例方法List subList(int fromIndex, int toIndex),其作用是返回一个以fromIndex为起始索引(包含),以toIndex为终止索引(不包含)的子列表(List)。 List也可以取她的子List,方法是subList(int fromIndex, int toIndex),根据文档,subList包括fromIndex,

mysql 断开的管道_解决线上项目异常:断开的管道_Clover青子的博客-程序员ITS301

标签:项目上线运行一段时间后出现异常:org.apache.catalina.connector.ClientAbortException: java.io.IOException: 断开的管道at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:321)at org.apache.catalina.conn...

推荐文章

热门文章

相关标签