Я строю модель нейронной сети, чтобы предсказать состав двух потоков вместе с режимом нагрева и охлаждения дистилляционной колонны. Поток состоит из трех компонентов, и состав каждого потока должен быть равен 1. Мне нужно ограничить 2 раза три выхода из общего количества 8 выходов сети, чтобы суммировать до одного, и я не знаю, как для решения этой проблемы. Итак, в основном это: X1 + X2 + X3 = 1 X4 + X5 + X6 = 1 X7, X8 (без ограничений) Я использую набор инструментов глубокого обучения в MATLAB для создания сети со следующим кодом:
function [y1] = myNeuralNetworkFunction1(x1)
%MYNEURALNETWORKFUNCTION neural network simulation function.
%
% Auto-generated by MATLAB, 05-Mar-2020 11:35:58.
%
% [y1] = myNeuralNetworkFunction(x1) takes these arguments:
% x = Qx3 matrix, input #1
% and returns:
% y = Qx8 matrix, output #1
% where Q is the number of samples.
%#ok<*RPMT0>
% ===== NEURAL NETWORK CONSTANTS =====
% Input 1
x1_step1.xoffset = [-1.7222;-1.7347;-1.6651];
x1_step1.gain = [0.577700751010976;0.577500577500578;0.602700096432015];
x1_step1.ymin = -1;
% Layer 1
b1 = [3.2193805169308165048;-3.1521070725654474209;1.4183718452522160458;-1.201365041181111204;-0.13841696360759483952;-0.47325310428563149845;1.7091741122973846956;-2.3675804824234365498;2.3945216339963106833;-0.66295997171180387486];
IW1_1 = [-0.026373723031937124778 -2.1461268356894240839 1.9751907722469612683;1.3665693492364714423 2.0983570475022856883 0.057576568238725096827;-1.44008718264181379 -0.026106530040105449531 -0.12305514019633981282;0.55129087366294782235 -0.73702985975404500252 0.0049323490248752016596;1.5285423537068696387 -0.78124772653557750246 -2.7719016664548088436;-1.7945232626696923095 -0.41956775348360181299 -1.4847661221510335405;0.91580716781955051609 -0.80162520344185461685 0.025046724859335765118;-3.0806324287775486148 0.8719252937813536386 -2.3880271799487466922;0.83033138922338578514 -2.7949381471971910251 1.956384693845262257;0.42167593919166429517 0.47444401721583984166 0.0051542200341957167264];
% Layer 2
b2 = [0.063873465121436601155;-0.39753345554055530275;-0.28282724753155963349;-0.31825528626153459788;0.29678474235056007124;0.67102103642291288654;0.088469087416151115377;-0.12402424568900638491];
LW2_1 = [-0.4028336380758433255 -0.1998422106926376618 0.099680741326868785301 0.30340030686100910584 0.10436103604329435846 -0.3345312798737823945 0.034999760990865311228 0.15119401956549657906 0.37204163041185606131 -0.56874275195825441109;0.62336619715639673966 0.24587443436403624841 -0.099479369759927591121 -0.46246479970959414318 0.16425488538361010527 0.19102378744278325495 0.26543035995435126928 -0.16983805301538520971 -0.13599358025280527951 0.72672828915193088406;-0.59818112272829149223 -0.087741383540740652824 -0.22669848456368449363 0.27776120836861212249 -0.65876700220873085634 0.37810636308059419886 0.28282142285834671602 -0.34835733557531162186 -0.65265379998239181347 -0.063052234406715451653;0.55694986799798817945 0.25242195698073205401 -0.1652360332008339372 0.68843063784627689383 -0.027936712964382649088 0.015318422855289417356 -0.52628122548334022035 0.069142252581583338311 0.0080536995214322334297 -0.33624714872186867165;-0.71448438987686868629 -0.11168841133832949075 -0.22639825448008460418 0.087380830035555009938 0.039994551304923811608 0.4139665713721763507 0.22021270171994297704 0.20851298706418464057 0.92011282172575548088 0.08872569067892005501;-0.46841168408488292885 0.46257234721550644085 0.20218417402640195824 -0.58344648990861769366 -0.059549911841464200912 -0.038580200792704806567 0.1160601730205628318 -0.053667421202685659798 0.081096616721984968179 0.72793368660511215129;0.0097469132638518616446 -0.19661971274681333544 -0.084074229166449354622 0.42346282467267792882 0.0018635349227828403983 -0.0032837650791159630342 -0.35231190298109532621 -0.0032544860121109663205 0.000413892857459031364 -1.592626607132751726;-0.0057802300738059265647 0.17431506428238596751 0.072542913517266160994 -0.44492621624979905581 -0.00083620931843919621158 0.0024571450096706705032 0.35731134656202739874 0.002876347420997196324 -0.0022802878687125448069 1.5863018860882791561];
% Output 1
y1_step1.ymin = -1;
y1_step1.gain = [4.03877221324717;5.34518053400705;10.3114044132836;4.02584593133652;3.34446885386457;2.50548073911682;1.55369709214713e-06;1.54568464169098e-06];
y1_step1.xoffset = [0.5048;1.16e-06;4.81e-14;5.68e-11;7.72e-06;0.20174;-1290000;56075];
% ===== SIMULATION ========
% Dimensions
Q = 1; % samples
% Input 1
x1 = x1';
xp1 = mapminmax_apply(x1,x1_step1);
% Layer 1
a1 = tansig_apply(repmat(b1,1,Q) + IW1_1*xp1);
% Layer 2
a2 = repmat(b2,1,Q) + LW2_1*a1;
% Output 1
y1 = mapminmax_reverse(a2,y1_step1);
y1 = y1';
end
% ===== MODULE FUNCTIONS ========
% Map Minimum and Maximum Input Processing Function
function y = mapminmax_apply(x,settings)
y = bsxfun(@minus,x,settings.xoffset);
y = bsxfun(@times,y,settings.gain);
y = bsxfun(@plus,y,settings.ymin);
end
% Sigmoid Symmetric Transfer Function
function a = tansig_apply(n,~)
a = 2 ./ (1 + exp(-2*n)) - 1;
end
% Map Minimum and Maximum Output Reverse-Processing Function
function x = mapminmax_reverse(y,settings)
x = bsxfun(@minus,y,settings.ymin);
x = bsxfun(@rdivide,x,settings.gain);
x = bsxfun(@plus,x,settings.xoffset);
end