目录
2022华数杯A题思路:
2022华数杯B题思路:
2022华数杯C题思路:
神经网络代码:
2023华数杯数学建模资料思路模型,赛后发布,见文末名片
A题是一个典型的优化类问题,需要我们解决芯片中的振荡器设计结构问题,首先我们根据题中所给的指标来给出约束条件,本题中需要考虑的指标:速度、面积、功率,我们可以考虑使用线性规划模型,构建变量之间的数学关系,设立目标函数,并进一步对该模型进行优化,而后进行求解,具体的思路之后进行详细分析!
第一问:阈值电压、K值、栅长栅宽最大最小值在附录1中都有。漏源电压:漏极和源极两端的电压。栅源电压:栅极和源极两端的电压。栅极(Gate——G,也叫做门极),源极(Source——S), 漏极(Drain——D),题目中Id的公式注意要看附录1的图1,第一问的输出频率怎么来算,其实就是根据电压通过Id公式推导得出电流,要算频率就要算一下单级反相器的延迟时间。
B题为机器人组装问题,工厂每次生产计划的计划期为一周,在总成本最小的情况下,需要我们制定7天的生产计划,我们把它看做一个动态规划类问题就比较容易解决了。
将多阶段决策过程划分阶段,恰当地选择状态变量、决策变量以定义最优指标函数,从而把问题化成一族同类型的子问题,然后逐个求解;
求解时从边界条件开始,逆序过程行进,逐段递推寻优.在每一个子问题求解时,都要使用它前面已求出的子问题的最优结果.最后一个子问题的最优解,就是整个问题的最优解;
动态规划方法是既将当前一段与未来各段分开,又把当前效益和未来效益结合起来考虑的一种最优化方法,因此每段的最优决策选取是从全局考虑的,与该段的最优选择一般是不同的;
机器人在组装过程中,由于需求是随时间变化的,因此企业为了获得最佳生产效益,就要在整个生产过程中逐日地根据库存和需求决定生产计划。对于这个问题,我们只需要把多阶段决策问题转化为一系列单阶段最优化问题,从而逐个求解即可。
问题一:请研究插层后结构变量、产品性能的变化规律,并分析插层率对于这些变化是否有影响?
C题为材料性能研究问题,需要我们研究插层后结构变量、产品性能的变化规律,来分析插层率对于这些变化是否 有影响,我们首先需要对数据进行清理,并且对数据进行描述性的统计,我们考虑使用因子分析模型,还可以使用灰色关联分析(将插层率作为母序列,其余变量作为子序列),或者是单因素方差分析,需要注意的是,如果使用单因素方差分析,需要将插层率转化为定类数据进行讨论(将插层率划分一个分类标准即可)。
问题二:请研究工艺参数与结构变量之间的关系。表1给了8个工艺参数组合,请将预测的结构变量数据填入表1中。
问题二是一个预测类的问题,我们考虑使用神经网络算法/时间序列算法来进行预测,为提高模型的准确性,本部分增加了更多的考量变量,同时采用精度更高的,基于遗传算法的神经网络模型,将整理后的数据集中,80%的数据用于模型求解,以确定变量指标的权值与阈值,将剩余的20%的数据通过残差计算用于模型精度检验。为进一步提高模型精度与计算效率,本文提出采用基于Levenberg-Marquardt算法求解。最后我们进行一个仿真,将表中的数据进行数据,将仿真结果填入表中。
问题三:请研究结构变量与产品性能的关系,以及结构变量之间、产品性能之间的关系。结合第二问,研究当工艺参数为多少时,产品的过滤效率将会达到最高?
当工艺参数为多少时,产品的过滤效率将会达到最高,将过滤效率作为一个因变量,其他指标作为自变量进行一个回归分析,构建判别函数,同问题二相关机器学习方法即可,也可以使用线性SVM(支持向量机)等
下面给出一些参考代码:神经网络代码,对数据进行预测
% I. 清空环境变量
clear all
clc
% II. 训练集/测试集产生
% 1. 导入数据集,可以替换为自己的数据集
load spectra_data.mat
% 2. 随机产生训练集和测试集
temp = randperm(size(NIR,1));
% 训练集——50个样本,P为输入数据,T为对应输入数据的输出结果
P_train = NIR(temp(1:50),:)';
T_train = octane(temp(1:50),:)';
% 测试集——10个样本
P_test = NIR(temp(51:end),:)';
T_test = octane(temp(51:end),:)';
N = size(P_test,2);
% III. 数据归一化
[p_train, ps_input] = mapminmax(P_train,0,1);
p_test = mapminmax('apply',P_test,ps_input);
[t_train, ps_output] = mapminmax(T_train,0,1);
% IV. BP神经网络创建、训练及仿真测试
% 1. 创建网络,[9,9]意思为网络含有两个隐藏层,每层有9个单元
net = newff(p_train,t_train,[9,9]);
% 2. 设置训练参数
net.trainParam.epochs = 1000;%训练批次
net.trainParam.goal = 1e-12;%训练目标,误差小于1e-12即结束训练
net.trainParam.lr = 0.01;%设置学习率
%另外也可以设置其他训练参数,可看newff()函数介绍手册
% 3. 训练网络
net = train(net,p_train,t_train);
% 4. 仿真测试
t_sim = sim(net,p_test);
% 5. 数据反归一化
T_sim = mapminmax('reverse',t_sim,ps_output);
% V. 性能评价
% 1. 相对误差error
error = abs(T_sim - T_test)./T_test;
% 2. 决定系数R^2
R2 = (N * sum(T_sim .* T_test) - sum(T_sim) * sum(T_test))^2 / ((N * sum((T_sim).^2) - (sum(T_sim))^2) * (N * sum((T_test).^2) - (sum(T_test))^2));
% 3. 结果对比
result = [T_test' T_sim' error']
% VI. 绘图
figure
plot(1:N,T_test,'b:*',1:N,T_sim,'r-o')
legend('真实值','预测值')
xlabel('预测样本')
ylabel('xxxx')
string = {'xxxxxx预测结果对比';['R^2=' num2str(R2)]};
title(string)