【LSSVM时序预测】基于麻雀算法优化最小二乘支持向量机SSA-LSSVM实现交通流时序数据预测附Matlab代码

0 阅读1分钟

cover_image

【LSSVM时序预测】基于麻雀算法优化最小二乘支持向量机SSA-LSSVM实现交通流时序数据预测附Matlab代码

天天Matlab 天天Matlab 天天Matlab

2023年04月11日 00:00 福建 __

在小说阅读器中沉浸阅读

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法 神经网络预测 雷达通信 无线传感器 电力系统

信号处理 图像处理 路径规划 元胞自动机 无人机

⛄ 内容介绍

短时交通流预测是实现智能交通控制与管理,交通流状态辨识和实时交通流诱导的前提及关键,也是智能化交通管理的客观需要.到目前为止,它的研究结果都不尽如人意.现有的以精确数学模型为基础的传统预测方法存在计算复杂,运算时间长,需要大量历史数据,预测精度不高等缺点.因此通过研究新型人工智能方法改进短期交通流预测具有一定的现实意义.本文在对现有短期交通流预测模型对比分析及交通流特性研究分析基础上,采用最小二乘支持向量机方法进行短期交通流预测模型,取得较好的效果. 支持向量机是一种新的机器学习算法,建立在统计学习理论的基础上,采用结构风险最小化原则,具有预测能力强,全局最优化以及收敛速度快等特点,相比较以经验风险化为基础的神经网络学习算法有更好的理论依据和更好的泛化性能.对于支持向量机模型而言,其算法相对简单,运算时间短,预测精度较高,比较适用于交通流预测研究,特别是在引入最小二乘理论后,计算简化为求解一个线性方程组,同时精度也能得到保证. 在最小二乘支持向量机理论的基础上,利用类似"滑动窗口"的概念,提出了一种新的在线算法,更新计算矩阵,并且通过"剪枝",去除对模型影响较小的支持向量,并通过MATLAB2014仿真实验验证了其SSA- LSSVM算法有效性,在一定条件下,适用于短期交通流的预测.

⛄ 部分代码

function [Best_pos, Best_score, curve] = SSA(pop, Max_iter, lb, ub, dim, fobj)

%% 参数设置

ST = 0.8; % 预警值

PD = 0.2; % 发现者的比列,剩下的是加入者

PDNumber = pop * PD; % 发现者数量

SDNumber = pop - pop * PD; % 意识到有危险麻雀数量

%% 判断优化参数个数

if(max(size(ub)) == 1)

ub = ub .* ones(1, dim);

lb = lb .* ones(1, dim);

end

%% 种群初始化

pop_lsat = initialization(pop, dim, ub, lb);

pop_new = pop_lsat;

%% 计算初始适应度值

fitness = zeros(1, pop);

for i = 1 : pop

fitness(i) = fobj(pop_new(i, :));

end

%% 得到全局最优适应度值

[fitness, index]= sort(fitness);

GBestF = fitness(1);

%% 得到全局最优种群

for i = 1 : pop

pop_new(i, :) = pop_lsat(index(i), :);

end

GBestX = pop_new(1, :);

X_new = pop_new;

%% 优化算法

for i = 1: Max_iter

BestF = fitness(1);

R2 = rand(1);

for j = 1 : PDNumber

if(R2 < ST)

X_new(j, :) = pop_new(j, :) .* exp(-j / (rand(1) * Max_iter));

else

X_new(j, :) = pop_new(j, :) + randn() * ones(1, dim);

end

end

for j = PDNumber + 1 : pop

if(j > (pop - PDNumber) / 2 + PDNumber)

X_new(j, :) = randn() .* exp((pop_new(end, :) - pop_new(j, :)) / j^2);

else

A = ones(1, dim);

for a = 1 : dim

if(rand() > 0.5)

A(a) = -1;

end

end

AA = A' / (A * A');

X_new(j, :) = pop_new(1, :) + abs(pop_new(j, :) - pop_new(1, :)) .* AA';

end

end

Temp = randperm(pop);

SDchooseIndex = Temp(1 : SDNumber);

for j = 1 : SDNumber

if(fitness(SDchooseIndex(j)) > BestF)

X_new(SDchooseIndex(j), :) = pop_new(1, :) + randn() .* abs(pop_new(SDchooseIndex(j), :) - pop_new(1, :));

elseif(fitness(SDchooseIndex(j)) == BestF)

K = 2 * rand() -1;

X_new(SDchooseIndex(j), :) = pop_new(SDchooseIndex(j), :) + K .* (abs(pop_new(SDchooseIndex(j), :) - ...

pop_new(end, :)) ./ (fitness(SDchooseIndex(j)) - fitness(end) + 10^-8));

end

end

%% 边界控制

for j = 1 : pop

for a = 1 : dim

if(X_new(j, a) > ub(a))

X_new(j, a) = ub(a);

end

if(X_new(j, a) < lb(a))

X_new(j, a) = lb(a);

end

end

end

%% 获取适应度值

for j = 1 : pop

fitness_new(j) = fobj(X_new(j, :));

end

%% 获取最优种群

for j = 1 : pop

if(fitness_new(j) < GBestF)

GBestF = fitness_new(j);

GBestX = X_new(j, :);

end

end

%% 更新种群和适应度值

pop_new = X_new;

fitness = fitness_new;

%% 更新种群

[fitness, index] = sort(fitness);

for j = 1 : pop

pop_new(j, :) = pop_new(index(j), :);

end

%% 得到优化曲线

curve(i) = GBestF;

avcurve(i) = sum(curve) / length(curve);

end

%% 得到最优值

Best_pos = GBestX;

Best_score = curve(end);

⛄ 运行结果

⛄ 参考文献

[1] 刘林. 基于LSSVM的短期交通流预测研究与应用[D]. 西南交通大学, 2011.

[2] 刘云, 易松. 基于双参数最小二乘支持向量机(TPA-LSSVM)的风电时间序列预测模型的优化研究[J]. 北京化工大学学报:自然科学版, 2019, 46(2):6.

[3] 王帝, 李治, 汪勇,等. 基于改进最小二乘支持向量机的一次风机状态预测方法研究[J]. 动力工程学报, 2023, 43(1):74-82.

[4] 李忠, 陈媛, 何怡刚. 一种基于麻雀搜索和最小二乘支持向量机的电池健康状态估计与剩余寿命预测方法:, CN112485692A[P]. 2021.

⛳️ 代码获取关注我

❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料

预览时标签不可点

继续滑动看下一个

轻触阅读原文

天天Matlab

向上滑动看下一个

知道了

微信扫一扫
使用小程序


取消 允许


取消 允许


取消 允许

× 分析

__

跳转二维码

作者头像

微信扫一扫可打开此内容,
使用完整服务

: , , , , , , , , , , , , 。 视频 小程序 赞 ,轻点两下取消赞 在看 ,轻点两下取消在看 分享 留言 收藏 听过