【matlab】回归预测/异常检测——智能优化算法极限学习机

目录

引言

基本原理

主要特点

应用领域

发展趋势

智能优化算法——蜣螂优化算法(DBO)

算法原理

 算法特点

应用前景

代码实现

ELM训练函数——elmtrain 函数

ELM预测函数——elmpredict 函数

适应度函数

主函数


引言

极限学习机(Extreme Learning Machine,ELM)是一种单隐层前馈神经网络(SLFNs)的学习算法,由黄广斌教授于2004年提出。ELM以其训练速度快、泛化能力强、易于实现等优点,在模式识别、回归预测、数据挖掘等领域得到了广泛的应用。

基本原理

ELM的基本原理是通过随机化选择输入层到隐层的连接权重(input weights)和隐层神经元的偏置(biases),并且这些参数在训练过程中保持不变。然后,通过求解一个线性系统来确定输出权重(output weights),从而使得网络的输出能够尽可能地逼近训练样本的标签或目标值。

推导过程参考:极限学习机(ELM)的原理和matlab代码实现-CSDN博客

主要特点
  1. 训练速度快:由于ELM的输入权重和偏置是随机生成的,并且在训练过程中保持不变,因此ELM的训练过程主要集中在求解输出权重上,这通常可以通过解一个线性方程组来高效完成。

  2. 泛化能力强:ELM的随机化特性使得它在训练过程中能够避免过拟合问题,因此具有较好的泛化能力。此外,ELM还可以通过调整隐层神经元的数量来平衡模型的复杂性和泛化能力。

  3. 易于实现:ELM算法简单易懂,实现起来相对容易。同时,由于ELM的训练过程不需要迭代调整参数,因此可以很容易地与其他算法进行结合使用。

应用领域

ELM已经成功应用于多个领域,包括:

  • 模式识别:如人脸识别、手写数字识别等。
  • 回归预测:如股票价格预测、气象预测等。
  • 数据挖掘:如聚类分析、异常检测等。
  • 生物信息学:如基因表达数据分析、蛋白质结构预测等。
发展趋势

随着深度学习、强化学习等技术的不断发展,ELM也在不断地进行改进和扩展。例如,一些研究者提出了基于ELM的深度学习模型,通过增加多个隐层来提高模型的表达能力和泛化能力。此外,还有一些研究者将ELM与其他优化算法相结合,如遗传算法、粒子群算法等,以进一步提高ELM的性能和稳定性。

总之,极限学习机作为一种高效、简单且泛化能力强的学习算法,在多个领域都有着广泛的应用前景。随着技术的不断发展,ELM的性能和应用范围也将得到进一步的提升和扩展。

蜣螂优化算法(Dung Beetle Optimizer, DBO)是一种新型的群智能优化算法,其灵感来源于蜣螂(俗称屎壳郎)的滚球、跳舞、觅食、偷窃和繁殖等自然行为。以下是关于蜣螂优化算法的详细介绍:

智能优化算法——蜣螂优化算法(DBO)

蜣螂优化算法由Jiankai Xue和Bo Shen在2022年提出,并发表在知名SCI期刊《THE JOURNAL OF SUPERCOMPUTING》上。该算法主要受到蜣螂的滚球、跳舞、觅食、偷窃和繁殖等行为的启发。

算法原理
  • 滚球行为:蜣螂在滚动过程中利用天体导航,滚动路径受环境影响。在算法中,蜣螂的位置变化模拟了这一过程,其中包含了光源强度、风等自然因素对蜣螂行进路线的影响。
  • 跳舞行为:当蜣螂遇到障碍物时,会通过跳舞来重新确定方向。在算法中,使用切线函数来模拟跳舞行为,以获取新的滚动方向。
  • 觅食行为:蜣螂在自然界中会寻找食物,并在安全区域产卵。算法中模拟了这一过程,包括建立最优觅食区域和引导小蜣螂觅食。
  • 偷窃行为:蜣螂之间会存在食物竞争,即偷窃行为。在算法中,通过更新偷窃蜣螂的位置来模拟这一过程。
  • 繁殖行为:雌性蜣螂会在安全区域产卵,并在孵化后引导小蜣螂觅食。算法中通过边界选择策略模拟了雌性蜣螂的产卵区域,并动态调整产卵区域和卵球的位置。
 算法特点

进化能力强:通过模拟蜣螂的自然行为,算法具有较强的进化能力,能够有效地解决复杂的寻优问题。

搜索速度快:算法中的五种主要操作(滚球、跳舞、觅食、偷窃和繁殖)模拟了蜣螂的生存行为,使得算法具有较快的搜索速度。

寻优能力强:算法同时考虑了全局探索和局部开发,具有收敛速度快和准确率高的特点。

应用前景
  • 蜣螂优化算法可以应用于更为广阔的场景,如无人机路径规划、神经网络参数优化等各类优化问题。
  • 尽管该算法具有寻优能力强、收敛速度快的特点,但也存在全局探索和局部开发能力不平衡的问题,未来可以通过改进方法进一步优化算法性能。

function [ bestX,fMin , Convergence_curve ] = DBO(pop, M,c,d,dim,fobj  )P_percent = 0.2;    % The population size of producers accounts for "P_percent" percent of the total population size       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
pNum = round( pop *  P_percent );    % The population size of the producers   lb= c.*ones( 1,dim );    % Lower limit/bounds/     a vector
ub= d.*ones( 1,dim );    % Upper limit/bounds/     a vector
%Initialization
for i = 1 : popx( i, : ) = lb + (ub - lb) .* rand( 1, dim );  fit( i ) = fobj( x( i, : ) ) ;                       
endpFit = fit;                       
pX = x; XX=pX;    
[ fMin, bestI ] = min( fit );      % fMin denotes the global optimum fitness value
bestX = x( bestI, : );             % bestX denotes the global optimum position corresponding to fMin% Start updating the solutions.
for t = 1 : M    [fmax,B]=max(fit);worse= x(B,:);   r2=rand(1);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%for i = 1 : pNum    if(r2<0.9)r1=rand(1);a=rand(1,1);if (a>0.1)a=1;elsea=-1;endx( i , : ) =  pX(  i , :)+0.3*abs(pX(i , : )-worse)+a*0.1*(XX( i , :)); % Equation (1)elseaaa= randperm(180,1);if ( aaa==0 ||aaa==90 ||aaa==180 )x(  i , : ) = pX(  i , :);   endtheta= aaa*pi/180;   x(  i , : ) = pX(  i , :)+tan(theta).*abs(pX(i , : )-XX( i , :));    % Equation (2)      endx(  i , : ) = Bounds( x(i , : ), lb, ub );    fit(  i  ) = fobj( x(i , : ) );end [ fMMin, bestII ] = min( fit );      % fMin denotes the current optimum fitness valuebestXX = x( bestII, : );             % bestXX denotes the current optimum position R=1-t/M;                           %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Xnew1 = bestXX.*(1-R); Xnew2 =bestXX.*(1+R);                    %%% Equation (3)Xnew1= Bounds( Xnew1, lb, ub );Xnew2 = Bounds( Xnew2, lb, ub );%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Xnew11 = bestX.*(1-R); Xnew22 =bestX.*(1+R);                     %%% Equation (5)Xnew11= Bounds( Xnew11, lb, ub );Xnew22 = Bounds( Xnew22, lb, ub );
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  for i = ( pNum + 1 ) :12                  % Equation (4)x( i, : )=bestXX+((rand(1,dim)).*(pX( i , : )-Xnew1)+(rand(1,dim)).*(pX( i , : )-Xnew2));x(i, : ) = Bounds( x(i, : ), Xnew1, Xnew2 );fit(i ) = fobj(  x(i,:) ) ;endfor i = 13: 19                  % Equation (6)x( i, : )=pX( i , : )+((randn(1)).*(pX( i , : )-Xnew11)+((rand(1,dim)).*(pX( i , : )-Xnew22)));x(i, : ) = Bounds( x(i, : ),lb, ub);fit(i ) = fobj(  x(i,:) ) ;endfor j = 20 : pop                 % Equation (7)x( j,: )=bestX+randn(1,dim).*((abs(( pX(j,:  )-bestXX)))+(abs(( pX(j,:  )-bestX))))./2;x(j, : ) = Bounds( x(j, : ), lb, ub );fit(j ) = fobj(  x(j,:) ) ;end% Update the individual's best fitness vlaue and the global best fitness valueXX=pX;for i = 1 : pop if ( fit( i ) < pFit( i ) )pFit( i ) = fit( i );pX( i, : ) = x( i, : );endif( pFit( i ) < fMin )% fMin= pFit( i );fMin= pFit( i );bestX = pX( i, : );%  a(i)=fMin;endendConvergence_curve(t)=fMin;end% Application of simple limits/bounds
function s = Bounds( s, Lb, Ub)% Apply the lower bound vectortemp = s;I = temp < Lb;temp(I) = Lb(I);% Apply the upper bound vector J = temp > Ub;temp(J) = Ub(J);% Update this new move s = temp;
function S = Boundss( SS, LLb, UUb)% Apply the lower bound vectortemp = SS;I = temp < LLb;temp(I) = LLb(I);% Apply the upper bound vector J = temp > UUb;temp(J) = UUb(J);% Update this new move S = temp;

代码实现

ELM训练函数——elmtrain 函数

elmtrain 函数用于训练一个极端学习机模型。它接收以下输入参数:

  • P:训练集输入矩阵(大小为 R×Q)。
  • T:训练集输出矩阵(大小为 S×Q)。
  • N:隐藏层神经元的数量(默认为 Q)。
  • TF:激活函数(默认为 'sig' 代表 Sigmoid 函数)。
  • TYPE:指定任务是回归(0,默认)还是分类(1)。

它返回以下输出:

  • IW:输入权重矩阵(大小为 N×R)。
  • B:隐藏层偏置矩阵(大小为 N×1)。
  • LW:输出权重矩阵(大小为 N×S)。
  • TF:激活函数的名称。
  • TYPE:任务的类型(回归或分类)。
function [IW,B,LW,TF,TYPE] = elmtrain(P,T,N,TF,TYPE)
if nargin < 2error('ELM:Arguments','Not enough input arguments.');
end
if nargin < 3N = size(P,2);
end
if nargin < 4TF = 'sig';
end
if nargin < 5TYPE = 0;
end
if size(P,2) ~= size(T,2)error('ELM:Arguments','The columns of P and T must be same.');
end
[R,Q] = size(P);
if TYPE  == 1T  = ind2vec(T);
end
[S,Q] = size(T);
% Randomly Generate the Input Weight Matrix
IW = rand(N,R) * 2 - 1;
% Randomly Generate the Bias Matrix
B = rand(N,1);
BiasMatrix = repmat(B,1,Q);
% Calculate the Layer Output Matrix H
tempH = IW * P + BiasMatrix;
switch TFcase 'sig'H = 1 ./ (1 + exp(-tempH));case 'sin'H = sin(tempH);case 'hardlim'H = hardlim(tempH);
end
% Calculate the Output Weight Matrix
LW = pinv(H') * T';
ELM预测函数——elmpredict 函数

elmpredict 函数用于使用已训练的极端学习机模型进行预测。它接收以下输入参数:

  • P:测试集输入矩阵(大小为 R×Q)。
  • IW:输入权重矩阵(大小为 N×R)。
  • B:隐藏层偏置矩阵(大小为 N×1)。
  • LW:输出权重矩阵(大小为 N×S)。
  • TF:激活函数的名称。
  • TYPE:任务的类型(回归或分类)。

它返回以下输出:

  • Y:预测输出矩阵(大小为 S×Q)
function Y = elmpredict(P,IW,B,LW,TF,TYPE)if nargin < 6error('ELM:Arguments','Not enough input arguments.');
end
% Calculate the Layer Output Matrix H
Q = size(P,2);
BiasMatrix = repmat(B,1,Q);
tempH = IW * P + BiasMatrix;
switch TFcase 'sig'H = 1 ./ (1 + exp(-tempH));case 'sin'H = sin(tempH);case 'hardlim'H = hardlim(tempH);
end
% Calculate the Simulate Output
Y = (H' * LW)';
if TYPE == 1temp_Y = zeros(size(Y));for i = 1:size(Y,2)[max_Y,index] = max(Y(:,i));temp_Y(index,i) = 1;endY = vec2ind(temp_Y); 
end

适应度函数

以训练集的误差mse做为适应度值。

function [fitness,IW,B,LW,TF,TYPE] = fun(x,Pn_train,Tn_train,N)
R = size(Pn_train,1);
S = size(Tn_train,1);
IW = x(1:N*R);
B = x(N*R+1:N*R+N);
IW = reshape(IW,[N,R]);
B = reshape(B,N,1);
TYPE = 0;%回归
TF = 'sig';
[IW,B,LW,TF,TYPE] = elmtrainNew(Pn_train,Tn_train,N,TF,TYPE,IW,B);
%% ELM仿真测试
Tn_sim1 = elmpredict(Pn_train,IW,B,LW,TF,TYPE);
%计算误差
E1 = Tn_sim1 - Tn_train;
fitness = mse(E1);
end

主函数

clear all
clc%% 导入数据
load('data.mat'); % 加载数据文件%% 随机生成训练集和测试集
rng(42); % 设置随机种子,以确保结果可重复性% 计算样本数量
num_samples = size(input, 1);% 随机排列索引
k = randperm(num_samples);% 训练集——前 70% 的样本
train_samples = floor(0.7 * num_samples); % 70% 的样本作为训练集
P_train = input(k(1:train_samples), :)';
T_train = output(k(1:train_samples));% 测试集——后 30% 的样本
P_test = input(k(train_samples+1:end), :)';
T_test = output(k(train_samples+1:end));%% 归一化
% 使用 mapminmax 函数归一化训练集和测试集
[Pn_train, inputps] = mapminmax(P_train, -1, 1); % 归一化训练集,并记录参数
Pn_test = mapminmax('apply', P_test, inputps); % 应用训练集的归一化参数归一化测试集[Tn_train, outputps] = mapminmax(T_train', -1, 1); % 归一化训练集标签
Tn_train = Tn_train'; % 转置回原始维度
Tn_test = mapminmax('apply', T_test', outputps); % 归一化测试集标签,并转置回原始维度
Tn_test = Tn_test';% 训练数据相关尺寸
R = size(Pn_train, 1);
N = 70; % 隐含层神经元数量%% 定义优化参数并进行优化
pop = 30; % 种群数量
Max_iteration = 400; % 最大迭代次数
dim = N * R + N; % 维度,即权值与阈值的个数
lb = [-1 .* ones(1, N * R), zeros(1, N)]; % 下边界
ub = [ones(1, N * R), ones(1, N)]; % 上边界
fobj = @(x) fun(x, Pn_train, Tn_train, N);% 调用优化函数进行优化
[Best_pos, Best_score, DBO_curve] = DBO(pop, Max_iteration, lb, ub, dim, fobj);% 获取优化后的相关参数
[fitness, IW, B, LW, TF, TYPE] = fun(Best_pos, Pn_train, Tn_train, N);% 绘制收敛曲线
figure
plot(DBO_curve, 'linewidth', 1.5);
grid on
xlabel('迭代次数')
ylabel('适应度函数')
title('DBO-ELM收敛曲线')%% DBO-ELM仿真测试
Tn_sim = elmpredict(Pn_test, IW, B, LW, TF, TYPE);
% 反归一化
T_sim = mapminmax('reverse', Tn_sim, outputps);
% 均方误差
E = mse(T_sim - T_test);% 结果对比和R2
result = [T_test' T_sim'];
R2 = (60 * sum(T_sim .* T_test) - sum(T_sim) * sum(T_test))^2 / ((60 * sum(T_sim.^2)) - (sum(T_sim))^2 * (60 * sum(T_test.^2)) - (sum(T_test))^2);% 绘制测试集输出对比图
figure
plot(T_test, 'r*')
hold on
plot(T_sim, 'b:o')
xlabel('测试集样本编号')
ylabel('测试集输出')
title('ELM测试集输出')
grid on;
legend('期望输出', 'DBO-ELM预测输出')% 显示均方误差和R2分数
disp(['均方误差 (MSE): ', num2str(E)]);
disp(['R^2 分数: ', num2str(R2)]);

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

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

相关文章

【C++设计模式】(二)设计模式简介

&#xff08;二&#xff09;设计模式简介 设计模式的概念来源于建筑学&#xff0c;最早由建筑学家克里斯托弗亚历山大&#xff08;Christopher Alexander&#xff09;在其著作《建筑的模式语言》&#xff08;A Pattern Language&#xff09;中提出。亚历山大提出了一系列在建筑…

【数据挖掘】银行信用卡风险大数据分析与挖掘

银行信用卡风险大数据分析与挖掘 1、实验目的 中国某个商业银行高层发现自家信用卡存在严重的欺诈和拖欠现象,已经影响到自身经营和发展。银行高层希望大数据分析部门采用数据挖掘技术,对影响用户信用等级的主要因素进行分析,结合信用卡用户的人口特征属性对欺诈行为和拖欠…

顶顶通呼叫中心中间件-外呼通道变量同步到坐席通道变量(mod_cti基于Freeswitch)

机器人伴随转人工或者排队转人工 把外呼通道同步到坐席通道变量 在拨号方案转人工动作cti_acd,或者转机器人动作cti_rotobt的前面&#xff0c;添加一个 export nolocal:变量名${变量名} 一、配置拨号方案 win-ccadmin配置方法 点击拨号方案 -> 点击进入排队 -> 根据图…

Java项目:基于SSM框架实现的中小企业人力资源管理系统【ssm+B/S架构+源码+数据库+开题报告+毕业论文】

一、项目简介 本项目是一套基于SSM框架实现的中小企业人力资源管理系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简…

智能生产管理系统设计

智能生产管理系统的设计旨在提升制造业的效率、灵活性和响应速度&#xff0c;通过集成先进的信息技术&#xff08;如物联网IoT、大数据分析、人工智能AI、云计算等&#xff09;实现生产过程的智能化。以下是一些关键设计要素和步骤&#xff0c;用于构建一个高效的智能生产管理系…

jmeter-beanshell学习2-beanshell断言

继续写&#xff0c;之前写了获取变量&#xff0c;设置变量&#xff0c;今天先写个简单点的断言。 一般情况用响应断言&#xff0c;就挺好使&#xff0c;但是自动化还要生成报告&#xff0c;如果断言失败了&#xff0c;要保存结果&#xff0c;只能用beanshell处理&#xff0c;顺…

Ubuntu 24.04-自动安装-Nvidia驱动

教程 但在安全启动模式下可能会报错。 先在Nvidia官网找到GPU对应的驱动版&#xff0c; 1. 在软件与更新中选择合适的驱动 2. ubuntu自动安装驱动 sudo ubuntu-drivers autoinstall显示驱动 ubuntu-drivers devices3. 安装你想要的驱动 sudo apt install nvidia-driver-ve…

如何在 SwiftUI 中熟练使用 sensoryFeedback 修饰符

文章目录 前言背景介绍平台支持仅支持watchOS支持watchOS和iOS 基本用法预定义样式根据触发器值选择样式使用场景当值更改时触发使用条件闭包触发使用反馈闭包触发 可以运行 Demo总结 前言 SwiftUI 引入了新的 sensoryFeedback 视图修饰符&#xff0c;使我们能够在所有 Apple …

【ARMv8/v9 GIC 系列 5.3 -- 系统寄存器对中断的处理】

请阅读【ARM GICv3/v4 实战学习 】 文章目录 ARMv8/v9系统寄存器对中断的控制Group 0中断的寄存器Group 1中断的寄存器安全状态与中断分组中断处理过程中断确认处理代码中断完成处理代码ARMv8/v9系统寄存器对中断的控制 在ARM GIC 体系结构中,中断分组通过一系列系统寄存器进…

推荐 3个让你爽到爆炸的电脑软件,完全免费,请低调使用

Royal TS Royal TS是一款功能强大的远程系统访问工具&#xff0c;适用于服务器管理员、系统工程师、开发人员和专注于IT的信息工作者。它支持多种协议&#xff08;如RDP、VNC、SSH、HTTP/S等&#xff09;&#xff0c;使得用户能够方便地管理远程系统的连接。通过定义管理连接&a…

无人机常见故障及维修方法详解

一、无人机故障识别与处理原则 无人机故障识别是维修的第一步&#xff0c;要求操作人员具备基本的无人机系统知识和故障识别能力。在识别故障时&#xff0c;应遵循“先易后难、先外后内、先软件后硬件”的原则。一旦识别出故障&#xff0c;应立即停止飞行&#xff0c;避免进一…

Java经典面试题将一个字符串数组进行分组输出,每组中的字符串都由相同的字符组成

Java经典面试题将一个字符串数组进行分组输出&#xff0c;每组中的字符串都由相同的字符组成 题目&#xff1a; 将一个字符串数组进行分组输出&#xff0c;每组中的字符串都由相同的字符组成 举个例子&#xff1a;输入[“eat”,“tea”,“tan”,“ate”,“nat”,“bat”] 输出…

高性价比模块:LSYT201B语音模块学习使用

最近打算做个语音的项目&#xff0c;找到了深圳雷龙发展的LSY201B这款语音模块&#xff0c;写出来安利一下 程序源码&#xff1a;SuiXinSc/Speech-Module (github.com) 或者进入Q群找我获取 目录 一&#xff0c;简要介绍&#xff1a; 硬件参数&#xff1a; 1&#xff0c;处理…

add_metrology_object_generic 添加测量模型对象。找两条直线,并计算两条线的夹角和两个线的总长度,转换成毫米单位

*添加测量模型对象 *将测量对象添加到测量模型中 *算子参数&#xff1a; *    MeasureHandle&#xff1a;输入测量模型的句柄&#xff1b; *    Shape&#xff1a;输入要测量对象的类型&#xff1b;默认值&#xff1a;‘circle’&#xff0c;参考值&#xff1a;‘circl…

Ubuntu下Qt-5.12.9创建快捷方式到桌面

由于下载完的Qt5没有桌面快捷方式&#xff0c;每次使用需要进入原文件的文件中&#xff0c;操作太过繁琐&#xff0c;以下操作将为Qtcreator在桌面创建一个快捷访问文件。 第一步&#xff1a;进入自己主目录下的桌面文件夹 cd ~/Desktop第二步&#xff1a;创建一个Qt的deskto…

蓝牙模块功耗优化技术研究

蓝牙模块作为无线通信技术的重要组成部分&#xff0c;在智能家居、可穿戴设备、医疗健康等领域得到了广泛应用。然而&#xff0c;随着设备功能的不断增加和用户对续航能力的日益关注&#xff0c;蓝牙模块的功耗问题逐渐凸显。因此&#xff0c;对蓝牙模块功耗优化技术的研究具有…

154. 寻找旋转排序数组中的最小值 II(困难)

154. 寻找旋转排序数组中的最小值 II 1. 题目描述2.详细题解3.代码实现3.1 Python3.2 Java 1. 题目描述 题目中转&#xff1a;154. 寻找旋转排序数组中的最小值 II 2.详细题解 该题是153. 寻找旋转排序数组中的最小值的进阶题&#xff0c;在153. 寻找旋转排序数组中的最小值…

2024年7月6日 十二生肖 今日运势

小运播报&#xff1a;2024年7月6日&#xff0c;星期六&#xff0c;农历六月初一 &#xff08;甲辰年庚午月辛未日&#xff09;&#xff0c;法定节假日。 红榜生肖&#xff1a;猪、马、兔 需要注意&#xff1a;狗、鼠、牛 喜神方位&#xff1a;西南方 财神方位&#xff1a;正…

【介绍下JSON,JSON是什么?】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步! 💡JSON讲解 💡1. 介绍💡2. JSON的基本规则💡3. JSON中的数…

Linux配置固定ip地址

虚拟机的Linux操作系统&#xff0c;其IP地址是通过DHCP服务获取的 DHCP&#xff1a;动态获取IP地址&#xff0c;即每次重启设备后都会获取一次&#xff0c;可能导致IP地址频繁变更。 一般系统默认的ip地址设置都是自动获取&#xff0c;故每次系统重启后ip地址都可能会不一样&a…