点击上方蓝字关注我们
算法用途
最近有陆陆续续有挺多同学和老师问怎么解决最优结构设计问题,相比于机器学习预测寻找最优的拟合模型,他们的问题主要是能找到最优的特征设计值。比如物理材料设计、药物设计、有限元仿真之类的,数据通过实验或者仿真获取是比较难获取的,只能得到有限条数据,想通过有限条数据去寻找最优的结构特征组合,实际上特征组合是有非常多的不可能一条一条试。
了解到类似的问题很多都发表在SCI1区文章上,有类似应用场景的同志们可以应用起来了!
那么对于这类问题,很显然首先需要拟合最优特征和输出之间的关系,经常要考虑多个设计指标,因此变成了多输出问题,然后综合多个输出目标进行输入特征寻优,设计到多目标优化的问题,乍一看有点复杂,其实还挺简单的!
我给大家找到了一个最简单实现的方式,代码不超过40行就能实现,类似问题都能直接套用,这次还录制了详细的B站教程!
实例分析
那么这次的提供大家两个案例,第一个案例是有14个设计特征指标,对应三个评价输出系数,有两个特征指标要求是整数,其他特征指标都可以离散,14个特征可以有非常多组合,那么哪种是最优的组合呢?
案例的实现
第3步选择一个预测方法,可以从50多种方法里面选择,这里我们选择RF随机森林,以随机森林为例子
第4步开启优化方法,可以在30种智能优化算法里面选择一种,设置进化数和迭代次数,要获得好的拟合模型,优化函数不可少
function y_out_put=calcalate_mutiobj(test_x_feature_label)
x_mu=G_out_data.x_mu_all;
x_sig=G_out_data.x_sig_all;
y_mu_all=G_out_data.y_mu_all; %展示了多输出的个数
y_sig_all=G_out_data.y_sig_all;
y_last_result=[];
for NUM_all=1:length(y_mu_all)
test_x_feature_label_norm = (test_x_feature_label - x_mu) ./ x_sig; % 训练数据标准化
Mdl_all=G_out_data.model_all;
Mdl=Mdl_all{1,NUM_all};
y_test_predict_norm=predict(Mdl,test_x_feature_label_norm);
,NUM_all)=y_test_predict_norm.*y_sig_all(NUM_all)+y_mu_all(NUM_all); :
end
y_out_put=y_last_result; %输出 %默认求最小
y_out_put(2)=-y_out_put(2); %第二个目标求最大,其他目标求最小的情况
y_out_put=-y_out_put; %全部目标求最大的情况
end
优化目标做完后就直接写主函数,采用matlab自动的多目标遗传算法工具箱,调用非常简便,还能做整数约束,以下例子只限制了特征8、14是整数约束,其他约束都可以自己添加调用简单
clc;clear;close all;
%14个特征对于3个输出
%然后反推3个输出对应的最优特征
rng default % For reproducibility
fun = @calcalate_mutiobj; %设置的函数
intcon = [8,14]; %第8个和第14个特征是整数
%14个特征的上限和下限
lb = [253.430 0.010 252.43 1.62 2.46 2.25 -2.3 1 -62.52 0.64 -107.15 902.78 0 1];
ub = [266.72 0.92 348.88 18.07 15.6 12.16 100.41 6 77.68 274.07 10.04 915.38 0.25 12];
options = optimoptions("gamultiobj","PlotFcn","gaplotpareto",...
"PopulationSize",20,'MaxGenerations',50); %对应的是种群数和迭代次数
nvars = length(lb);
A = []; %不等约束
b = []; %不等约束
Aeq = []; %等式约束
beq = []; %等式约束
nonlcon = []; %非线性约束
[x,fval] = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon,intcon,options);
%x就是帕托拉前沿
%%
figure
scatter3(fval(:,1),fval(:,2),fval(:,3))
xlabel('objective1')
ylabel('objective2')
zlabel('objective3')
%最后得到7个帕托拉前沿,进一步可以对7个解进行评价或者之类的,找到其中一个或者都可以用
我们也可以总结得到,只要导入工具箱保存的数据,对于任何多输入多输出的调用函数都能写成以下形式,只需要修改导入数据即可
function y_out_put=calcalate_mutiobj1(test_x_feature_label)
load('MT_19_Nov_2024_21_48_50.mat')
x_mu=G_out_data.x_mu_all;
x_sig=G_out_data.x_sig_all;
y_mu_all=G_out_data.y_mu_all; %展示了多输出的个数
y_sig_all=G_out_data.y_sig_all;
y_last_result=[];
for NUM_all=1:length(y_mu_all)
test_x_feature_label_norm = (test_x_feature_label - x_mu) ./ x_sig; % 训练数据标准化
Mdl_all=G_out_data.model_all;
Mdl=Mdl_all{1,NUM_all};
y_test_predict_norm=predict(Mdl,test_x_feature_label_norm);
,NUM_all)=y_test_predict_norm.*y_sig_all(NUM_all)+y_mu_all(NUM_all); :
end
y_out_put=y_last_result; %输出 %默认求最小
-y_out_put(2); %第二个目标求最大,其他目标求最小的情况 =
y_out_put=-y_out_put; %全部目标求最大的情况
end
clc;clear;close all;
%12个特征对于2个输出
%然后反推2个输出对应的最优特征
rng default % For reproducibility
fun = @calcalate_mutiobj1; %设置的函数
intcon = [8]; %第8个和第14个特征是整数
%14个特征的上限和下限
lb = [253.430 0.010 252.43 1.62 2.46 2.25 -2.3 1 -62.52 0.64 -107.15 902.78];
ub = [266.72 0.92 348.88 18.07 15.6 12.16 100.41 6 77.68 274.07 10.04 915.38 ];
options = optimoptions("gamultiobj","PlotFcn","gaplotpareto",...
"PopulationSize",20,'MaxGenerations',50); %对应的是种群数和迭代次数
nvars = length(lb);
A = [];
b = [];
Aeq = [];
beq = [];
nonlcon = [];
[x,fval] = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon,intcon,options);
%x就是帕托拉前沿
%%
figure
scatter(fval(:,1),-fval(:,2))
xlabel('objective1')
ylabel('objective2')
% zlabel('objective3')
%最后得到7个帕托拉前沿,进一步可以对7个解进行评价或者之类的,找到其中一个或者都可以用
最后也能得到相应的帕累托前沿解集合
获取方式
AUGUST WEATHER
AUGUST WEATHER
【数据源码获取】公众号后台回复【多目标优化】获取
【B站视频教程】(不要忘记一键三连~)
【多目标遗传优化算法反推最优特征组合|改进粒子群算法优化多输出随机森林】 https://www.bilibili.com/video/BV14DSFYkEh8/?share_source=copy_web&vd_source=c15f0efc7ec302ed5ca56d22c46dffc7
如果想要快速实现机器学习方法,强烈推荐我们的工具箱,一次购买永久使用免费更新,均价几十真的很划算,算法功能加倍,支持一键导出代码,已经有超多用户使用获奖、发论文
点击历史推文全面了解
上万人使用的机器学习工具箱是什么样子的?最新版工具箱功能定版!
评价、降维、聚类、回归、分类、单时序预测、多元时序预测、多输出多输出、回归概率预测、时序概率预测、都有多种优质方法,且都支持一键导出代码
评价工具箱pingjia
聚类降维工具箱DrCluster
分类回归概率预测工具箱RCpredict
单、多元时序/多输入多输出工具箱MTpredict
四个工具打包获取,一码通用只需要激活一次,所有工具箱都可以一键导出代码
可以观看视频的1~26节
【获取方式】扫码获取或者点击链接
https://mbd.pub/o/bread/mbd-ZJabmJ9q
更多开源资料可以看公众号主栏引导
END
长按二维码识别关注
更多竞赛、保研、科研学习资料领取或其他需求咨询可以联系我们~
CAMPING
点个在看你最好看