Uploaded by Инсаф Миндубаев

МЕТОД ПОИСКА

advertisement
Министерство образования и науки Российской Федерации
Нижнекамский химико-технологический институт (филиал)
федерального государственного бюджетного образовательного учреждения
высшего образования
«Казанский национальный исследовательский технологический
университет»
Кафедра автоматизации технологических процессов и производств
Дисциплина «Теория принятия решений»
Отчет
по лабораторной работе №3
ОПТИМИЗАЦИЯ РЕАКТОРА ИДЕАЛЬНОГО СМЕШЕНИЯ
МЕТОДОМ СЛУЧАЙНОГО НАПРАВЛЕНИЯ С ОБРАТНЫМ ШАГОМ
Вариант №10
Выполнил студент группы
3602: Миндубаев Инсаф
Проверил: Галеев Э. Р.
Нижнекамск, 2018
Постановка задачи оптимизации реактора идеального смешения
Рассмотрим задачу минимизации себестоимости продукта реакции в реакторе
идеального смешения.
Для реакции первого порядка найти оптимальные условия, минимизирующие
себестоимость получаемого продукта Р из исходного продукта А, определяемую с
учетом затрат на сырье и амортизацию реактора.
Скорости образования компонентов А и Р имеют вид:
Где k1(T), k2(T) – константы скорости реакций , связаны с температурой
реакции уравнением Аррениуса
Критерий оптимальности, минимальное значение которого определяется, в
данном случае имеет вид:
Где х(0)А – концентрация сырья в реакционной смеси, подаваемой в реактор;
хр – концентрация продукта на выходе реактора; SA – стоимость исходного сырья;
SV – единицы объема реактора, исчисляемая с учетом его амортизации; V – объем
реактора; v – скорость потока сырья, поступающего в зону идеального смешения;
k1∞, k2∞ - предэкспоненциальные множители ; Rg – универсальная газовая
постоянная; Т – температура в реакционной зоне; E1, E2 – энергия активации
компонентов.
Стационарный режим характеризуется системой уравнений:
Решая которую можно найти
Где х(0)Р – концентрация продукта реакции на входе реактора.
В частном случае, когда продукт реакции Р отсутствует в исходной смеси,
получим выражение для концентрации продукта на выходе реактора:
Подставив это соотношение в выражение для критерия оптимальности,
получим зависимость
Минимизация этого выражения производится выбором оптимальных
значений температуры в реакции Т и времени пребывания реагентов в реакторе τ.
Задача: для реакции первого порядка найти оптимальные условия,
минимизирующие себестоимость получаемого продукта P из исходного продукта
A, определяемую с учетом затрат на сырье и амортизацию реактора.
Методы случайного поиска
Основная идея методов случайного поиска заключается в том. чтобы
перебором случайных совокупностей значений независимых переменных найти
оптимум целевой функции или направление движения к нему. Общим для всех
методов случайного поиска является применение случайных чисел в процессе
поиска. Введем понятие случайного вектора а = (а1,а2,...,аn), определенного в nмерном пространстве. Относительно вектора а предположим, что он с равной
вероятностью может принимать любое направление в n-мерном пространстве п
имеет длину равную 1. Такой вектор может быть получен из последовательности
случайных чисел Bj (j = 1,2,...,n). равномерно распределенных на числовом
интервале.
Для нахождения случайного вектора а с помощью последовательности
случайных чисел Bj, выразим компоненты случайного вектора а соотношениями:
При таком способе определения случайного вектора о. его длина будет равна
1. т.к. очевидно равенство:
Таким образом, вектор a характеризует случайное направление в n-мерном
пространстве.
Метод случайных направлений
Основная идея метода заключается в том. что из точки n- мерного
пространства, для которой значение R ( X ( K ) ) функции цели уже рассчитано,
производится шаг в случайном направлении. определяемом случайным вектором
a(k).
x(k+1)=x(k)+ha(k), в которой вычисляется значение функции цели.
Если при выполнении случайного шага ha(к), приводящего в точку x(k+1),
получается меньшее значение функции цели, то он считается удовлетворительным
(удачным) и новое значение R(x(k+1)) запоминается совместно с координатами
точки x(k+1).
Затем делается новый шаг ha(к+1) в случайном направлении и т.д.
Если же случайный шаг ha(k) оказывается неудачным, то
производится выборка следующего случайного вектора а и из точки x(k) снова
выполняется шаг.
Пробные шаги из точки x(k) делаются до тех пор. пока не будет найдена
точка x(k+1), в которой функция цели имеет меньшее значение, после чего пробные
шаги выполняются уже из точки x(k+1).
Поиск заканчивается, если после выполнения серии из s шагов меньшего
значения функции цели найти не удается. Для практических расчетов число шагов
в серии часто применяется равным размерности решаемой задачи n.
Эффективность поиска может несколько возрасти при применении шага
переменной величины h(k) . В данном случае после выполнения серии из s
неудачных шагов поиск не заканчивается. а уменьшается только величина шага
h ( k ) , вслед за чем отсчет шагов в серии возобновляется. Критерием окончания поиска служит минимальный размер шага hmin, которым и задается точность
определения оптимума.
Метод случайных направлений с обратным шагом
Этот метод случайного поиска по существу представляет собой улучшение
алгоритма, рассмотренного выше. Отличительной особенностью этого метода
является то. что при неудачном шаге h(k) а(k) из точки x(k) сразу производится шаг в
обратном направлении -h(k) а(k).
При достаточном удалении от оптимума такая стратегия поиска оказывается
весьма эффективной. Если и обратный шаг оказывается неудачным, то можно
сделать новый случайный шаг из точки x(k) или, что более целесообразно, перейти к
поиску с уменьшенным размером шага.
Получение случайных чисел из последовательности
иррациональных чисел
Этот способ основан на свойстве иррациональных чисел образовывать
неупорядоченную последовательность цифр дробной части при вычислении
иррационального числа с достаточно высокой степенью точности.
В наиболее простой форме данный способ реализуется при расчете дробной
части произведения иррационального числа z на последовательность натуральных
чисел. При этом алгоритм может быть записан в следующем виде: Bj(k) = {kZj}; j =
1,2,...,n; k = 1,2,3,...
Фигурные скобки в выражении означают, что из произведения kzj берется
только дробная часть, которая должна вычисляться с необходимой степенью
точности, характеризующей разрядность находимых псевдослучайных чисел.
Алгоритм метода случайных направлений
с обратным шагом
(0)
R
Определяется значение критерия оптимальности в начальной точке поиска
= R(X(0)).
Производится выборка случайных чисел на основе последовательности
иррациональных чисел.
B1(k) = {kz1}; B2(k) = {kz2} ; k = 1,2,3,...
Находится значение целевой функции в следующей точке поиска x(1)=x(0)+h(0)
a(0), где
Сравниваются значения целевой функции в точке x(1) и начальной точке x(0).
Если R(1)<R(0), то выполненный шаг удачный и новое значение R(1) запоминается
совместно с координатами точки x(1).
Затем производится новый шаг в случайном направлении из точки x(1) :
определяется B (2). считается a(1), вычисляются x(2) и R(2) и т.д. При этом каждое
новое удачное значение R (k) запоминается совместно с координатами точки х (k).
Если же R(k) >R(k+1), то производится шаг в обратном направлении -h(k+1)a(k+1).
При удачном шаге также запоминается значение целевой функции и координаты
точки. Если обратный шаг неудачный, то можно либо сделать шаг в новом
направлении из предыдущей точки х(k+1), либо перейти к поиску с уменьшенным
размером шага.
hj
Критерием окончания поиска является минимальная величина рабочего шага
, задаваемая по каждой переменной.
min
Для получения псевдослучайных последовательностей из иррациональных
чисел по каждой переменной необходимо задать иррациональные числа z1, z2,..., zn ,
например.
и рассчитать дробную часть из произведения
program M3;
var
k: integer;
E: array [1..2] of integer;
TT: array [1..4] of real;
R, tau, T: array [0..2] of double;
z, alpha, betta, h, kINF, kT: array [1..2] of double;
CC: array [1..3] of boolean;
procedure Shag;
var
choise: char;
begin
Writeln('У вас также есть возможность указать шаг'#10'В данный момент он
равен h1= ', h[1]:0:2, 'h2 =':5, h[2]:0:3);
Writeln('Желаете ввести свои значения? {Необходимо ввести в поле "Y" или
"N"}');
Readln(choise);
if (choise = 'N') or (choise = 'n') or (choise = 'т') then
CC[3] := true;
if (choise = 'Y') or (choise = 'y') or (choise = 'н') then
CC[3] := false;
if CC[3] then
begin
Writeln('Как пожелаете...');
writeln;
h[1] := h[1];
h[2] := h[2];
end
else begin
Writeln('Рад, что вы решились! Введите значение h1 и h2'#10'{Желательно в
интервале 0.1<=h1<=1 и 0.01<=h2<=0.1}');
Readln(h[1], h[2]);
end;
end;
procedure Input;
begin
k := 0;
CC[1] := true;
CC[2] := true;
z[1] := sqrt(5);
z[2] := sqrt(7);
kINF[1] := 853.13;
kINF[2] := 735169.71;
Writeln('Значения E1Rg и E2Rg = ');
Readln(E[1], E[2]);
Writeln('Введите диапазон [Tmin Tmax] и [t-min t-max]'#10'{Указывать по
порядку, скобки ставить не нужно}');
Readln(TT[1], TT[2], TT[3], TT[4]);
h[1] := Random(0.1, 1);
h[2] := Random(0.01, 0.1);
Shag;
T[0] := Random(TT[1], TT[2]);//350, 390
tau[0] := Random(TT[3], TT[4]);//0.1, 0.8
Writeln('T rand = ', T[0]:0:0, 't rand = ':18, tau[0]:0:2);
Writeln;
Writeln('h1 = ', h[1]:0:2, 'h2 = ':17, h[2]:0:3);
end;
procedure Solution;
begin
Input;
kT[1] := kINF[1] * exp(-E[1] / T[0]);
kT[2] := kINF[2] * exp(-E[2] / T[0]);
R[0] := ((1 + tau[0] * (kT[1] + kT[2])) / kT[1]) * ((100 / tau[0]) + 200 /
1);
repeat
if CC[1] = true then
begin
k := k + 1;
betta[1] := frac(k * z[1]);
betta[2] := frac(k * z[2]);
alpha[1] := betta[1] / (sqrt(sqr(betta[1]) + sqr(betta[2])));
alpha[2] := betta[2] / (sqrt(sqr(betta[1]) + sqr(betta[2])));
end;
if CC[2] = true then
begin
T[1] := T[0] + h[1] * alpha[1];
tau[1] := tau[0] + h[2] * alpha[2];
kT[1] := kINF[1] * exp(-E[1] / T[1]);
kT[2] := kINF[2] * exp(-E[2] / T[1]);
R[1] := ((1 + tau[1] * (kT[1] + kT[2])) / kT[1]) * ((100 / tau[1]) +
200 / 1);
end;
if R[1] < R[0] then
begin
T[0] := T[1];
tau[0] := tau[1];
R[0] := R[1];
CC[1] := true;
CC[2] := true;
end
else begin
T[2] := T[0] - h[1] * alpha[1];
tau[2] := tau[0] - h[2] * alpha[2];
kT[1] := kINF[1] * exp(-E[1] / T[2]);
kT[2] := kINF[2] * exp(-E[2] / T[2]);
R[2] := ((1 + tau[2] * (kT[1] + kT[2])) / kT[1]) * ((100 / tau[2]) +
200 / 1);
if R[2] < R[0] then
begin
R[0] := R[2];
T[0] := T[2];
tau[0] := tau[2];
CC[1] := true;
CC[2] := true;
end
else begin
h[1] := h[1] / 2;
h[2] := h[2] / 2;
end;
end;
//Writeln('Rmin = ', R[0]:0:5, 'T1 = ':10, T[0]:0:5, 't1 = ':10,
tau[0]:0:5);
until (h[1] <= 0.1) and (h[2] <= 0.001);
Writeln;
Writeln('Rmin = ', R[0]:0:5, 'T1 = ':10, T[0]:0:5, 't1 = ':10, tau[0]:0:5);
end;
begin
Solution;
readln;
end.
Заключение: Функция принимает минимальное значение 𝑅𝑚𝑖𝑛 =
289.24874 при значениях температуры T= 389.06373 и времени τ= 0.24487.
Следовательно, они являются оптимальными значениями температуры в
реакторе и времени пребывания реагентов в реакторе.
Download