Разработайте оптимизацию с неопределенными переменными (код)

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

Модель Постоянно реактора смесителя (CSTR)

Постоянно Реакторы Смесителя (CSTRs) распространены в перерабатывающей промышленности. Модель Simulink, sdoCSTR, моделирует покрытое кожухом диабатическое (т.е. неадиабатическая) реактор корпуса, описанный в [1]. CSTR принят, чтобы быть отлично смешанным с одной экзотермической и необратимой реакцией первого порядка., реагент, преобразован в, продукт.

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

  • , и - Концентрации в CSTR и в канале [kgmol/m^3]

  • , и - CSTR, канал и температуры хладагента [K]

  • и - Объемный расход [m^3/h] и плотность материала в CSTR [1/m^3]

  • и - Высота [m] и нагретая площадь поперечного сечения [m^2] CSTR.

  • - Предэкспоненциальный нетепловой фактор для [1/h] реакции

  • и - Энергия активации и тепло реакции для [kcal/kgmol]

  • - Газовая константа Больцманна [kcal / (kgmol * K)]

  • и - Теплоемкость [kcal/K] и коэффициенты теплопередачи [kcal / (m^2 * K * h)]

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

open_system('sdoCSTR');

Модель включает каскадный ПИД-регулятор в подсистему Controller. Контроллер регулирует реакторную температуру и реакторную остаточную концентрацию.

Проблема проектирования CSTR

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

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

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

Проект должен допускать изменения в качестве концентрации канала предоставления и питать температуру. CSTR питается каналом от различных поставщиков. Качество канала отличается от поставщика поставщику и также отличается в каждом пакете предоставления.

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

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

  • Цилиндрическая площадь поперечного сечения

  • Цилиндрическая высота

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

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

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

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

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

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

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

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 параметрами.

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

rng('default'); %For reproducibility
uSmpl = sdo.sample(uSpace,60);
sdo.scatterPlot(uSmpl)

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

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

Задайте конструктивные требования

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

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

  • Концентрация 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];

Создайте Функцию Цели/Ограничения

Создайте функцию, чтобы оценить проект CSTR. Эта функция вызвана в каждой итерации оптимизации.

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

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

Функция evalDesign:

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

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

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

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

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

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

Оцените первоначальный проект

Вызовите функцию evalDesign с начальными размерностями CSTR.

dInit = evalDesign(p)
dInit = 

  struct with fields:

              F: 11.3356
       costConc: 6.4390
    costCoolant: 4.8965

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

sdoCSTR_plotModelResponse(p,simulator,pUnc,uSmpl);

Графики функций sdoCSTR_plotModelResponse образцовый ответ. Чтобы просмотреть эту функцию, введите edit sdoCSTR_plotModelResponse.

Оптимизируйте проект

Передайте целевую функцию и начальные размерности CSTR к sdo.optimize.

pOpt = sdo.optimize(evalDesign,p)
 Optimization started 11-Jan-2019 03:37:21

                               max                     First-order 
 Iter F-count        f(x)   constraint    Step-size    optimality
    0      4      5.17535            0
    1      8      3.81522            0         2.01         7.83
    2     12      2.63696            0         0.57         3.01
    3     16      2.53152            0        0.159        0.252
    4     20      2.51758            0       0.0144        0.365
    5     24      2.49208            0        0.105        0.814
    6     29       2.4815            0       0.0506        0.248
    7     33      2.47929            0       0.0118       0.0315
    8     34      2.47929            0     0.000659       0.0183
Local minimum possible. Constraints satisfied.

fmincon stopped because the size of the current step is less than
the value of the step size tolerance and constraints are 
satisfied to within the value of the constraint tolerance.
 
pOpt(1,1) =
 
       Name: 'A'
      Value: 2
    Minimum: 1
    Maximum: 2
       Free: 1
      Scale: 0.5000
       Info: [1x1 struct]

 
pOpt(2,1) =
 
       Name: 'h'
      Value: 2.2441
    Minimum: 1
    Maximum: 3
       Free: 1
      Scale: 2
       Info: [1x1 struct]

 
2x1 param.Continuous
 

Оцените оптимизированный проект

Вызовите функцию evalDesign с оптимизированными размерностями CSTR.

dFinal = evalDesign(pOpt)
dFinal = 

  struct with fields:

              F: 2.4793
       costConc: 1.4506
    costCoolant: 1.0287

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

sdoCSTR_plotModelResponse(pOpt,simulator,pUnc,uSmpl);

Связанные примеры

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

Ссылки

[1] Bequette, Б.В. Просесс Динэмикс: Моделирование, Анализ и Симуляция. 1-й редактор Верхний Сэддл-Ривер, NJ: Prentice Hall, 1998.

% Close the model
bdclose('sdoCSTR')