攻击Wordpress网站,网站开发成本计算,石家庄做外贸的网站,宁波网站建设设计图#xff08;完整版资料获取在文末哦#xff09;
关于24年华中杯的更新进度#xff0c;大家可以参考我们前年比赛。
22年华中杯思路#xff1a;
大家也可以看这一篇
A题思路
一订单包含多种货品#xff0c;每种商品有不同的数量#xff0c;题目没说订单的需求时间完整版资料获取在文末哦
关于24年华中杯的更新进度大家可以参考我们前年比赛。
22年华中杯思路
大家也可以看这一篇
A题思路
一订单包含多种货品每种商品有不同的数量题目没说订单的需求时间那就考虑怎么最短时间内分拣完 题目介绍中我们可以得知一个货架放一种货品 下面就是我们要解决的问题 其实大家只要先把背景理解了就特别简单我们直接来看第一问怎么编程
第一问将当日订单分为多个批次。要求每个批次的订单所含货品种类数均不超过N200 且批次越少越好相应转运次数也越少效率越高。就是说将附件1中的订单进行打包这里不是聚类哈别乱搞反正一个批次就放200多种货品这里没讲一个货架能放多少数量那我们也就无所谓了我们程序怎么编首先923个订单是我我就直接用randperm函数来一个随机序列再说然后每个通过返回索引依次遍历用矩阵保存并通过unique函数去重直到货品种类不超过200为止作为第一个批次后面类推当然肯定是用优化算法解决这里就是说我们的每个个体都是randperm函数生成的随机序列然后目标函数则是通过依次打包订单后的批次次数直接来程序吧
这是完整第一问程序用的是遗传算法种群大小和迭代次数等相关参数自己修改想用其他算法的可以自己改框架
clear
clc
%% 第一问最优批次
%第一问最终结果在PC矩阵中
%数据准备
[~,~,X]xlsread(附件1订单信息.csv);
Xstring(X);
X(1,:)[];
Yunique(X(:,1));
nlength(Y);
Z[];
V[];
for i1:size(Y)zX(find(X(:,1)Y(i)),2);Z{i,1}z;%记录每个订单下的货品数V(i,1)sum(double(X(find(X(:,1)Y(i)),3)));
end
%生成初始个体
N200;%货架数
num10;%种群大小
num_gen10;%最大迭代次数
q10.7;%交叉率
q20.7;%变异率
chrom[];
f[];
for i1:numchrom(i,:)randperm(n);%计算目标函数%U[];UU[];u1;for j1:nUU[UU;Z{chrom(i,j),1}];UUunique(UU);if length(UU)N %如果小于200那么就直接记录%U{u,1}UU;else%如果大于那么记录于下一批次uu1;UU[];UU[UU;Z{chrom(i,j),1}];%U{u,1}UU;endendf(i,1)u;%记录最大批次目标函数
end
trace(1)min(f);
%迭代
for k_gen1:num_genselchromchrom;%选择寻优维度较高这里就全部进行交叉遗传selchromjiaocha(selchrom,q1,k_gen,num_gen);selchrombianyi(selchrom,q2,k_gen,num_gen);ff[];for i1:num%计算目标函数%U[];UU[];u1;for j1:nUU[UU;Z{selchrom(i,j),1}];UUunique(UU);if length(UU)N%如果小于200那么就直接记录%U{u,1}UU;else%如果大于那么记录于下一批次uu1;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);chromchrom(b,:);ff(1:num,:);chromchrom(1:num,:);trace[trace;min(f)];
end
%迭代图
figure
plot(trace)
xlabel(迭代次数)
ylabel(批次);
%记录最优
[bestf,b]min(f);
bestchromchrom(b,:);
%计算最优方案下每个批次的货品数和货物数
F[];%第一列是每个批次货品数第二列是货物数
U[];%记录每批次具体货品种类
UU[];
YY[];
YYY[];
u1;
f10;
f20;
for j1:nUU[UU;Z{bestchrom(j),1}];YY[YY;Y(bestchrom(j),1)];UUunique(UU);if length(UU)N%如果小于200那么就直接记录U{u,1}UU;YYY{u,1}YY;f1length(UU);f2f2V(bestchrom(j),1);F(u,:)[f1,f2];else%如果大于那么记录于下一批次uu1;f10;f20;UU[];YY[];UU[UU;Z{bestchrom(j),1}];YY[YY;Y(bestchrom(j),1)];U{u,1}UU;YYY{u,1}YY;f1length(UU);f2f2V(bestchrom(j),1);F(u,:)[f1,f2];end
end
PC[];%订单对应批次
for i1:length(YYY)PC[PC;YYY{i,1},repmat(string(i),length(YYY{i,1}),1)];
end
function xjiaocha(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,b1:end),x(i,1:b)];end
end
function xbianyi(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);
Xstring(X);
X(1,:)[];
Yunique(X(:,1));
nlength(Y);
Z[];
V[];
for i1:size(Y)zX(find(X(:,1)Y(i)),2);Z{i,1}z;%记录每个订单下的货品数V(i,1)sum(double(X(find(X(:,1)Y(i)),3)));
end
%生成初始个体
N200;%货架数
num10;%种群大小
num_gen10;%最大迭代次数
q10.7;%交叉率
q20.7;%变异率
chrom[];
f[];
for i1:numchrom(i,:)randperm(n);%计算目标函数%U[];UU[];u1;for j1:nUU[UU;Z{chrom(i,j),1}];UUunique(UU);if length(UU)N %如果小于200那么就直接记录%U{u,1}UU;else%如果大于那么记录于下一批次uu1;UU[];UU[UU;Z{chrom(i,j),1}];%U{u,1}UU;endendf(i,1)u;%记录最大批次目标函数
end
trace(1)min(f);
%迭代
for k_gen1:num_genselchromchrom;%选择寻优维度较高这里就全部进行交叉遗传selchromjiaocha(selchrom,q1,k_gen,num_gen);selchrombianyi(selchrom,q2,k_gen,num_gen);ff[];for i1:num%计算目标函数%U[];UU[];u1;for j1:nUU[UU;Z{selchrom(i,j),1}];UUunique(UU);if length(UU)N%如果小于200那么就直接记录%U{u,1}UU;else%如果大于那么记录于下一批次uu1;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);chromchrom(b,:);ff(1:num,:);chromchrom(1:num,:);trace[trace;min(f)];
end
%迭代图
figure
plot(trace)
xlabel(迭代次数)
ylabel(批次);
%记录最优
[bestf,b]min(f);
bestchromchrom(b,:);
%计算最优方案下每个批次的货品数和货物数
F[];%第一列是每个批次货品数第二列是货物数
U[];%记录每批次具体货品种类
UU[];
YY[];
YYY[];
u1;
f10;
f20;
for j1:nUU[UU;Z{bestchrom(j),1}];YY[YY;Y(bestchrom(j),1)];UUunique(UU);if length(UU)N%如果小于200那么就直接记录U{u,1}UU;YYY{u,1}YY;f1length(UU);f2f2V(bestchrom(j),1);F(u,:)[f1,f2];else%如果大于那么记录于下一批次uu1;f10;f20;UU[];YY[];UU[UU;Z{bestchrom(j),1}];YY[YY;Y(bestchrom(j),1)];U{u,1}UU;YYY{u,1}YY;f1length(UU);f2f2V(bestchrom(j),1);F(u,:)[f1,f2];end
end
PC[];%订单对应批次
for i1:length(YYY)PC[PC;YYY{i,1},repmat(string(i),length(YYY{i,1}),1)];
end
%% 第二问就是在第一问结果基础上寻优不同种类货品摆放位置一个批次的种类有200个货架可以摆放
%第二问遍历每个批次通过模拟退火算法分别寻找最优位置分布
%程序逻辑是随机生成位置编号然后遍历批次中的订单通过ismember函数匹配并抽取出其货品对应的位置按题目距离公式计算
%每个批次的位置寻优是单独的最后结果保存在P矩阵中与每个批次的货品种类U矩阵对应
%最终的记过在PP矩阵里
T100; %初始化温度值
T_min1; %设置温度下界
alpha0.99; %温度的下降率
num10; %颗粒总数
P[];
for i1:length(U)afind(PC(:,2)string(i));%依次遍历每个批次XX[];%记录订单及货品种类后续调用for j1:length(a)XX{j,1}PC(j,1);XX{j,2}X(find(X(:,1)PC(a(j),1)),2);end%初始颗粒分布x[];y[];for j1:numy10;x{j,1}randperm(N);x{j,1}x{j,1}(1:length(U{i,1}));for k1:size(XX,1)%ismember函数可批量匹配自字符串bfind(ismember(U{i,1},XX{k,2})1);cx{j,1}(b);y1y1max(c)-min(c);%距离endy(j,1)y1;end[besty,b]min(y);bestxx{b,1};%以最小化while(TT_min)xx[];yy[];for j1:numy10;xx{j,1}randperm(N);xx{j,1}x{j,1}(1:length(U{i,1}));for k1:size(XX,1)%ismember函数可批量匹配自字符串bfind(ismember(U{i,1},XX{k,2})1);cxx{j,1}(b);y1y1max(c)-min(c);%距离endyy(j,1)y1;%是否更新最优deltayy(j,1)-y(j,1);if delta0y(j,1)yy(j,1);x(j,:)xx(j,:);elsepexp(-delta/T);if prandy(j,1)yy(j,1);x(j,:)xx(j,:);endend endif min(y)besty[besty,b]min(y);bestxx{b,1};endTT*alpha;endP{i,1}bestx;
end
PP[];
for i1: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
t1clock;%% 载入噪声信号数据数据为.mat格式并且和程序放置在同一个文件夹下
load(filename.mat);%matrix
YSJ filename;%% 数据预处理数据可能是存储在矩阵或者是EXCEL中的二维数据衔接为一维的如果数据是一维数据此步骤也不会影响数据
[c,l]size(YSJ);
Y[];
for i1:cY[Y,YSJ(i,:)];
end
[c1,l1]size(Y);
X[1:l1];%% 绘制噪声信号图像
figure(1);
plot(X,Y);
xlabel(横坐标);
ylabel(纵坐标);
title(原始信号);%% 硬阈值处理
lev3;
xdwden(Y,heursure,h,one,lev,db4);%硬阈值去噪处理后的信号序列
figure(2)
plot(X,xd)
xlabel(横坐标);
ylabel(纵坐标);
title(硬阈值去噪处理)
set(gcf,Color,[1 1 1])%% 软阈值处理
lev3;
xswden(Y,heursure,s,one,lev,db4);%软阈值去噪处理后的信号序列
figure(3)
plot(X,xs)
xlabel(横坐标);
ylabel(纵坐标);
title(软阈值去噪处理)
set(gcf,Color,[1 1 1])
%% 固定阈值后的去噪处理
lev3;
xzwden(Y,sqtwolog,s,sln,lev,db4);%固定阈值去噪处理后的信号序列
figure(4)
plot(X,xz);
xlabel(横坐标);
ylabel(纵坐标);
title(固定阈值后的去噪处理)
set(gcf,Color,[1 1 1])
%% 计算信噪比SNR
Psigsum(Y*Y)/l1;
Pnoi1sum((Y-xd)*(Y-xd))/l1;
Pnoi2sum((Y-xs)*(Y-xs))/l1;
Pnoi3sum((Y-xz)*(Y-xz))/l1;
SNR110*log10(Psig/Pnoi1);
SNR210*log10(Psig/Pnoi2);
SNR310*log10(Psig/Pnoi3);
%% 计算均方根误差RMSE
RMSE1sqrt(Pnoi1);
RMSE2sqrt(Pnoi2);
RMSE3sqrt(Pnoi3);
%% 输出结果
disp(-------------三种阈值设定方式的降噪处理结果---------------);
disp([硬阈值去噪处理的SNR,num2str(SNR1),RMSE,num2str(RMSE1)]);
disp([软阈值去噪处理的SNR,num2str(SNR2),RMSE,num2str(RMSE2)]);
disp([固定阈值后的去噪处理SNR,num2str(SNR3),RMSE,num2str(RMSE3)]);
t2clock;
timetime(t2,t1);
disp([------------------运行耗时,num2str(tim),秒-------------------])
第二问需要挖掘出一些指标然后通过评价算法进行评价得到的值是相对的将其作为安全性能的高低指标可以是信号异常次数、方差等可以尽可能多挖掘一些指标出来。
B题思路
整个题没有组合投资就比较简单给的是宏观数据首先宏观数据都是需要进行预测的然后选择相关性较高的指标用于预测股票走势不管是线性回归还是其他算法都可以数据可以做插值拟合进行补充以股票时刻为准。插值拟合推荐使用保形样条插值法在matlab使用filliming函数的pchip参数实现。关于很多人说的指标时间刻度不一样的问题一种是以股票时刻为准其他的指标按趋势拆为每5分钟的数据或者是都按天取平均不管怎么样需要统一下时间刻度
K线图怎么画就通过Kplot函数实现这个肯定论文里需要放一个图的一般股票的预测都是拿收盘价来预测。
来看看第一问刚刚说了一般都是拿股票收盘价来预测那么这里的主要指标肯定是与收盘价相关性较高的指标第一问就比较简单直接通过相关性方法推荐余弦相似度、方差分析来做就行不是主成分哈那求得是映射基向量是用来反映数据整体特征的虽然是主要成分但是这道题要求是找到与“数字经济”板块有关的重要指标别用错算法了后问也提到了成交量这里在做一个关于成交量的相关性分析找出相关性较强的指标。
第二问第三问就是分别用主要指标作为输入成交量和收盘价分别作为输出带入机器学习算法推荐神经网络、Xgboost中训练最后记得做误差验证。
第四问这里普及下可以买多也可以买空买多就是股票涨了你买入就赚了买空就是股票降低买入你就赚了一个是买多一个是买空别绕进去了程序中一定要记录好关于交易多少这个是需要大家构建一个风控模型的股票价格就假设收盘价是一笔的价格后面买入和卖出都按整数笔交易虽然题目是有2022年1月4日至2022年1月28 日的数据你如果参考的话那肯定你的收益很高要理解题目背景肯定是你不知道未来的数据通过预测得到的结果也就是第三问的结果然后在这基础上依次取预测数据片段例如k1:kn的n数据分析看是买入还是卖出买入的话是买多还是买空同样依次取真实数据片段如果预期会亏损那么会触发风控机制会清空股票当然也可以设定不同阈值在不同阈值时的清空比例不一样比如说到风险值0.5了清空一部分到风险值0.8了清空全部还有就是你把钱花去买了股票了股票的价值可不是你的现金卖了后到手里的钱才能用来再次做投资关于回撤率再说一下你在1日交易了一笔在2日交易了一笔这是分开的如果1日买的一笔在遇到风险触发风控机制卖出的就算是回撤了2日买的刚好达到卖出条件卖出了那么此时的回撤率是50%如果是触发你的卖出机制那么就不算回撤这个要理解。第四问可不是简单的预测买入卖出肯定需要还原真实股票交易场景风控、买入、卖出机制都需要构建模型怎么风控就取真实片段数据例如k1:kn的n数据去进行风险评估最简单的就是计算方差怎么买入预测后面一段时间都是上涨取预测片段数据如果上升的次数较多那么可以买入同样取预测片段数据如果下降的次数多就卖这是买多的情况那么买空也是同样道理一般股票操作软件中也会设置卖出线比如说上涨15%自动平仓下降15%自动平仓。
不建议大家把第四问想的太复杂可以适当简化第一个要注意的是风控和卖出是用的真实数据买入是用的预测数据第二要注意的是买多和买空要区分好。
点击链接加入群聊【2024华中杯数学建模资料汇总】