一、粒子群算法简介

1 粒子群算法的概念
粒子群优化算法(PSO:Particle swarm optimization) 是一种进化计算技术(evolutionary computation)。源于对鸟群捕食的行为研究。粒子群优化算法的基本思想:是通过群体中个体之间的协作和信息共享来寻找最优解.
PSO的优势:在于简单容易实现并且没有许多参数的调节。目前已被广泛应用于函数优化、神经网络训练、模糊系统控制以及其他遗传算法的应用领域。

2 粒子群算法分析
2.1基本思想

粒子群算法通过设计一种无质量的粒子来模拟鸟群中的鸟,粒子仅具有两个属性:速度和位置,速度代表移动的快慢,位置代表移动的方向。每个粒子在搜索空间中单独的搜寻最优解,并将其记为当前个体极值,并将个体极值与整个粒子群里的其他粒子共享,找到最优的那个个体极值作为整个粒子群的当前全局最优解,粒子群中的所有粒子根据自己找到的当前个体极值和整个粒子群共享的当前全局最优解来调整自己的速度和位置。下面的动图很形象地展示了PSO算法的过程:

2.2 更新规则
PSO初始化为一群随机粒子(随机解)。然后通过迭代找到最优解。在每一次的迭代中,粒子通过跟踪两个“极值”(pbest,gbest)来更新自己。在找到这两个最优值后,粒子通过下面的公式来更新自己的速度和位置。

公式(1)的第一部分称为【记忆项】,表示上次速度大小和方向的影响;公式(1)的第二部分称为【自身认知项】,是从当前点指向粒子自身最好点的一个矢量,表示粒子的动作来源于自己经验的部分;公式(1)的第三部分称为【群体认知项】,是一个从当前点指向种群最好点的矢量,反映了粒子间的协同合作和知识共享。粒子就是通过自己的经验和同伴中最好的经验来决定下一步的运动。以上面两个公式为基础,形成了PSO的标准形式。

公式(2)和 公式(3)被视为标准PSO算法。
3 PSO算法的流程和伪代码

二、部分源代码

%该程序已在MATLAB2014a运行通过function varargout = gui(varargin)
% GUI MATLAB code for gui.fig
%      GUI, by itself, creates a new GUI or raises the existing
%      singleton*.
%
%      H = GUI returns the handle to a new GUI or the handle to
%      the existing singleton*.
%
%      GUI('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in GUI.M with the given input arguments.
%
%      GUI('Property','Value',...) creates a new GUI or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before gui_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to gui_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES% Edit the above text to modify the response to help gui% Last Modified by GUIDE v2.5 13-Sep-2015 19:51:50% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...'gui_Singleton',  gui_Singleton, ...'gui_OpeningFcn', @gui_OpeningFcn, ...'gui_OutputFcn',  @gui_OutputFcn, ...'gui_LayoutFcn',  [] , ...'gui_Callback',   []);
if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1});
endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
elsegui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT% --- Executes just before gui is made visible.
function gui_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to gui (see VARARGIN)% Choose default command line output for gui
handles.output = hObject;% Update handles structure
guidata(hObject, handles);% UIWAIT makes gui wait for user response (see UIRESUME)
% uiwait(handles.figure1);% --- Outputs from this function are returned to the command line.
function varargout = gui_OutputFcn(hObject, eventdata, handles)
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% Get default command line output from handles structure
varargout{1} = handles.output;function edit1_Callback(hObject, eventdata, handles)
% hObject    handle to edit1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% Hints: get(hObject,'String') returns contents of edit1 as text
%        str2double(get(hObject,'String')) returns contents of edit1 as a doubleinput = get(handles.edit1,'String');
input = str2num(input);% --- Executes during object creation, after setting all properties.
function edit1_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
endfunction edit2_Callback(hObject, eventdata, handles)
% hObject    handle to edit2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% Hints: get(hObject,'String') returns contents of edit2 as text
%        str2double(get(hObject,'String')) returns contents of edit2 as a doubl
% --- Executes during object creation, after setting all properties.
input = get(handles.edit2,'String');
input = str2num(input);function edit2_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
endfunction edit3_Callback(hObject, eventdata, handles)
% hObject    handle to edit3 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% Hints: get(hObject,'String') returns contents of edit3 as text
%        str2double(get(hObject,'String')) returns contents of edit3 as a double
% --- Executes during object creation, after setting all properties.
input = get(handles.edit3,'String');
input = str2num(input);function edit3_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit3 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
C = 30;
theta = 2;%C为最小二乘支持向量机的正则化参数,theta为高斯径向基的核函数参数,两个需要进行优化选择调试
NumOfPre = 1;%预测天数,在此预测本季度最后七天
Time = 24;
Data = xlsread('a23.xls');%此为从excel表格读数据的命令,表示将表格的数据读到Data数组中,省略表格中的第一行第一列文字部分 可输入你要预测的表格名称
[M N] = size(Data);%计算读入数据的行和列 M行N列
for i = 1:3maxData = max(Data(:,i));minData = min(Data(:,i));Data1(:,i) = (Data(:,i) - minData)/(maxData-minData);%对温度进行归一化处理
end
for i = 4:5Data1(:,i) = Data(:,i);
end
for i = 6:NData1(:,i) = log10(Data(:,i)) ;%对负荷进行对数处理 温度和负荷的预处理 可采用不同的方法
end
Dim =  M - 2 - NumOfPre;%训练样本数%训练样本数
Input = zeros(M-2,12,Time);%预先分配处理后的输入向量空间
y = zeros(Dim,Time);
for i = 3:M for j = 1:Time%%选取前一天温度、同一时刻的负荷,前两天的负荷,当天的温度作为输入特征x = [Data1(i-1,1:5), Data1(i-1,j+5), Data1(i-2,j+5),Data1(i,1:5)];Input(i-2,:,j) = x;y(i-2,j) = Data1(i,j+5);end
end
Dist = zeros(Dim,Dim,Time);%预先分配距离空间
for i=1:Timefor j=1:Dimfor k=1:DimDist(j,k,i) = (Input(j,:,i) - Input(k,:,i))*(Input(j,:,i) - Input(k,:,i))';endend
end
Dist1 = exp(-Dist/(2*theta));%RBF
for i=1:TimeH = Dist1(:,:,i) + eye(Dim)/C;%最小二乘支持向量的H矩阵f = -y(1:Dim,i); Aeq = ones(Dim,1)';beq = [0];option.MaxIter=1000;[a,fval]=quadprog(H,f,[],[],Aeq,beq);%,[],[],[],option);b = 0;for j = 1:Dimb(j) = y(j,i) - a(j)/C - a'* Dist1(:,j,i);%求每个输入特征对应的bendb = sum(b)/Dim;%求平均b,消除误差for j = Dim + 1:M-2for k = 1:DimK(k) = exp(-(Input(j,:,i) - Input(k,:,i))*(Input(j,:,i) - Input(k,:,i))'/(2*theta));%预测输入特征与训练特征的RBF距离endPre(j-Dim,i) = sum(a'*K') + b;  %求解预测值   end
end
Len = M  - (Dim + 3) + 1;%预测的天数 取本季度最后Len天
Pre = 10.^Pre;
for i = 1:Len%figure axes(handles.axes1);plot(1:Time,Data(i+Dim+2,6:N),'-or',1:Time,Pre(i,:),'-vk');%画出每一天的预测值和真实值hold onscatter(1:Time,Data(i+Dim+2,6:N),'o')scatter(1:Time,Pre(i,:),'v')legend('实际值','预测值','location','southeast')hold off
end
Acu = (Pre - Data(Dim+3:M,6:N))./Data(Dim+3:M,6:N);%相对误差
save Acu.mat Acu
s=0;
for i=1:Times=abs(Acu(1,i))+s;
end
acu=s/Time;
save acu.mat acu;
Result=[C,theta,acu];
disp(Result);

三、运行结果

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.
[3]周品.MATLAB 神经网络设计与应用[M].清华大学出版社,2013.
[4]陈明.MATLAB神经网络原理与实例精解[M].清华大学出版社,2013.
[5]方清城.MATLAB R2016a神经网络设计与应用28个案例分析[M].清华大学出版社,2018.

【电力负荷预测】基于matlab GUI粒子群优化支持向量机短期电力负荷预测【含Matlab源码 751期】相关推荐

  1. 【Matlab电力负荷预测】粒子群优化支持向量机短期电力负荷预测【含GUI源码 751期】

    一.代码运行视频(哔哩哔哩) [Matlab电力负荷预测]粒子群优化支持向量机短期电力负荷预测[含GUI源码 751期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 ...

  2. 机器学习之MATLAB代码--MATLAB量子粒子群优化LSTM超参数负荷预测(十三)

    机器学习之MATLAB代码--MATLAB量子粒子群优化LSTM超参数负荷预测(十三) 代码 数据 结果 代码 代码按照下列顺序依次: 1. function result(true_value,pr ...

  3. 【ACO三维路径规划】基于matlab GUI蚁群算法无人机三维路径规划【含Matlab源码 254期】

    一.无人机简介 0 引言 随着现代技术的发展,飞行器种类不断变多,应用也日趋专一化.完善化,如专门用作植保的大疆PS-X625无人机,用作街景拍摄与监控巡察的宝鸡行翼航空科技的X8无人机,以及用作水下 ...

  4. 优化算法 | 基于粒子群优化算法的Bp神经网络预测21~22赛季NBA总冠军(附MATLAB代码)

    文章目录 前言 一.数据准备 二.基于PSO的Bp神经网络预测 1.粒子表达方式 2.目标函数 3.粒子速度和位置的更新 三.MATLAB代码 四.预测结果 五.代码获取方式 总结 近期你可能错过了的 ...

  5. 基于基于粒子群优化算法的微电网调度(Matlab代码实现)

    目录 ⛳️1 写在前面 ⛳️2 基于基于粒子群优化算法的微电网调度(Matlab代码实现)

  6. 【图像去噪】基于matlab GUI butterworth+中值+维纳+小波图像去噪【含Matlab源码 520期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[图像去噪]基于matlab GUI butterworth+中值+维纳+小波图像去噪[含Matlab源码 520期] 获取代码方式2: ...

  7. matlab采用粒子群优化算法求解含压缩储能设备的综合能源系统运行优化

    matlab采用粒子群优化算法求解含压缩储能设备的综合能源系统运行优化. 结果包含储能设备24时出力,内燃机发电和发热出力,电制冷机出力等. 代码包含相关注释,方便对算法进行改进. 附相关参考文献. ...

  8. PSO粒子群优化-LSTM-pyswarms框架-实现期货价格预测

    1.摘要 本文主要讲解:PSO粒子群优化-LSTM-pyswarms框架-实现期货价格预测 主要思路: 从网上找到影响期货价格预测的相关数据,爬取下来并处理好,形成时间序列训练数据 使用train_t ...

  9. 【物理应用】基于matlab GUI气象参数计算综合指标和IAQI【含Matlab源码 2116期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[物理应用]基于matlab GUI气象参数计算综合指标和IAQI[含Matlab源码 2116期] 点击上面蓝色字体,直接付费下载,即可 ...

  10. 粒子群优化算法(PSO)简介及MATLAB实现

    目录 粒子群优化算法概述 PSO算法步骤 PSO(粒子群优化算法)与GA(遗传算法)对比 PSO的MATLAB实现 粒子群优化算法概述 • 粒子群优化(PSO, particle swarm opti ...

最新文章

  1. DB2 在线分析处理(OLAP函数的使用)
  2. python整理excel数据-python操作excel的技巧整理
  3. captcha.js一个生成验证码的插件,使用js和canvas生成
  4. CCF 2019年题目题解 - Python
  5. Spring boot自动配置示例
  6. python --version没输出_python之旅【1】--格式化输出
  7. 24dian(牛客多校第三场)
  8. WWDC 2013 Session笔记 - iOS7中弹簧式列表的制作
  9. 高德软件有限公司python试题 及 答案
  10. 未定义标识符 stringc/c++(20)_拓展巩固练习(2020.5.20)
  11. 随机生成一串字符串(java)
  12. python打印网页成pdf_html – 在chrome-python 2.7中自动打印/保存网页为pdf
  13. windows xp 64 位
  14. 集体心智:社会网络拓扑塑造集体认知
  15. java 考勤_java,添加一个类,显示考勤信息的。
  16. C# RSA、AES加密解密
  17. Pixelmator for Mac(全能图像编辑软件)
  18. 【QA】数学符号 word输入问题 在word里面怎么输入字母头顶上的那个小尖儿
  19. MySQL必知必会2
  20. Mysql错误check the manual that corresponds to your MySQL server version for the right syntax

热门文章

  1. Longest Common Substring($LCS$)
  2. 写出质量好软件的75条体会-转载篇
  3. 190627每日一句南京创新周;那些绝对不会失败的人,是永远不去尝试的人
  4. 黑马程序员 Python学习笔记之 注释
  5. 系统可用性量表评估问卷
  6. 《行为科学统计7e(Statistics for the Behavioral Sciences 10e)》 Introduction to Statistics
  7. Atitit.获得向上向下左的右的邻居的方法 软键盘的设计..
  8. atititi.soa  微服务 区别 联系 优缺点.doc
  9. paip.提升用户体验----表格显示及控件布局错乱的问题
  10. paip.操作DATATABLE增加列及内容