2024华中杯数学建模参考思路+完整代码+后续成品论文预约
(完整版资料获取在文末哦)
关于24年华中杯的更新进度,大家可以参考我们前年比赛。
22年华中杯思路:
大家也可以看这一篇
A题思路
一订单包含多种货品,每种商品有不同的数量,题目没说订单的需求时间,那就考虑怎么最短时间内分拣完
题目介绍中我们可以得知,一个货架放一种货品
下面就是我们要解决的问题
其实大家只要先把背景理解了,就特别简单,我们直接来看第一问怎么编程
第一问将当日订单分为多个批次。要求每个批次的订单所含货品种类数均不超过N=200 ,且批次越少越好(相应转运次数也越少,效率越高)。就是说将附件1中的订单进行打包,这里不是聚类哈,别乱搞,反正一个批次就放200多种货品,这里没讲一个货架能放多少数量,那我们也就无所谓了,我们程序怎么编,首先923个订单,是我,我就直接用randperm函数来一个随机序列再说,然后每个通过返回索引,依次遍历用矩阵保存并通过unique函数去重,直到货品种类不超过200为止作为第一个批次,后面类推,当然,肯定是用优化算法解决,这里就是说我们的每个个体都是randperm函数生成的随机序列,然后目标函数则是通过依次打包订单后的批次次数,直接来程序吧
这是完整第一问程序,用的是遗传算法,种群大小和迭代次数等相关参数自己修改,想用其他算法的可以自己改框架
clear
clc
%% 第一问最优批次
%第一问最终结果在PC矩阵中
%数据准备
[~,~,X]=xlsread('附件1:订单信息.csv');
X=string(X);
X(1,:)=[];
Y=unique(X(:,1));
n=length(Y);
Z=[];
V=[];
for i=1:size(Y)z=X(find(X(:,1)==Y(i)),2);Z{i,1}=z;%记录每个订单下的货品数V(i,1)=sum(double(X(find(X(:,1)==Y(i)),3)));
end
%生成初始个体
N=200;%货架数
num=10;%种群大小
num_gen=10;%最大迭代次数
q1=0.7;%交叉率
q2=0.7;%变异率
chrom=[];
f=[];
for i=1:numchrom(i,:)=randperm(n);%计算目标函数%U=[];UU=[];u=1;for j=1:nUU=[UU;Z{chrom(i,j),1}];UU=unique(UU);if length(UU)<=N %如果小于200,那么就直接记录%U{u,1}=UU;else%如果大于,那么记录于下一批次u=u+1;UU=[];UU=[UU;Z{chrom(i,j),1}];%U{u,1}=UU;endendf(i,1)=u;%记录最大批次,目标函数
end
trace(1)=min(f);
%迭代
for k_gen=1:num_genselchrom=chrom;%选择,寻优维度较高,这里就全部进行交叉遗传selchrom=jiaocha(selchrom,q1,k_gen,num_gen);selchrom=bianyi(selchrom,q2,k_gen,num_gen);ff=[];for i=1:num%计算目标函数%U=[];UU=[];u=1;for j=1:nUU=[UU;Z{selchrom(i,j),1}];UU=unique(UU);if length(UU)<=N%如果小于200,那么就直接记录%U{u,1}=UU;else%如果大于,那么记录于下一批次u=u+1;UU=[];UU=[UU;Z{selchrom(i,j),1}];%U{u,1}=UU;endendff(i,1)=u;%记录最大批次,目标函数end%两代合并排序f=[f;ff];chrom=[chrom;selchrom];[f,b]=sort(f);chrom=chrom(b,:);f=f(1:num,:);chrom=chrom(1:num,:);trace=[trace;min(f)];
end
%迭代图
figure
plot(trace)
xlabel('迭代次数')
ylabel('批次');
%记录最优
[bestf,b]=min(f);
bestchrom=chrom(b,:);
%计算最优方案下每个批次的货品数和货物数
F=[];%第一列是每个批次货品数,第二列是货物数
U=[];%记录每批次具体货品种类
UU=[];
YY=[];
YYY=[];
u=1;
f1=0;
f2=0;
for j=1:nUU=[UU;Z{bestchrom(j),1}];YY=[YY;Y(bestchrom(j),1)];UU=unique(UU);if length(UU)<=N%如果小于200,那么就直接记录U{u,1}=UU;YYY{u,1}=YY;f1=length(UU);f2=f2+V(bestchrom(j),1);F(u,:)=[f1,f2];else%如果大于,那么记录于下一批次u=u+1;f1=0;f2=0;UU=[];YY=[];UU=[UU;Z{bestchrom(j),1}];YY=[YY;Y(bestchrom(j),1)];U{u,1}=UU;YYY{u,1}=YY;f1=length(UU);f2=f2+V(bestchrom(j),1);F(u,:)=[f1,f2];end
end
PC=[];%订单对应批次
for i=1:length(YYY)PC=[PC;YYY{i,1},repmat(string(i),length(YYY{i,1}),1)];
end
function x=jiaocha(x,a,k_gen,num_gen)
%交叉率变化
a = a*exp(-k_gen/num_gen);
for i = 1:size(x,1)if rand < a%选择交叉位点b = randi(size(x,2))-1;x(i,:)=[x(i,b+1:end),x(i,1:b)];end
end
function x=bianyi(x,a,k_gen,num_gen)
%变异率变化
a = a*exp(-k_gen/num_gen);
for i = 1:size(x,1)if rand < a%选择变异位点b1 = randi(size(x,2));b2 = randi(size(x,2));%产生变异(针对序列问题,产生两个变异点进行两两交换)c = x(i,b1);x(i,b1)=x(i,b2);x(i,b2)=c;end
end
第一问结果矩阵说一下最优结果,上面程序运行完后,工作区中bestx矩阵为最优排序,bestf为最少批次,最少批次是九十多次,自己算下
F矩阵是每个批次的种类数和货物总数,U矩阵是每个批次的具体种类
第一问最终结果在PC矩阵中
第二问,在第一问结果基础上,考虑货架编号,第二问程序思路为:遍历每个批次通过模拟退火算法分别寻找最优位置分布,每个颗粒对应一组随机生成位置编号,然后遍历批次中的订单,通过ismember函数匹配并抽取出其货品对应的位置,按题目距离公式计算,目标函数为总距离最小化对位置分布进行寻优,每个批次的位置寻优是单独的
这是完整第一二问程序,用的是遗传算法+模拟退火算法,种群大小和迭代次数、颗粒数和温度等相关参数自己修改,想用其他算法的可以自己改框架
clear
clc
%% 第一问最优批次
%第一问最终结果在PC矩阵中
%数据准备
[~,~,X]=xlsread('附件1:订单信息.csv');
X=string(X);
X(1,:)=[];
Y=unique(X(:,1));
n=length(Y);
Z=[];
V=[];
for i=1:size(Y)z=X(find(X(:,1)==Y(i)),2);Z{i,1}=z;%记录每个订单下的货品数V(i,1)=sum(double(X(find(X(:,1)==Y(i)),3)));
end
%生成初始个体
N=200;%货架数
num=10;%种群大小
num_gen=10;%最大迭代次数
q1=0.7;%交叉率
q2=0.7;%变异率
chrom=[];
f=[];
for i=1:numchrom(i,:)=randperm(n);%计算目标函数%U=[];UU=[];u=1;for j=1:nUU=[UU;Z{chrom(i,j),1}];UU=unique(UU);if length(UU)<=N %如果小于200,那么就直接记录%U{u,1}=UU;else%如果大于,那么记录于下一批次u=u+1;UU=[];UU=[UU;Z{chrom(i,j),1}];%U{u,1}=UU;endendf(i,1)=u;%记录最大批次,目标函数
end
trace(1)=min(f);
%迭代
for k_gen=1:num_genselchrom=chrom;%选择,寻优维度较高,这里就全部进行交叉遗传selchrom=jiaocha(selchrom,q1,k_gen,num_gen);selchrom=bianyi(selchrom,q2,k_gen,num_gen);ff=[];for i=1:num%计算目标函数%U=[];UU=[];u=1;for j=1:nUU=[UU;Z{selchrom(i,j),1}];UU=unique(UU);if length(UU)<=N%如果小于200,那么就直接记录%U{u,1}=UU;else%如果大于,那么记录于下一批次u=u+1;UU=[];UU=[UU;Z{selchrom(i,j),1}];%U{u,1}=UU;endendff(i,1)=u;%记录最大批次,目标函数end%两代合并排序f=[f;ff];chrom=[chrom;selchrom];[f,b]=sort(f);chrom=chrom(b,:);f=f(1:num,:);chrom=chrom(1:num,:);trace=[trace;min(f)];
end
%迭代图
figure
plot(trace)
xlabel('迭代次数')
ylabel('批次');
%记录最优
[bestf,b]=min(f);
bestchrom=chrom(b,:);
%计算最优方案下每个批次的货品数和货物数
F=[];%第一列是每个批次货品数,第二列是货物数
U=[];%记录每批次具体货品种类
UU=[];
YY=[];
YYY=[];
u=1;
f1=0;
f2=0;
for j=1:nUU=[UU;Z{bestchrom(j),1}];YY=[YY;Y(bestchrom(j),1)];UU=unique(UU);if length(UU)<=N%如果小于200,那么就直接记录U{u,1}=UU;YYY{u,1}=YY;f1=length(UU);f2=f2+V(bestchrom(j),1);F(u,:)=[f1,f2];else%如果大于,那么记录于下一批次u=u+1;f1=0;f2=0;UU=[];YY=[];UU=[UU;Z{bestchrom(j),1}];YY=[YY;Y(bestchrom(j),1)];U{u,1}=UU;YYY{u,1}=YY;f1=length(UU);f2=f2+V(bestchrom(j),1);F(u,:)=[f1,f2];end
end
PC=[];%订单对应批次
for i=1:length(YYY)PC=[PC;YYY{i,1},repmat(string(i),length(YYY{i,1}),1)];
end
%% 第二问就是在第一问结果基础上寻优不同种类货品摆放位置,一个批次的种类有200个货架可以摆放
%第二问遍历每个批次通过模拟退火算法分别寻找最优位置分布
%程序逻辑是随机生成位置编号,然后遍历批次中的订单,通过ismember函数匹配并抽取出其货品对应的位置,按题目距离公式计算
%每个批次的位置寻优是单独的,最后结果保存在P矩阵中,与每个批次的货品种类U矩阵对应
%最终的记过在PP矩阵里
T=100; %初始化温度值
T_min=1; %设置温度下界
alpha=0.99; %温度的下降率
num=10; %颗粒总数
P=[];
for i=1:length(U)a=find(PC(:,2)==string(i));%依次遍历每个批次XX=[];%记录订单及货品种类,后续调用for j=1:length(a)XX{j,1}=PC(j,1);XX{j,2}=X(find(X(:,1)==PC(a(j),1)),2);end%初始颗粒分布x=[];y=[];for j=1:numy1=0;x{j,1}=randperm(N);x{j,1}=x{j,1}(1:length(U{i,1}));for k=1:size(XX,1)%ismember函数可批量匹配自字符串b=find(ismember(U{i,1},XX{k,2})==1);c=x{j,1}(b);y1=y1+max(c)-min(c);%距离endy(j,1)=y1;end[besty,b]=min(y);bestx=x{b,1};%以最小化while(T>T_min)xx=[];yy=[];for j=1:numy1=0;xx{j,1}=randperm(N);xx{j,1}=x{j,1}(1:length(U{i,1}));for k=1:size(XX,1)%ismember函数可批量匹配自字符串b=find(ismember(U{i,1},XX{k,2})==1);c=xx{j,1}(b);y1=y1+max(c)-min(c);%距离endyy(j,1)=y1;%是否更新最优delta=yy(j,1)-y(j,1);if delta<0y(j,1)=yy(j,1);x(j,:)=xx(j,:);elsep=exp(-delta/T);if p>randy(j,1)=yy(j,1);x(j,:)=xx(j,:);endend endif min(y)<besty[besty,b]=min(y);bestx=x{b,1};endT=T*alpha;endP{i,1}=bestx;
end
PP=[];
for i=1:length(P)PP=[PP;U{i,1},repmat(string(i),length(U{i,1}),1),string(P{i,1}')];
end
第二问结果,最后结果保存在P矩阵中,与每个批次的货品种类U矩阵对应,最终结果见PP矩阵
第三问,在第二问结果基础上,又考虑多个技术工,第三问编程稍微复杂些,入手的话一个一个规则写进去,注意别弄错了。
三个问都是单目标寻优,别想的太复杂
C题思路
C题非常简单,数据不用多说了吧,数据有相应解释,但是要注意题目没有给你们将缺陷的数据是怎样的,需要你们建立模型后通过设置阈值判断,题目也说了五中波形情况
如果不会读取数据就用matlab导入功能
1)文件格式:
1号电压,2号电压,3号电压,4号电压,5号电压,6号电压,方向, 脉冲, 时间戳
1.61, 1.06, 0.97, 0.95, 0.98, 1.47, 1, 1, 102070423
2)电压值一共有六个,对应了六根钢丝绳的数据。一行数据就是一帧数据。第一列表示第一根绳子的电压值,第二列表示第二根绳子的电压值,…,第六列表示第六根绳子的电压值。
3)方向“0”代表下行,方向“1”表示上行。
4)脉冲:其实就是距离,通过距离传感器得到。从1到n递增,每一帧(一行数据代表一帧数据)对应一个脉冲数字,脉冲数每增加1,代表距离增加了0.4米。
可能有多帧数据对应一个脉冲(表示在0.4米内进行了多次测量)。在绘制波形图时,每一帧所对应的距离等于0.4米除以帧数。
5)时间戳主要用来给文件命名,避免重复。这个数据可以忽略。
6)钢丝绳长为960米,断丝的位置可以用帧表示。
7)每一个文件记录一次运行的监测数据,10个文件记录了10次往返运行的监测数据。注意上行和下行的监测数据不是从同一端记录。
第一问,既然题目说了存在噪音,那就小波降噪就可以了,然后进行异常检验,注意这里的异常检验不是说用个LOF算法将所有异常数据带进去检验,而是取片段根据时间戳依次遍历取片段数据来检验,取的数据长度自定,最简单异常检测可以就按题目说的片段数据中的电压值和平均值之差的绝对值与平均值的百分比,设定阈值识别相应的异常点位,注意一个电压对应的是一条钢丝,脉冲1对应的是0.4米。
小波降噪给个案例程序
%%初始化程序
clear,clc
t1=clock;%% 载入噪声信号数据,数据为.mat格式,并且和程序放置在同一个文件夹下
load('filename.mat');%matrix
YSJ= filename;%% 数据预处理,数据可能是存储在矩阵或者是EXCEL中的二维数据,衔接为一维的,如果数据是一维数据,此步骤也不会影响数据
[c,l]=size(YSJ);
Y=[];
for i=1:cY=[Y,YSJ(i,:)];
end
[c1,l1]=size(Y);
X=[1:l1];%% 绘制噪声信号图像
figure(1);
plot(X,Y);
xlabel('横坐标');
ylabel('纵坐标');
title('原始信号');%% 硬阈值处理
lev=3;
xd=wden(Y,'heursure','h','one',lev,'db4');%硬阈值去噪处理后的信号序列
figure(2)
plot(X,xd)
xlabel('横坐标');
ylabel('纵坐标');
title('硬阈值去噪处理')
set(gcf,'Color',[1 1 1])%% 软阈值处理
lev=3;
xs=wden(Y,'heursure','s','one',lev,'db4');%软阈值去噪处理后的信号序列
figure(3)
plot(X,xs)
xlabel('横坐标');
ylabel('纵坐标');
title('软阈值去噪处理')
set(gcf,'Color',[1 1 1])
%% 固定阈值后的去噪处理
lev=3;
xz=wden(Y,'sqtwolog','s','sln',lev,'db4');%固定阈值去噪处理后的信号序列
figure(4)
plot(X,xz);
xlabel('横坐标');
ylabel('纵坐标');
title('固定阈值后的去噪处理')
set(gcf,'Color',[1 1 1])
%% 计算信噪比SNR
Psig=sum(Y*Y')/l1;
Pnoi1=sum((Y-xd)*(Y-xd)')/l1;
Pnoi2=sum((Y-xs)*(Y-xs)')/l1;
Pnoi3=sum((Y-xz)*(Y-xz)')/l1;
SNR1=10*log10(Psig/Pnoi1);
SNR2=10*log10(Psig/Pnoi2);
SNR3=10*log10(Psig/Pnoi3);
%% 计算均方根误差RMSE
RMSE1=sqrt(Pnoi1);
RMSE2=sqrt(Pnoi2);
RMSE3=sqrt(Pnoi3);
%% 输出结果
disp('-------------三种阈值设定方式的降噪处理结果---------------');
disp(['硬阈值去噪处理的SNR=',num2str(SNR1),',RMSE=',num2str(RMSE1)]);
disp(['软阈值去噪处理的SNR=',num2str(SNR2),',RMSE=',num2str(RMSE2)]);
disp(['固定阈值后的去噪处理SNR=',num2str(SNR3),',RMSE=',num2str(RMSE3)]);
t2=clock;
tim=etime(t2,t1);
disp(['------------------运行耗时',num2str(tim),'秒-------------------'])
第二问,需要挖掘出一些指标,然后通过评价算法进行评价,得到的值是相对的,将其作为安全性能的高低,指标可以是信号异常次数、方差等,可以尽可能多挖掘一些指标出来。
B题思路
整个题没有组合投资就比较简单,给的是宏观数据,首先宏观数据都是需要进行预测的,然后选择相关性较高的指标用于预测股票走势,不管是线性回归还是其他算法都可以,数据可以做插值拟合进行补充,以股票时刻为准。插值拟合推荐使用保形样条插值法,在matlab使用filliming函数的pchip参数实现。关于很多人说的指标时间刻度不一样的问题,一种是以股票时刻为准,其他的指标按趋势拆为每5分钟的数据,或者是都按天取平均,不管怎么样,需要统一下时间刻度
K线图怎么画就通过Kplot函数实现,这个肯定论文里需要放一个图的,一般股票的预测都是拿收盘价来预测。
来看看第一问,刚刚说了一般都是拿股票收盘价来预测,那么这里的主要指标,肯定是与收盘价相关性较高的指标,第一问就比较简单,直接通过相关性方法(推荐余弦相似度、方差分析)来做就行,不是主成分哈,那求得是映射基向量,是用来反映数据整体特征的,虽然是主要成分,但是这道题要求是找到与“数字经济”板块有关的重要指标,别用错算法了,后问也提到了成交量,这里在做一个关于成交量的相关性分析,找出相关性较强的指标。
第二问第三问就是分别用主要指标作为输入,成交量和收盘价分别作为输出,带入机器学习算法(推荐神经网络、Xgboost)中训练,最后记得做误差验证。
第四问这里普及下,可以买多也可以买空,买多就是股票涨了,你买入就赚了,买空就是股票降低买入你就赚了,一个是买多一个是买空,别绕进去了,程序中一定要记录好,关于交易多少,这个是需要大家构建一个风控模型的,股票价格就假设收盘价是一笔的价格,后面买入和卖出,都按整数笔交易,虽然题目是有2022年1月4日至2022年1月28 日的数据,你如果参考的话那肯定你的收益很高,要理解题目背景,肯定是你不知道未来的数据,通过预测得到的结果,也就是第三问的结果,然后在这基础上,依次取预测数据片段例如k+1:k+n的n数据分析看是买入还是卖出,买入的话是买多还是买空,同样依次取真实数据片段,如果预期会亏损那么会触发风控机制,会清空股票,当然也可以设定不同阈值,在不同阈值时的清空比例不一样,比如说到风险值0.5了,清空一部分,到风险值0.8了,清空全部,还有就是你把钱花去买了股票了,股票的价值可不是你的现金,卖了后到手里的钱才能用来再次做投资,关于回撤率再说一下,你在1日交易了一笔,在2日交易了一笔,这是分开的,如果1日买的一笔在遇到风险触发风控机制卖出的就算是回撤了,2日买的刚好达到卖出条件卖出了,那么此时的回撤率是50%,如果是触发你的卖出机制,那么就不算回撤,这个要理解。第四问可不是简单的预测买入卖出,肯定需要还原真实股票交易场景,风控、买入、卖出机制都需要构建模型,怎么风控,就取真实片段数据例如k+1:k+n的n数据去进行风险评估,最简单的就是计算方差,怎么买入,预测后面一段时间都是上涨,取预测片段数据如果上升的次数较多,那么可以买入,同样取预测片段数据,如果下降的次数多就卖,这是买多的情况,那么买空也是同样道理,一般股票操作软件中也会设置卖出线,比如说上涨15%自动平仓,下降15%自动平仓。
不建议大家把第四问想的太复杂,可以适当简化,第一个要注意的是风控和卖出是用的真实数据,买入是用的预测数据,第二要注意的是买多和买空要区分好。
点击链接加入群聊【2024华中杯数学建模资料汇总】:
相关文章:

2024华中杯数学建模参考思路+完整代码+后续成品论文预约
(完整版资料获取在文末哦) 关于24年华中杯的更新进度,大家可以参考我们前年比赛。 22年华中杯思路: 大家也可以看这一篇 A题思路 一订单包含多种货品,每种商品有不同的数量,题目没说订单的需求时间&am…...
ARM_day8:基于iic总线的通信
一、IIC总线的基本概念: iic总线是一种带应答的同步的、串行、半双工的通信方式,支持一个主机对应多个从机。它有一根SCL(时钟线)和一根SDA(数据线)组成,由于只有一根数据线,所以它是…...

33、Lua Cocos2d-x使用Luajit实现加密
项目要求对lua脚本进行加密,查了一下相关的资料 ,得知lua本身可以使用luac将脚本编译为字节码(bytecode)从而实现加密,试了一下,确实可行。下面是使用原生的lua解释器编译字节码: 新建一个名为1.lua的文件,…...

spring 集成 mybatis
spring 集成 mybatis 1、spring对junit的支持1.1、对junit4的支持1.2 对junit5的支持 2、Spring6集成MyBatis3.52.1 实现步骤2.2 实现 1、spring对junit的支持 1.1、对junit4的支持 依赖 <?xml version"1.0" encoding"UTF-8"?> <project xml…...
rtpengine 的端点学习模式
端点学习模式(endpoint-learning) delayed|immediate|off|heuristic delayed 延迟模式,等待 3 秒钟,然后再提交到端点地址 immediate 立即模式,收到第一个 rtp 包之后立即学习,不等 3 秒 off 关闭模式…...

Windows 安装 A UDP/TCP Assistant 网络调试助手
Windows 安装 A UDP/TCP Assistant 网络调试助手 0. 引言1. 下载地址2. 安装和使用 0. 引言 需要调试一个实时在线聊天程序,安装一个UDP/TCP Assistant 网络调试助手,方便调试。 1. 下载地址 https://github.com/busyluo/NetAssistant/releases 2. 安…...

web自动化系列-selenium的3种等待方式(十一)
在ui自动化测试中,几乎出现问题最多的情况就是定位不到元素 ,当你的自动化在运行过程中 ,突然发现报错走不下去了 。很大概率就是因为找不到元素 ,而找不到元素的一个主要原因就是页面加载慢 ,代码运行速度快导致 。 …...

每日OJ题_完全背包④_力扣279. 完全平方数(一维和二维)
目录 力扣279. 完全平方数 问题解析 解析代码 优化代码(相同子问题分析和滚动数组) 力扣279. 完全平方数 279. 完全平方数 难度 中等 给你一个整数 n ,返回 和为 n 的完全平方数的最少数量 。 完全平方数 是一个整数,其值…...

web项目中jsp页面不识别el表达式
如果使用el表达式出现下图问题 ** 解决办法 ** 这是因为maven创建项目时,web.xml头部声明默认是2.3,这个默认jsp关闭el表达式 修改web.xml文件开头的web-app的版本 <?xml version"1.0" encoding"UTF-8"?> <web-app x…...

【Python基础】字典
文章目录 [toc]什么是字典键值对示例键异常 遍历列表什么是遍历遍历字典的键keys()方法 遍历字典的值values()方法 遍历字典的键值对items()方法 字典操作增加键值对修改键值对查询键值对get()方法 删除键值对delclear()方法 个人主页:丷从心 系列专栏:…...

2024HW --> 安全产品 Powershell无文件落地攻击
在HW中,除了了解中间件,web漏洞,这些攻击的手法,还得了解应急响应,安全产品,入侵排查,溯源反制...... 那么今天,就来说一下安全产品(安全公司我就不说了,这个…...

力扣哈哈哈哈
public class MyStack {int top;Queue<Integer> q1;Queue<Integer> q2;public MyStack() {q1new LinkedList<Integer>();q2new LinkedList<Integer>();}public void push(int x) {q2.offer(x);//offer是入队方法while (!q1.isEmpty()){q2.offer(q1.pol…...

RUM 最佳实践-视觉稳定性的探索与实践
写在前面的话 在当今数字时代,网页的视觉稳定性对于提供良好的用户体验至关重要。其中一个衡量视觉稳定性的关键指标就是累积布局偏移(Cumulative Layout Shift,简称 CLS)。CLS 作为 Web Vitals 指标之一,它衡量的是网…...

PostgreSQL的学习心得和知识总结(一百三十八)|深入理解PostgreSQL数据库之Protocol message构造和解析逻辑
目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、参考书籍:《PostgreSQL数据库内核分析》 2、参考书籍:《数据库事务处理的艺术:事务管理与并发控制》 3、PostgreSQL数据库仓库…...
爬虫开发教程
一、爬虫概述 爬虫(也称为网络爬虫或蜘蛛)是一种自动化程序,能够模拟人类在互联网上浏览和抓取数据的行为。它通过发送HTTP请求,获取网页的HTML代码,然后解析这些代码以提取有用的数据。爬虫在数据分析、价格监测、竞…...

【Python】高级进阶(专版提升3)
Python 1 程序结构1.1 模块 Module1.1.1 定义1.1.2 作用1.1.3 导入1.1.3.1 import1.1.3.2 from import 1.1.4 模块变量1.1.5 加载过程1.1.6 分类 1.2 包package1.2.1 定义1.2.2 作用1.2.3 导入1.1.3.1 import1.1.3.2 from import 2 异常处理Error2.1 异常2.2 处理 3 迭代3.1 可…...
LeetCode 1378、1277、2944
1378 二级排序,compare函数必须是static的 class Solution { public:struct node {int val;int priority;};static bool compare(const node &n1, const node &n2) {if (n1.priority n2.priority) {return n1.val < n2.val;}return n1.priority < n…...

【缓存常见问题】
在使用缓存时特别是在高并发场景下会遇到很多问题,常用的问题有缓存穿透、缓存击穿、缓存雪崩以及缓存一致性问题。 1、缓存穿透 首先,什么是缓存穿透呢? 缓存穿透是指请求一个不存在的数据,缓存层和数据库层都没有这个数据&…...

Python爬取猫眼电影票房 + 数据可视化
目录 主角查看与分析 爬取可视化分析猫眼电影上座率前10分析猫眼电影票房场均人次前10分析猫眼电影票票房占比分析 主角查看与分析 爬取 对猫眼电影票房进行爬取,首先我们打开猫眼 接着我们想要进行数据抓包,就要看网站的具体内容,通过按F12…...
Spring Boot深度解析:是什么、为何使用及其优势所在
在Java企业级应用开发的漫长历史中,Spring框架以其卓越的依赖注入和面向切面编程的能力,赢得了广大开发者的青睐。然而,随着技术的不断进步和项目的日益复杂,传统的Spring应用开发流程逐渐显得繁琐和低效。为了解决这一问题&#…...

wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...

3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器
一、原理介绍 传统滑模观测器采用如下结构: 传统SMO中LPF会带来相位延迟和幅值衰减,并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF),可以去除高次谐波,并且不用相位补偿就可以获得一个误差较小的转子位…...

在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例
目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码:冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...