Этот пример показов, как выборить и исследовать проект пространство. Вы исследуете проект постоянно перемешиваемого Бака реактора, чтобы минимизировать изменения концентрации продукта и производственные затраты. Проект включает неопределенность сырья.
Вы исследуете проект CSTR, характеризуя расчётные параметры используя распределения вероятностей. Вы используете распределения, чтобы сгенерировать случайные выборки в пространстве проектирования и выполнить оценку проекта Монте-Карло в этих точках выборки. Затем вы создаете графики, чтобы визуализировать проектное пространство и выбрать оптимальный проект. Затем можно использовать лучший проект в качестве начального предположения для оптимизации проекта.
Можно также использовать выборочное проектное пространство и оценочный выход Монте-Карло, чтобы проанализировать влияние расчётных параметров на проект, см., Идентифицируйте ключевые параметры для оценки (код)
Баки с непрерывным перемешиванием (CSTR) распространены в технологической промышленности. Модель Simulink, sdoCSTR
, моделирует сахарный диабат (то есть неадиабатический) бак реактор, описанный в [1]. CSTR принимается идеально смешанным, с одной экзотермической и необратимой реакцией первого порядка,., реагент, превращается в продукт.
В этом примере вы используете следующую модель CSTR с двумя состояниями, которая использует основные принципы учета и энергосбережения:
, и - Концентрации A в CSTR и в сырье [кгмоль/м ^ 3]
, и - температуры CSTR, сырья и хладагента [K]
и - Объемная скорость потока жидкости [м ^ 3/ч] и плотность материала в CSTR [1/м ^ 3]
и - высота [м] и площадь нагретого поперечного сечения [м ^ 2] CSTR.
- Предварительный экспоненциальный нетепловой коэффициент для реакции [1/ч]
и - Энергия активации и тепло реакции для [ккал/кгмоль]
- газовая константа Больцмана [ккал/( кгмоль * К)]
и - Теплоемкость [ккал/К] и коэффициенты теплопередачи [ккал/( м ^ 2 * К * ч)]
Откройте модель Simulink.
open_system('sdoCSTR');
Примите, что CSTR является цилиндрическим, с хладагентом, приложенным к основе цилиндра. Настройка площади поперечного сечения CSTR и высоты CSTR для достижения следующих целей проекта:
Минимизируйте изменение остаточной концентрации,. Изменения остаточной концентрации отрицательно влияют на качество продукта CSTR. Минимизация изменений также улучшает прибыль CSTR.
Минимизируйте среднюю температуру теплоносителя. Нагревание или охлаждение охладителя рубашки является дорогим. Минимизация средней температуры теплоносителя улучшает прибыль CSTR.
Конструкция должна допускать изменения качества концентрации сырья и температуры сырья. В CSTR подается сырье от различных поставщиков. Качество корма отличается от поставщика к поставщику, а также изменяется в пределах каждой партии поставки.
Выберите следующие параметры модели как конструктивные переменные:
Площадь поперечного сечения цилиндра
Высота цилиндра
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')