Проект исследования с использованием выборки параметров (код)

Этот пример показов, как выборить и исследовать проект пространство. Вы исследуете проект постоянно перемешиваемого Бака реактора, чтобы минимизировать изменения концентрации продукта и производственные затраты. Проект включает неопределенность сырья.

Вы исследуете проект CSTR, характеризуя расчётные параметры используя распределения вероятностей. Вы используете распределения, чтобы сгенерировать случайные выборки в пространстве проектирования и выполнить оценку проекта Монте-Карло в этих точках выборки. Затем вы создаете графики, чтобы визуализировать проектное пространство и выбрать оптимальный проект. Затем можно использовать лучший проект в качестве начального предположения для оптимизации проекта.

Можно также использовать выборочное проектное пространство и оценочный выход Монте-Карло, чтобы проанализировать влияние расчётных параметров на проект, см., Идентифицируйте ключевые параметры для оценки (код)

Бак с непрерывным перемешиванием (CSTR)

Баки с непрерывным перемешиванием (CSTR) распространены в технологической промышленности. Модель Simulink, sdoCSTR, моделирует сахарный диабат (то есть неадиабатический) бак реактор, описанный в [1]. CSTR принимается идеально смешанным, с одной экзотермической и необратимой реакцией первого порядка,., $A\rightarrow B$$A$реагент, превращается в $B$продукт.

В этом примере вы используете следующую модель CSTR с двумя состояниями, которая использует основные принципы учета и энергосбережения:

$$\frac{d C_A}{dt} = \frac{F}{A * h}(C_{feed} - C_A)-r*C_A$$

$$\frac{d T}{dt} = \frac{F}{A * h}(T_{feed} - T) - \frac{H}{c_p \rho} r
-\frac{U}{c_p*\rho*h}(T - T_{cool})$$

$$r = k_0*e^{\frac{-E}{R*T}}$$

  • $C_A$, и$C_{feed}$ - Концентрации A в CSTR и в сырье [кгмоль/м ^ 3]

  • $T$, $T_{feed}$и -$T_{cool}$ температуры CSTR, сырья и хладагента [K]

  • $F$ и$\rho$ - Объемная скорость потока жидкости [м ^ 3/ч] и плотность материала в CSTR [1/м ^ 3]

  • $h$ и$A$ - высота [м] и площадь нагретого поперечного сечения [м ^ 2] CSTR.

  • $k_0$ - Предварительный экспоненциальный нетепловой коэффициент для реакции$A\rightarrow B$ [1/ч]

  • $E$ и$H$ - Энергия активации и тепло реакции для [$A\rightarrow B$ккал/кгмоль]

  • $R$ - газовая константа Больцмана [ккал/( кгмоль * К)]

  • $c_p$ и$U$ - Теплоемкость [ккал/К] и коэффициенты теплопередачи [ккал/( м ^ 2 * К * ч)]

Откройте модель Simulink.

open_system('sdoCSTR');

Проблема проекта CSTR

Примите, что CSTR является цилиндрическим, с хладагентом, приложенным к основе цилиндра. Настройка площади поперечного сечения CSTR $A$и высоты CSTR $h$для достижения следующих целей проекта:

  • Минимизируйте изменение остаточной концентрации,. $C_A$Изменения остаточной концентрации отрицательно влияют на качество продукта CSTR. Минимизация изменений также улучшает прибыль CSTR.

  • Минимизируйте среднюю температуру теплоносителя. $T_{cool}$Нагревание или охлаждение охладителя рубашки является дорогим. Минимизация средней температуры теплоносителя улучшает прибыль CSTR.

Конструкция должна допускать изменения качества концентрации сырья и $C_{feed}$температуры сырья. $T_{feed}$В CSTR подается сырье от различных поставщиков. Качество корма отличается от поставщика к поставщику, а также изменяется в пределах каждой партии поставки.

Задайте конструктивные переменные

Выберите следующие параметры модели как конструктивные переменные:

  • Площадь поперечного сечения цилиндра $A$

  • Высота цилиндра $h$

p = sdo.getParameterFromModel('sdoCSTR',{'A','h'});

Ограничьте площадь поперечного сечения областью значений [0,2 2] м ^ 2.

p(1).Minimum = 0.2;
p(1).Maximum = 2;

Ограничьте высоту областью значений [0,5 3] м.

p(2).Minimum = 0.5;
p(2).Maximum = 3;

Образец пространства проекта

Создайте пространство параметров для конструктивных переменных. Пространство параметров характеризует допустимые значения параметров и комбинации значений параметров.

pSpace = sdo.ParameterSpace(p);

Пространство параметров использует равномерные распределения по умолчанию для конструктивных переменных. Нижняя и верхняя границы распределения заданы как минимальное и максимальное значение расчетной переменной соответственно.

Используйте sdo.sample функция для генерации выборок из пространства параметров. Вы используете выборки, чтобы вычислить модель и исследовать пространство проекта.

rng default; % For reproducibility
pSmpl = sdo.sample(pSpace,30);

Используйте sdo.scatterPlot команда для визуализации дискретизированного пространства параметров. График поля точек показывает распределения параметров на диагональных подграфиках и парные комбинации параметров на отключенных диагональных подграфиках.

figure, sdo.scatterPlot(pSmpl)

Задайте неопределенные переменные

Выберите концентрацию сырья и температуру сырья как неопределенные переменные. Вы оцениваете проект, используя различные значения температуры и концентрации сырья.

pUnc = sdo.getParameterFromModel('sdoCSTR',{'FeedCon0','FeedTemp0'});

Создайте пространство параметров для неопределенных переменных. Используйте нормальные распределения для обеих переменных. Задайте среднее значение как текущее значение параметров. Укажите отклонение 5% от средней концентрации сырья и 1% от средней температуры.

uSpace = sdo.ParameterSpace(pUnc);
uSpace = setDistribution(uSpace,'FeedCon0',makedist('normal',pUnc(1).Value,0.05*pUnc(1).Value));
uSpace = setDistribution(uSpace,'FeedTemp0',makedist('normal',pUnc(2).Value,0.01*pUnc(2).Value));

Концентрация сырья обратно коррелирует с температурой сырья. Добавьте эту информацию в пространство параметров.

uSpace.RankCorrelation = [1 -0.6; -0.6 1];

Матрица ранговой корреляции имеет строку и столбец для каждого параметра с записью (i, j), задающей корреляцию между параметрами i и j.

Дискретизируйте пространство параметров. График поля точек показывает корреляцию между концентрацией и температурой.

uSmpl = sdo.sample(uSpace,60);
sdo.scatterPlot(uSmpl)

В идеале вы хотите вычислить проект для каждой комбинации точек в проекте и неопределенных пространств, что подразумевает 30 * 60 = 1800 симуляции. Каждая симуляция занимает около 0,5 сек. Вы можете использовать параллельные вычисления, чтобы ускорить оценку. В этом примере вы вместо этого используете только выборки, которые имеют максимальные & минимальные значения концентрации и температуры, сокращая время оценки примерно до 1 минут.

[~,iminC] = min(uSmpl.FeedCon0);
[~,imaxC] = max(uSmpl.FeedCon0);
[~,iminT] = min(uSmpl.FeedTemp0);
[~,imaxT] = max(uSmpl.FeedTemp0);
uSmpl = uSmpl(unique([iminC,imaxC,iminT,imaxT]) ,:)
uSmpl =

  4x2 table

    FeedCon0    FeedTemp0
    ________    _________

     9.4555      303.58  
     11.175      288.13  
     11.293      290.73  
     8.9308      294.16  

Создайте функцию оценки

Создайте функцию, которая оценивает проект для заданной точки выборки в пространстве проектирования. Проект оценивается на том, насколько хорошо он минимизирует изменение остаточной концентрации и средней температуры хладагента.

Задайте требования проект

Оценка точки в пространстве проекта требует регистрации сигналов модели. Регистрируемые сигналы используются для оценки требований к проекту.

Регистрируйте следующие сигналы:

  • Концентрация CSTR, доступная во втором выходном порту sdoCSTR/CSTR блок

Conc = Simulink.SimulationData.SignalLoggingInfo;
Conc.BlockPath               = 'sdoCSTR/CSTR';
Conc.OutputPortIndex         = 2;
Conc.LoggingInfo.NameMode    = 1;
Conc.LoggingInfo.LoggingName = 'Concentration';
  • Температура хладагента, доступная на первом выходе sdoCSTR/Controller блок

Coolant = Simulink.SimulationData.SignalLoggingInfo;
Coolant.BlockPath               = 'sdoCSTR/Controller';
Coolant.OutputPortIndex         = 1;
Coolant.LoggingInfo.NameMode    = 1;
Coolant.LoggingInfo.LoggingName = 'Coolant';

Создайте и сконфигурируйте тестовый объект симуляции, чтобы записать необходимые сигналы.

simulator = sdo.SimulationTest('sdoCSTR');
simulator.LoggingInfo.Signals = [Conc,Coolant];

Функция оценки

Используйте анонимную функцию с одним аргументом, который вызывает sdoCSTR_design функция.

evalDesign = @(p) sdoCSTR_design(p,simulator,pUnc,uSmpl);

The evalDesign функция:

  • Имеет один входной параметр, который задает размерности CSTR

  • Возвращает целевое значение оптимизации

The sdoCSTR_design функция использует for цикл, который повторяет значения выборки, заданные для концентрации и температуры сырья. В цикле функция:

  • Моделирует модель с использованием текущих расчетных значений точки, концентрации сырья и температуры сырья

  • Вычисляет изменения остаточной концентрации и затраты на температуру хладагента

Чтобы просмотреть целевую функцию, введите edit sdoCSTR_design.

type sdoCSTR_design
function design = sdoCSTR_design(p,simulator,pUnc,smplUnc)
%SDOCSTR_DESIGN
%
% The sdoCSTR_design function is used to evaluate a CSTR  design.
%
% The |p| input argument is the vector of CSTR dimensions.
%
% The |simulator| input argument is a sdo.SimulinkTest object used to
% simulate the |sdoCSTR| model and log simulation signals.
%
% The |pUnc| input argument is a vector of parameters to specify the CSTR
% input feed concentration and feed temperature. The |smplUnc| argument is
% a table of different feed concentration and temperature values.
%
% The |design| return argument contains information about the design
% evaluation that can be used by the |sdo.optimize| function to optimize
% the design.
%
% see also sdo.optimize, sdoExampleCostFunction
%

% Copyright 2012-2013 The MathWorks, Inc.

%% Model Simulations and Evaluations
%
% For each value in |smplUnc|, configure and simulate the model. Use
% the logged concentration and coolant signals to compute the design cost.
%
costConc    = 0;
costCoolant = 0;
for ct=1:size(smplUnc,1)
    %Set the feed concentration and temperature values
    pUnc(1).Value = smplUnc{ct,1};
    pUnc(2).Value = smplUnc{ct,2};
    
    %Simulate model
    simulator.Parameters = [p; pUnc];
    simulator = sim(simulator);
    logName   = get_param('sdoCSTR','SignalLoggingName');
    simLog    = get(simulator.LoggedData,logName);
    
    %Compute Concentration cost based on the standard deviation of the
    %concentration from a nominal value.
    Sig = find(simLog,'Concentration');
    costConc = costConc+10*std(Sig.Values-2);
    
    %Compute coolant cost based on the mean deviation from room
    %temperature.
    Sig = find(simLog,'Coolant');
    costCoolant = costCoolant+abs(mean(Sig.Values - 294))/30;
end

%% Return Total Cost 
%
% Compute the total cost as a sum of the concentration and coolant costs.
%
design.F = costConc + costCoolant;

%%
% Add the individual cost terms to the return argument. These are not used
% by the optimizer, but included for convenience.
design.costConc    = costConc;               
design.costCoolant = costCoolant;
end

Оценить

Используйте sdo.evaluate команда для вычисления модели в выборочных проектах точках.

y = sdo.evaluate(evalDesign,p,pSmpl);
Model evaluated at 30 samples.

Просмотр результатов оценки с помощью графика поля точек. График разброса показывает парные графики для каждой конструктивной переменной (A, h) и стоимости проекта. График включает общую стоимость, F, а также затраты на теплоноситель и концентрацию, costCoolant и costConc соответственно.

sdo.scatterPlot(pSmpl,y);

График показывает, что большие площади поперечного сечения приводят к снижению общих затрат. Однако трудно сказать, как высота влияет на общую стоимость.

Создайте сетчатый график, показывающее общую стоимость как функцию A и h.

Ftotal = scatteredInterpolant(pSmpl.A,pSmpl.h,y.F);
xR = linspace(min(pSmpl.A),max(pSmpl.A),60);
yR = linspace(min(pSmpl.h),max(pSmpl.h),60);
[xx,yy] = meshgrid(xR,yR);
zz = Ftotal(xx,yy);
mesh(xx,yy,zz)
view(56,30)
title('Total cost as function of A and h')
zlabel('Ftotal')
xlabel(p(1).Name), ylabel(p(2).Name);

График показывает, что высокие значения A и h приводят к снижению затрат. Лучшая конструкция в дискретизированном пространстве соответствует проекту с самым низким значением стоимости.

[~,idx] = min(y.F);
pBest = [y(idx,:), pSmpl(idx,:)]
pBest =

  1x5 table

      F      costConc    costCoolant      A         h   
    _____    ________    ___________    ______    ______

    2.106     1.5505       0.55552      1.9271    2.3867

Уточнение Проекта пространства

Общая объемная поверхностная диаграмма затрат показывает, что недорогие проекты являются проектами с A в область значений [1,5 2] и h в область значений [2 3]. Измените распределения пространства параметров для A и h и повторно отобразите пространство проекта, чтобы фокусироваться на этой области.

pSpace = setDistribution(pSpace,'A',makedist('uniform',1.5,2));
pSpace = setDistribution(pSpace,'h',makedist('uniform',2,3));
pSmpl = sdo.sample(pSpace,30);

Добавьте pBest найденный ранее к новым выборкам так, что это часть рафинированного проектного пространства.

pSmpl = [pSmpl;pBest(:,4:5)];
sdo.scatterPlot(pSmpl)

Оцените использование уточненного Проекта пространства

y = sdo.evaluate(evalDesign,p,pSmpl);
Model evaluated at 31 samples.

Создать график сетки для этого раздела проекта пространства. Поверхность указывает, что лучшие проекты находятся вблизи A = 1.9, h = 2.1 точки.

Ftotal = scatteredInterpolant(pSmpl.A,pSmpl.h,y.F);
xR = linspace(min(pSmpl.A),max(pSmpl.A),60);
yR = linspace(min(pSmpl.h),max(pSmpl.h),60);
[xx,yy] = meshgrid(xR,yR);
zz = Ftotal(xx,yy);
mesh(xx,yy,zz)
view(56,30)
title('Total cost as function of A and h')
zlabel('Ftotal')
xlabel(p(1).Name), ylabel(p(2).Name);

Найдите лучший проект из нового проектного пространства и сравните с лучшей проектной точкой, найденной ранее.

[~,idx] = min(y.F);
pBest = [pBest; [y(idx,:), pSmpl(idx,:)]]
pBest =

  2x5 table

      F       costConc    costCoolant      A         h   
    ______    ________    ___________    ______    ______

     2.106     1.5505       0.55552      1.9271    2.3867
    1.9754     1.4824       0.49295      1.9695    2.1174

Лучший проект в рафинированном проектом пространстве лучше, чем проекты, найденные ранее. Это указывает на то, что в одной и той же области могут быть лучшие проекты, и требует дальнейшего уточнения проекта пространства. Также можно использовать лучшую расчетную точку как начальное предположение для оптимизации.

Похожие примеры

Чтобы узнать, как исследовать пространство проектирования CSTR с помощью Sensitivity Analyzer, смотрите Исследование проекта с использованием выборки параметров (GUI).

Чтобы узнать, как оптимизировать проект CSTR с помощью sdo.optimize команда, см. Проект Оптимизации с Неопределенными Переменными (Код).

Чтобы узнать, как анализировать влияние расчётных параметров на проект с помощью sdo.analyze команда, см. Идентификация ключевых параметров для оценки (код)

Ссылки

[1] Бекет, B.W. Динамика процесса: моделирование, анализ и симуляция. 1-я ред. Верхняя Седловая река, Нью-Джерси: Prentice Hall, 1998.

Закройте модель

bdclose('sdoCSTR')

Похожие темы