BP函数作为目标函数,采用线性规划求最小值以及对应的BP函数的输入值

34 篇文章 1 订阅

功能:7输入1输出(生成神经网络并保存当做目标函数,采用线性规划求最小值以及对应的BP函数的输入值)
算法:BP神经网络
电话:13483417110
输入:入炉温度、第一加热段温度、第二加热段温度、均热段温度、第一加热段停留时间、第二加热段停留时间、均热段停留时间
输出:出炉温度
数据来源:《唐钢1700加热炉模型开发与优化》

% 查看学习率参数 net.trainParam
% 查看网络权值 tg1700_net.IW{1,1}
% 默认状态下学习率Ir = 0.01
在这里插入图片描述

数据摘自《唐钢 0 1700 加热炉模型开发与优化》

生成神经网络代码如下

clear;close all;clc;
warning('off');
PT = xlsread('tg1700.xlsx','sheet1','B4:I153');
%网络输入训练数据 7维
P = PT(1:120,1:7)';
%网络输出训练数据 1维
T = PT(1:120,8)';
%网络输入测试数据 7维
P_test = PT(121:150,1:7)';
%网络输出测试数据 1维
T_test = PT(121:150,8)';

% ---------------------------------------- %
% 方法一:归一化[-1,1]
% [p1,minp,maxp,t1,mint,maxt]=premnmx(P,T);
% 方法二:归一化[0,1]
[p1,inputps]=mapminmax(P,0,1);
[t1,outputps]=mapminmax(T,0,1);
% ---------------------------------------- %

%创建网络
net=newff(minmax(p1),[13,1],{'tansig','purelin'},'traingd');
%设置训练次数
net.trainParam.epochs =10000;
%设置收敛误差
net.trainParam.goal=0.0000001;
%学习率为0.01
net.trainParam.Ir=0.01;
%训练网络
[net,tr]=train(net,p1,t1);


% ---------------------------------------- %
% 输入数据
% 将输入数据归一化
% 方法一:归一化[-1,1]
% [a,minp_,maxp_]=premnmx(a);% a=premnmx(a);
% 方法二:归一化[0,1]
a=mapminmax('apply',P_test,inputps);
% ---------------------------------------- %

%放入到网络输出数据
b=sim(net,a);
%将得到的数据反归一化得到预测数据

% ---------------------------------------- %
% 方法一:归一化[-1,1]
% T_predict=postmnmx(b,mint,maxt);
% 方法二:归一化[0,1]
T_predict=mapminmax('reverse',b,outputps);
% ---------------------------------------- %

% ---------------------------------------- %
save my_bp net;
% 方法一:归一化[-1,1]
% save my_mint mint;%方法一(1)
% save my_maxt maxt;%方法一(1)
% save('my_bp.mat','net','mint','maxt');%方法一(2)
% 方法二:归一化[0,1]
save my_inputps inputps;
save my_outputps outputps;
% ---------------------------------------- %

% figure(1)
% plot(T_test)
% hold on
% plot(T_predict)

% figure(2)
% plot(T_predict - T_test)

figure(1)
plot(T_test,'r--')
hold on;grid on
plot(T_predict,'b-')
xlabel('\fontsize{14}\fontname{楷体}\rm{测试点}\rm{ (Num)}');
ylabel('\fontsize{14}\fontname{楷体}\rm{钢坯出炉温度}\rm{ (^oC)}');
set(gca,'ytick',[980:20:1200]);
set(gca,'fontsize',14,'fontname','times new roman');
legend('\fontsize{14}\fontname{楷体}\rm{实际值}','\fontsize{14}\fontname{楷体}\rm{预测值}');
legend('boxoff');
title('\fontsize{14}\fontname{times new roman}\rm{BPNN}'); 

在这里插入图片描述
在这里插入图片描述
利用上述所保存的网络作为目标函数,采用线性规划求最大值

clc;clear all;close all;
dALL = xlsread('tg1700.xlsx','sheet1','B4:I153');

i = 1;
rwd = dALL(i,1);
jr1 = dALL(i,2);% x(1)
jr2 = dALL(i,3);% x(2)
jr  = dALL(i,4);% x(3)
jrs1= dALL(i,5);
jrs2= dALL(i,6);
jrs = dALL(i,7); 
Tcr = dALL(i,8);


% fmincon函数应用四种不同的算法
% 内点法(interior point)
% 序列二次规划算法(SQP)
% 有效集法(active set)
% 信赖域有效算法(trust region reflective)。
% 如果采用SQP算法可以设置 OPTIONS = optimoptions('fmincon','Algorithm','sqp')
% 再把OPTIONS赋给fmincon

% options = optimset('Algorithm','active-set');
% options = optimset('Algorithm','sqp');
% options = optimset('Algorithm','trust-region-reflective');
% options=optimset('Algorithm','interior-point','display','iter','MaxFunEvals',11000,'MaxIter',3000,'ToLX',0);
% while 1

% [x,fval,exitflag,output,lambda,grad,hessian]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)                                                                                     

% 输入参数:fun要求解的函数值;x0函数fun参数值的初始化;
% 参数值的线性不等式约束A,b
% 参数值的等式线性约束Aeq,beq
% 参数值的上界和下界lb,ub
% 非线性约束nonlcon

% 输出参数:X输出最优参数值
% Fval输出fun在X参数的值
% Exitflag输出fmincon额外条件值
options = optimset('Algorithm','sqp');
[X,FVAL,EXITFLAG] = fmincon(...
                            @(x)(obj_mCal(rwd,x(1),x(2),x(3),jrs1,jrs2,jrs,Tcr)),...% fun 要求解的函数值
                            [976 1160 1170],...% x0 函数fun参数值的初始化
                            [],...% A 参数值的线性不等式约束A,b
                            [],...% b 参数值的线性不等式约束A,b
                            [],...% Aeq 参数值的等式线性约束
                            [],...% beq 参数值的等式线性约束
                            [976 1160 1170],...% lb 参数值的上界和下界
                            [1159 1284 1290],...% ub 参数值的上界和下界
                            [],...% nonlcon 非线性约束
                            options) ;%options

sprintf('最小值: %.4f\n',FVAL)
sprintf('加热一段温度: %.4f |加热二段温度: %.4f |均热段温度: %.4f\n',X(1),X(2),X(3))
sprintf('加热一段误差: %.4f |加热二段误差: %.4f |均热段误差: %.4f\n',X(1)-jr1,X(2)-jr2,X(3)-jr)
% end
% 构建obj_mCal函数用来作为ga的目标函数
function err1700_err=obj_mCal(rwd,jr1,jr2,jr,jrs1,jrs2,jrs,Tcr)
warning('off');
% ---------------------------------------- %
load my_bp;
% 方法一:归一化[-1,1]
% load my_maxt;
% load my_mint;
% 方法二:归一化[ 0,1]
load my_inputps;
load my_outputps;
% ---------------------------------------- %

%输入数据
tg1700_out1=[rwd;jr1;jr2;jr;jrs1;jrs2;jrs];
% ---------------------------------------- %
%将输入数据归一化
% tg1700_out2=premnmx(tg1700_out1);% 方法一:归一化[-1,1]
tg1700_out2=mapminmax('apply',tg1700_out1,inputps);% 方法二:归一化[ 0,1]
% ---------------------------------------- %
%放入到网络输出数据
tg1700_out3=sim(net,tg1700_out2);
% ---------------------------------------- %
%将得到的数据反归一化得到预测数据
% tg1700_out4=postmnmx(tg1700_out3,mint,maxt);% 方法一:归一化[-1,1]
tg1700_out4=mapminmax('reverse',tg1700_out3,outputps);% 方法二:归一化[ 0,1]
% ---------------------------------------- %
% strC = '出炉温度预测值:';
% fprintf('%s %f\n',strC,tg1700_out);
err1700_err = tg1700_out4 - Tcr;
end

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨铮...

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值