, сек, моль/м3, моль/м3, моль/м3
|
|
|
|
0,5
|
23,295236352
|
16,102776035
|
0,0083350760
|
1
|
23,286991918
|
16,094531601
|
0,0165795095
|
1,5
|
23,278837139
|
16,086376821
|
0,0247342892
|
2
|
23,270771035
|
16,078310718
|
0,0328003929
|
2,5
|
23,262792640
|
16,070332323
|
0,0407787878
|
3
|
23,254900997
|
16,062440680
|
0,0486704306
|
3,5
|
23,247095161
|
16,054634843
|
0,0564762672
|
4
|
23,239374195
|
16,046913877
|
0,0641972334
|
4,5
|
23,231737173
|
16,039276856
|
0,0718342545
|
5
|
23,224183182
|
16,031722865
|
0,0793882460
|
5,5
|
23,216711315
|
16,024250998
|
0,0868601130
|
6
|
23,209320677
|
16,016860360
|
0,0942507508
|
6,5
|
23,202010383
|
16,009550066
|
0,1015610450
|
7
|
23,194779557
|
16,002319239
|
0,1087918713
|
7,5
|
23,187627332
|
15,995167015
|
0,1159440961
|
8
|
23,180552852
|
15,988092535
|
0,1230185758
|
8,5
|
23,173555270
|
15,981094953
|
9
|
23,166633747
|
15,974173430
|
0,1369376806
|
9,5
|
23,159787455
|
15,967327138
|
0,1437839726
|
Анализ таблицы показывает, что функции выходной концентрации веществ в
реакторе синтез хлористого этилена монотонно убывают или возрастают, при этом
стремятся войти в статический режим. В силу чего, делаем вывод, что
математическая модель построена правильно.
3. ИССЛЕДОВАНИЕ МЕТОДА ОПТИМИЗАЦИИ
Метод возможных направлений Зойтендейка - это метод поиска минимума для
задач условной оптимизации.
Этот метод можно назвать особым расширением метода наискорейшего спуска
на задачи условной оптимизации, так как он призван «взаимодействовать» с
ограничениями при поиске минимума.
Кратко охарактеризуем работу алгоритма:
Пока
точка лежит внутри допустимой области метод спускается к минимуму методом
наискорейшего спуска, т. е. используя градиент . Если
точка наталкивается на одно из ограничений (рисунок 1.), то определяется
направлений вдоль ограничения или от ограничения поиском
минимума функции . Метод останавливается в двух случаях: когда или когда (такая
точка называется точкой Куна-Таккера).
Рисунок
3.1. - Метод возможных направлений Зойтендейка
Примечание.
В случае простейших ограничений вида процесс поиска точки Куна-Таккера сводится к
одномерной оптимизации функции вдоль границы любым методом.
Рис.
3.2 Структурная схема алгоритма оптимизации объекта
Рис. 3.3. Подпрограмма Одномерная оптимизация
Рис. 3. Подпрограмма математической модели
4. ПРОВЕРКА МЕТОДА ОПТИМИЗАЦИИ
Перед
началом работы с проектируемым объектом была произведена проверка метода
оптимизации на заранее известной тестовой функции - параболоиде при наложенных ограничениях . При этом был заранее известен минимум - это точка с
координатами .
Результаты
работы метода оптимизации представлены на рисунке 4.1.
Рисунок
4.1 - Результаты проверки метода оптимизации
Как
видно из рисунка 4.1, рассчитанный и заранее известный минимумы совпадают, что
позволяет сделать вывод о правильности работы метода возможных направлений
Зойтендейка, и можно переходить к оптимизации объекта.
5. ОПТИМИЗАЦИЯ ОБЪЕКТА
В ходе работы была произведена оптимизация объекта методом возможных
направлений Зойтендейка. В результате было найдена максимальная концентрация CС2H5Cl=15,844 моль/м3 (69,93 %)
при температуре T=373 K и объёме реактора V=10 м3. Процесс
оптимизации отражён на рисунке 5.1.
Рисунок 5.1 - Результаты оптимизации проектируемого объекта.
6. Проверка работоспособности
спроектированного объекта методом имитационного моделирования
Проверка работоспособности спроектированного объекта проводится методом
имитационного моделирования.
Метод имитационного моделирования заключается в постановке численного
эксперимента на математической модели с целью оценить различные стратегии,
обеспечивающие функционирование исследуемого объекта. Имитационная система
включает генератор случайных процессов, математические модели и блок анализа
результата.
Рисунок 6.1 - Схема системы имитационного моделирования.
Для имитационного моделирования был использован генератор случайных
процессов, построенный на генераторе случайных чисел, работающий методу
иррациональных чисел.
Способ получения псевдослучайных последовательностей из иррациональных
чисел основан на свойстве иррациональных чисел образовывать неупорядоченную
последовательность цифр дробной части при вычислении иррационального числа с
достаточно высокой степенью точности. Алгоритм может быть записан в виде
следующих формул:
0
= {л1} − 0.5; xi = {л2xi−1 }
− 0.5.
Здесь
скобки {} означают, что из числа, стоящего в скобках, берется только дробная
часть; л1, л2 - иррациональные числа (в данном случае
были взяты значения для л1 и л2 равные е и соответственно).
Полученный случайный процесс z(t) подается на вход математической модели динамики. Таким
образом, имитируется работа объекта в режиме реального времени.
При
имитационном моделировании входная координата СС2H4 - входная концентрация
этилена, а выходная координата С3 - концентрация хлористого этила, M0 = 23 К, .
Рисунок
6.2 - Случайный процесс и его характеристики.
Рисунок
6.3 - Результаты имитационного моделирования.
Поскольку
выходная динамическая характеристика концентрации хлористого этила практически
не реагирует на случайные изменения входной концентрации этилена, делаем вывод
о работоспособности спроектированного объекта с оптимальными параметрами.
Выводы
В результате проведения работы было подобранно значение температуры
реакционной среды T и объём реактора
V, при которых концентрация хлористого
этила будет максимальной.
Найденные параметры:
концентрация CС2H5Cl = 15,844 моль/м3 (69,93
%);
температура в реакторе T=373 K;
объём реактора V=10 м3.
Для оптимизации был использован метод возможных направлений Зойтендейка.
Полученный объект был проверен с помощью имитационного моделирования и
является работоспособным, т.к. колебания выходной величины незначительны.
реактор математический оптимизация зойтендейк
Литература
1. Построение математических моделей
химико-технологических объектов / Е.Г. Дудников, В.С. Балакирев, В.Н. Кривсунов,
А.М. Цирлин. - Л.: Химия, 1970. - 312 с.
2. Шеннон, Р. Имитационное моделирование систем -
искусство и наука / Р. Шеннон. - М.: Мир, 1975. -502 с.
. Закгейм, А.Ю. Введение в моделирование
химико-технологических процессов / А.Ю. Закгейм. - М.: Химия, 1982. - 288 с.
. Общая химическая технология: в 2 ч. / под ред И.П.
Мухленова. - М.: Высшая школа, 1984. - Ч. 2. - 264 с.
. Бояринов, А.И. Методы оптимизации в химической
технологии / А.И. Бояринов, В.В. Кафаров. - М.: Химия, 1975. - 500 с.
. Базара, М. Нелинейное программирование. Теория и
алгоритмы / М. Базара, К. Шэтти. - М.: Химия, 1988. - 583 с.
. Бусленко, В.Н. Автоматизация имитационного
моделирования сложных систем/В.Н. Бусленко. - М.: Наука. 1977. - 239 с.
Приложение
Распечатки программ оптимизации объекта по математической модели и
имитационного моделирования
unit Unit1;, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms,, ComCtrls, StdCtrls, ExtCtrls, Menus, TeeProcs, TeEngine,
Chart,, Buttons, Math, Grids, Unit2, Unit3, Series;= class(TForm):
TPageControl;: TTabSheet;: TTabSheet;: TMainMenu;: TMenuItem;: TTabSheet;:
TTabSheet;: TGroupBox;: TLabel;: TImage;: TImage;: TEdit;: TEdit;: TGroupBox;:
TGroupBox;: TGroupBox;: TChart;: TImage;: TImage;: TShape;: TImage;: TShape;: TShape;:
TShape;: TShape;: TImage;: TImage;: TEdit;: TImage;: TBitBtn;: TLabel;:
TButton;: TStringGrid;: TButton;: TLineSeries;: TLineSeries;: TLineSeries;:
TLineSeries;: TLineSeries;: TLineSeries;: TLineSeries;: TLineSeries;:
TLineSeries;: TLineSeries;: TLabel;: TLabel;: TGroupBox;: TGroupBox;:
TStringGrid;: TImage;: TImage;: TEdit;: TEdit;: TEdit;: TImage;: TBitBtn;:
TButton;: TGroupBox;: TLabel;: TLabel;: TImage;: TPaintBox;: TButton;: TChart;:
TLineSeries;: TChart;: TLineSeries;: TGroupBox;
Label7: TLabel;: TButton;: TButton;
Label8: TLabel;: TImage;: TImage;Button1Click(Sender:
TObject);Image2Click(Sender: TObject);Image3Click(Sender:
TObject);Image4Click(Sender: TObject);Image7Click(Sender:
TObject);BitBtn1Click(Sender: TObject);Button2Click(Sender: TObject);Button3Click(Sender:
TObject);FormShow(Sender: TObject);BitBtn2Click(Sender:
TObject);Button4Click(Sender: TObject);Button5Click(Sender:
TObject);Button6Click(Sender: TObject);
{ Private declarations }
{ Public declarations };= class(TThread)
{ Private declarations }Execute; override;;= class(TThread)
{ Private declarations }Execute; override;;: TForm1;:
array[1..4] of double;:Optimum;:array[1..2,1..1000] of double;_X1,
Eff_X2:double;:boolean=false;
//======================Задание
констант=====================
A1=1.2;=90;=8480;=29000;=8.31;_in=45*1.45/(100*0.028);_in=40*1.45/(100*0.036);
function fun(X1,X2:double;ind:word):double;func(X,A:array of
double;mode:integer):double;OneDimensOptimum(Xo:array of double;
d1,d2,stage:double; index:word; var X1,X2:double);Grad(X1,X2:double;index:word;var
f1,f2:double);MethodOfZoitenbek(Xo1,Xo2,stage:double;ind:word; var X1,
X2:double);Outp(X:array of
double;d1,d2:double;integ:integer);ClearMemory();CreateGraph();ExpMathModel(Z:array
of double);ClearMemory();i:integer;i:=1 to 1000
do[1,i]:=0;[2,i]:=0;.StringGrid1.Cells[0,i-1]:='';.StringGrid1.Cells[1,i-1]:='';.StringGrid1.Cells[2,i-1]:='';.StringGrid1.Cells[3,i-1]:='';.StringGrid2.Cells[0,i-1]:='';.StringGrid2.Cells[1,i-1]:='';.StringGrid2.Cells[2,i-1]:='';.StringGrid2.Cells[3,i-1]:='';;
//================Процедура демонстрации работы метода
оптимизации==============
procedure Demonstrate.Execute;
var i:integer;, buffY:integer;:=1;(not((MemoryXY[1,i]=0) and
(MemoryXY[2,i]=0)))do.PaintBox1.Visible:=false;.PaintBox1.Visible:=true;.PaintBox1.Canvas.Brush.Color:=clBlue;:=floor(187*(MemoryXY[1,i]-1));:=floor(69*(2-MemoryXY[2,i]));.PaintBox1.Canvas.Ellipse(buffX,buffY,buffX+10,buffY-10);(500);(i);;;Optimum.Execute;Xo1,Xo2,
X1,X2,stage:double;:double;(Form1.PageControl1.TabIndex=1)
then[1]:=1;[2]:=10;[3]:=373;[4]:=523;.StringGrid1.Cells[0,0]:='
V';.StringGrid1.Cells[1,0]:=' T';.StringGrid1.Cells[2,0]:='
d1';.StringGrid1.Cells[3,0]:='
d2';:=StrtoFloat(Form1.Edit1.Text);:=StrtoFloat(Form1.Edit2.Text);:=StrtoFloat(Form1.Edit3.Text);(Xo1,Xo2,stage,1,X1,
X2);:=100*fun(X1,X2,1)*0.064/1.45;.Label3.Caption:='Ìàêñèìàëüíàÿ êîíöåíòðàöèÿ
C2H5Cl='+FloattoStr(RoundTo(-fun(X1,X2,1),-3))+' ìîëü/ì3';.Label3.Caption:=Form1.Label3.Caption+'
('+FloattoStr(RoundTo(-buff,-2))+'%)';.Label2.Caption:='V='+InttoStr(Round(X1))+'
ì3 T='+InttoStr(Round(X2))+' Ê';:=true;_X1:=X1;_X2:=X2;else[1]:=1;[2]:=2;[3]:=1;[4]:=2;.StringGrid2.Cells[0,0]:='
V';.StringGrid2.Cells[1,0]:=' T';.StringGrid2.Cells[2,0]:='
d1';.StringGrid2.Cells[3,0]:=' d2';:=StrtoFloat(Form1.Edit4.Text);:=StrtoFloat(Form1.Edit5.Text);:=StrtoFloat(Form1.Edit6.Text);(Xo1,Xo2,stage,0,X1,
X2);.Label5.Caption:='Èçâåñòíûé ìèíèìóì
X=(1;1)';.Label6.Caption:='Íàéäåííûé ìèíèìóì
X*=('+FloattoStr(RoundTo(X1,-3))+';'+FloattoStr(RoundTo(X1,-3))+')';;
end;
//==============Нахождение 20 значений корреляционной
функции===================
function Min(az:double; Kz: array of double):double;
var mn:double;:integer;
begin:=0;i:=0 to length(Kz)-1
do:=mn+abs(Kz[i]-Kz[0]*exp(-i*az));;:=mn;;SearchRoot(Dz:double;Kz:array of
double):double;az,e,mn1,mn2,step:double;,n:integer;:=0;:=0.001;:=Min(az,Kz);:=az+step;:=Min(az,Kz);(mn2<mn1)do:=mn2;:=az+step;:=Min(az,Kz);;
SearchRoot:=az;
end;
//==============Нахождение параметров случайного процесса===================
procedure SearchChance(X,A:array of double;var Aout:array of
double);
var dA1,dA2:double;:double;
begin:=0.01;:=0.01;(abs(func(X,A,1)-0.093)>0.001)
do[1]:=A[1]+dA2;:=func(X,A,1);;(abs(func(X,A,2)-20)>0.1)
do[0]:=A[0]+dA1;;[0]:=A[0];[1]:=A[1];;
//==============Функция
построения случайного процесса===================func(X,A:array
of
double;mode:integer):double;ao,D0,Mo,L1,L2,Sum,M,Dx,Mz,Dz,az:double;,i,s,k:integer;:array[1..200]
of double;:array[1..21] of double;,buff:double;_rep:integer;
//Èíèöèàëèçàöèÿ_rep:=231;i:=1 to 21
do[i]:=0;;i:=1 to 200 do[i]:=0;;:=0.093;:=20;:=23;:=0;i:=0 to X_rep-1
do:=Dx+X[i]*X[i];;:=Dx/X_rep;:=30;:=A[0]*sqrt(D0/(Dx*ao*A[1]))/Ns;k:=1 to 200
do:=0;i:=k to k+Ns do:=buff+X[i-1]*exp(-A[1]*ao*(i-k));[k]:=C*buff+Mo;;;:=0;i:=1
to 200 do:=Mz+Z[i];;:=Mz/200;:=0;i:=1 to 200
do:=Dz+(Z[i]-Mz)*(Z[i]-Mz);;:=Dz/200;s:=1 to 20 doi:=1 to 200-s
do[s+1]:=Kz[s+1]+(Z[i]-Mz)*(Z[i+s]-Mz);;[s+1]:=Kz[s+1]/(200-s);;[1]:=Dz;:=SearchRoot(Dz,Kz);(mode=1)
then:=az;if(mode=2) then:=Dz;if(mode=3)
then:=Mo-Mz;;;Dop_fun(X1,X2:double;ind:boolean):double;tau,k1,k2,h:double;_out,C2_out,C3_out,C1,C2,C3:double;:integer;:=50*X1;:=A1*exp(-E1/(R*X2));:=A2*exp(-E2/(R*X2));:=0.01;_out:=C1_in;_out:=C2_in;_out:=0;:=C1_out;:=C2_out;:=C3_out;_out:=C1+h*((C1_in-C1)/tau-k1*C1*C2+k2*C3);_out:=C2+h*((C2_in-C2)/tau-k1*C1*C2+k2*C3);_out:=C3+h*(-C3/tau+k1*C1*C2-k2*C3);;((abs(C1_out-C1)<power(10,-12))and(abs(C2_out-C2)<power(10,-12))and(abs(C3_out-C3)<power(10,-12)));ind
then Dop_fun:=C1_outDop_fun:=C2_out;;
//==============Проверка работоспособности объекта===================ExpMathModel(Z:array of
double);tau,k1,k2,h:double;_out,C2_out,C3_out,C1,C2,C3:double;:integer;:=50*Eff_X1;:=A1*exp(-E1/(R*Eff_X2));
k2:=A2*exp(-E2/(R*Eff_X2));
h:=0.2;_out:=Z[0];_out:=C2_in;_out:=0;i:=0 to 199
do:=C1_out;:=C2_out;:=C3_out;_out:=C1+h*((Z[i]-C1)/tau-k1*C1*C2+k2*C3);_out:=C2+h*((C2_in-C2)/tau-k1*C1*C2+k2*C3);_out:=C3+h*(-C3/tau+k1*C1*C2-k2*C3);.Chart2.Series[0].AddXY(i-1,C3_out);;
end;
//==============Математическая модель объекта и функция
параболоида===================
function
fun(X1,X2:double;ind:word):double;tau,k1,k2,h:double;_out,C2_out,C3_out,C1,C2,C3:double;:integer;:file
of char;:string;(ind=0) then
fun:=X1*X1+X2*X2begin:=50*X1;:=A1*exp(-E1/(R*X2));:=A2*exp(-E2/(R*X2));:=0.01;_out:=C1_in;_out:=C2_in;_out:=0;:=C1_out;:=C2_out;:=C3_out;_out:=C1+h*((C1_in-C1)/tau-k1*C1*C2+k2*C3);_out:=C2+h*((C2_in-C2)/tau-k1*C1*C2+k2*C3);_out:=C3+h*(-C3/tau+k1*C1*C2-k2*C3);;((abs(C1_out-C1)<power(10,-8))and(abs(C2_out-C2)<power(10,-8))and(abs(C3_out-C3)<power(10,-8)));:=-C3;
end;
end;
//==============Построение графиков===================
procedure CreateGraph();t,v:integer;:double;v:=1 to 10
dot:=373 to 523
do:=-fun(v,t,1);.Chart1.Series[v-1].AddXY(t,buff);.Form2.Chart2.Series[v-1].AddXY(t,buff);.Form2.Chart3.Series[v-1].AddXY(t,Dop_fun(v,t,false));.Form2.Chart4.Series[v-1].AddXY(t,Dop_fun(v,t,true));;
end;
end;
//==============Одномерная оптимизация в методе
Зойтендейка===================
procedure OneDimensOptimum(Xo:array of double; d1,d2,stage:double;
index:word; var X1,X2:double);
var i1,i2,i11,i22:integer;
ind:word;_pl,
mn_mn:double;:=0;_pl:=fun(Xo[0],Xo[1],index);((d1<>0)and(d2<>0))then(true)do(i1);((Xo[0]+i1*stage*d1<=Rest[1])and(Xo[0]+i1*stage*d1>=Rest[2]))then((Xo[1]+i1*stage*d2<=Rest[3])and(Xo[1]+i1*stage*d2>=Rest[4]))then(fun(Xo[0]+i1*stage*d1,Xo[1]+i1*stage*d2,index)<mn_pl)then_pl:=fun(Xo[0]+i1*stage*d1,Xo[1]+i1*stage*d2,index);:=i1;;else
break;else
break;;:=0;_mn:=fun(Xo[0],Xo[1],index);(true)do(i2);((Xo[0]-i2*stage*d1<=Rest[1])and(Xo[0]-i2*stage*d1>=Rest[2]))then((Xo[1]-i2*stage*d2<=Rest[3])and(Xo[1]-i2*stage*d2>=Rest[4]))then(fun(Xo[0]-i2*stage*d1,Xo[1]-i2*stage*d2,index)<mn_mn)then_mn:=fun(Xo[0]-i2*stage*d1,Xo[1]-i2*stage*d2,index);:=i2;;else
break;else break;;(mn_mn>mn_pl)then:=Xo[0]+(i11-1)*stage*d1;:=Xo[1]+(i11-1)*stage*d2;else:=Xo[0]-(i22-1)*stage*d1;:=Xo[1]-(i22-1)*stage*d2;;else(d1=0)then
ind:=0ind:=1;:=0;_pl:=fun(Xo[0],Xo[1],index);(Xo[1-ind]+i1*stage*(ind*abs(d1)+(1-ind)*abs(d2))<=Rest[4-2*ind])do(i1);(ind=0)then(fun(Xo[0],Xo[1]+i1*stage*abs(d2),index)<mn_pl)then_pl:=fun(Xo[0],Xo[1]+i1*stage*abs(d2),index);:=i1;;else(fun(Xo[0]+i1*stage*abs(d1),Xo[1],index)<mn_pl)then_pl:=fun(Xo[0]+i1*stage*abs(d1),Xo[1],index);:=i1;;;;
i2:=0;_mn:=fun(Xo[0],Xo[1],index);
while(Xo[1-ind]-i2*stage*(ind*abs(d1)+(1-ind)*abs(d2))>=Rest[3-2*ind])do(i2);(ind=0)then(fun(Xo[0],Xo[1]-i2*stage*abs(d2),index)<mn_mn)then_mn:=fun(Xo[0],Xo[1]-i2*stage*abs(d2),index);:=i2;;else(fun(Xo[0]-i2*stage*abs(d1),Xo[1],index)<mn_mn)then_mn:=fun(Xo[0]-i2*stage*abs(d1),Xo[1],index);:=i2;;;;(mn_mn>mn_pl)then:=Xo[0]+(i11-1)*stage*abs(d1);:=Xo[1]+(i11-1)*stage*abs(d2);else:=Xo[0]-(i22-1)*stage*abs(d1);:=Xo[1]-(i22-1)*stage*abs(d2);;
end;
end;
//==============Вычисление антиградиента функции===================
procedure Grad(X1,X2:double;index:word;var
f1,f2:double);dx:double;:=0.0001;(index=0)
then:=-(fun(X1+dx,X2,index)-fun(X1,X2,index))/dx;:=-(fun(X1,X2+dx,index)-fun(X1,X2,index))/dx;else:=-power(10,3)*(fun(X1+dx,X2,index)-fun(X1,X2,index))/dx;:=-power(10,3)*(fun(X1,X2+dx,index)-fun(X1,X2,index))/dx;;;Outp(X:array
of double;d1,d2:double;integ:integer);(Form1.PageControl1.TabIndex=1)
then.StringGrid1.Cells[0,integ]:=FloattoStr(RoundTo(X[0],-3));.StringGrid1.Cells[1,integ]:=FloattoStr(RoundTo(X[1],-3));.StringGrid1.Cells[2,integ]:=FloattoStr(RoundTo(d1,-3));.StringGrid1.Cells[3,integ]:=FloattoStr(RoundTo(d2,-3));else.StringGrid2.Cells[0,integ]:=FloattoStr(RoundTo(X[0],-3));.StringGrid2.Cells[1,integ]:=FloattoStr(RoundTo(X[1],-3));.StringGrid2.Cells[2,integ]:=FloattoStr(RoundTo(d1,-3));.StringGrid2.Cells[3,integ]:=FloattoStr(RoundTo(d2,-3));[1,integ]:=X[0];[2,integ]:=X[1];;;
//==============Метод Зойтендейка===================
procedure MethodOfZoitenbek(Xo1,Xo2,stage:double;ind:word;
var X1, X2:double);eps,mn,d1,d2,d11,d22,F1, F2, h:double;
iter,iter_d,i,j,all_iter:integer;
Xk:array[1..2] of double;b,X2b:double;,
ind2:word;:boolean;:=0.01;:=false;[1]:=Xo1;[2]:=Xo2;:=0;_d:=0;_iter:=0;(Xk[1],Xk[2],ind,F1,F2);(Form1.PageControl1.TabIndex=1)
then.Form2.Memo1.Lines.Add('===============Íà÷àëî îïòèìèçàöèè===============');(abs(F1)+abs(F2)>=eps)do:=0;:=0;(iter);(Form1.PageControl1.TabIndex=1)
then.Form2.Memo1.Lines.Add('ÐÅÆÈÌ ÃÐÀÄÈÅÍÒÍÎÃÎ ÑÏÓÑÊÀ');(fun(Xk[1]+stage*F1,Xk[2]+stage*F2,ind)<=fun(Xk[1],Xk[2],ind))do(Xk[1]+stage*F1<=Rest[1])then:=1;[1]:=Rest[1];else(Xk[1]+stage*F1>=Rest[2])
then:=2;[1]:=Rest[2];;
(Xk[2]+stage*F2<=Rest[3])then:=1;[2]:=Rest[3];else(Xk[2]+stage*F2>=Rest[4])
then:=2;[2]:=Rest[4];;((ind1<>0)or(ind2<>0))then
break;(all_iter);[1]:=Xk[1]+stage*F1;[2]:=Xk[2]+stage*F2;(Form1.PageControl1.TabIndex=1)
then.Form2.Memo1.Lines.Add('X1='+FloattoStr(RoundTo(Xk[1],-2))+';
'+'X2='+FloattoStr(RoundTo(Xk[2],-2)));(Xk,d11,d22,all_iter);;:=0;:=0;:=0;((ind1<>0)or(ind2<>0))then(Form1.PageControl1.TabIndex=1)
then(iter_d);.Form2.Memo1.Lines.Add('ÄÎÑÒÈÃÍÓÒÎ ÎÃÐÀÍÈ×ÅÍÈÅ');.Form2.Memo1.Lines.Add('X1='+FloattoStr(RoundTo(Xk[1],-2))+';
'+'X2='+FloattoStr(RoundTo(Xk[2],-2)));;i:=0 to 100
do:=-abs(ind1-1)+i*(abs(ind1-1)+1-floor(ind1/2))*0.01;j:=0 to 100
do:=-abs(ind2-1)+j*(abs(ind2-1)+1-floor(ind2/2))*0.01;(-F1*d1-F2*d2<mn)
then:=-F1*d1-F2*d2;:=d1;:=d2;;;;(Form1.PageControl1.TabIndex=1)
then.Form2.Memo1.Lines.Add('ÍÎÂÎÅ ÍÀÏÐÀÂËÅÍÈÅ ÄÂÈÆÅÍÈß');.Form2.Memo1.Lines.Add('d1='+FloattoStr(RoundTo(d11,-2))+';
'+'d2='+FloattoStr(RoundTo(d22,-2)));;(all_iter);(Xk,d11,d22,all_iter);(abs(mn)<=eps)
then(Form1.PageControl1.TabIndex=1) then.Form2.Memo1.Lines.Add('ÒÎ×ÊÀ ÊÓÍÀ-ÒÀÊÊÅÐÀ ÄÎÑÒÈÃÍÓÒÀ!');:=true;;begin(Xk,d11,d22,stage,ind,X1b,X2b);(Form1.PageControl1.TabIndex=1)
then.Form2.Memo1.Lines.Add('ÐÅÇÓËÜÒÀÒ ÎÄÍÎÌÅÐÍÎÉ ÎÏÒÈÌÈÇÀÖÈÈ');.Form2.Memo1.Lines.Add('X1='+FloattoStr(RoundTo(X1b,-2))+';
'+'X2='+FloattoStr(RoundTo(X2b,-2)));.Form2.Memo1.Lines.Add('ÒÎ×ÊÀ ÊÓÍÀ-ÒÀÊÊÅÐÀ ÍÅ ÄÎÑÒÈÃÍÓÒÀ!');;;(all_iter);[1]:=X1b;[2]:=X2b;(Xk,d11,d22,all_iter);else(Form1.PageControl1.TabIndex=1)
then.Form2.Memo1.Lines.Add('X1='+FloattoStr(RoundTo(Xk[1],-3))+';
'+'X2='+FloattoStr(RoundTo(Xk[2],-3))+' àíòèãðàäèåíò=('+FloattoStr(RoundTo(F1,-3))+';'+FloattoStr(RoundTo(F2,-3))+')');.Form2.Memo1.Lines.Add('ÑÌÅÍÀ ÍÀÏÐÀÂËÅÍÈß ÀÍÒÈÃÐÀÄÈÅÍÒÀ');;;(Xk[1],Xk[2],ind,F1,F2);(iter);;(Form1.PageControl1.TabIndex=1)
then.Form2.Memo1.Lines.Add('===============Êîíåö îïòèìèçàöèè===============');.Form2.Label1.Caption:='Êîëè÷åñòâî ñìåí íàïðàâëåíèÿ ñïóñêà='+InttoStr(iter);.Form2.Label2.Caption:='Êîëè÷åñòâî ïåðåñå÷åíèé îãðàíè÷åíèé='+InttoStr(iter_d);bool then
Unit2.Form2.Label3.Caption:='Äîñòèæåíèå òî÷êè Êóíà-Òàêêåðà=äà'Unit2.Form2.Label3.Caption:='Äîñòèæåíèå òî÷êè Êóíà-Òàêêåðà=íåò';;:=Xk[1];:=Xk[2];;
{$R *.dfm}TForm1.Button1Click(Sender:
TObject);.Text:='2';.Text:='2';.Text:='0,1';.Visible:=false;.Visible:=true;;TForm1.Image2Click(Sender:
TObject);.Picture.LoadFromFile('1-.bmp');.Picture.LoadFromFile('2.bmp');.Picture.LoadFromFile('4.bmp');.Picture.LoadFromFile('3.bmp');.TabIndex:=3;;TForm1.Image3Click(Sender:
TObject);.Picture.LoadFromFile('1.bmp');.Picture.LoadFromFile('2-.bmp');.Picture.LoadFromFile('4.bmp');.Picture.LoadFromFile('3.bmp');.TabIndex:=1;;TForm1.Image4Click(Sender:
TObject);.Picture.LoadFromFile('1.bmp');.Picture.LoadFromFile('2.bmp');.Picture.LoadFromFile('4-.bmp');.Picture.LoadFromFile('3.bmp');.TabIndex:=0;;TForm1.Image7Click(Sender:
TObject);.Picture.LoadFromFile('1.bmp');.Picture.LoadFromFile('2.bmp');.Picture.LoadFromFile('4.bmp');.Picture.LoadFromFile('3-.bmp');.TabIndex:=2;;TForm1.BitBtn1Click(Sender:
TObject);();:=Optimum.Create(true);.FreeOnTerminate:=true;.Resume;.Chart1.Visible:=true;;TForm1.Button2Click(Sender:
TObject);.Text:='5';.Text:='400';.Text:='0,1';;TForm1.Button3Click(Sender: TObject);.Form2.Show;;TForm1.FormShow(Sender:
TObject);.Form2.Show;.Form2.Hide;();.TabIndex:=3;;TForm1.BitBtn2Click(Sender:
TObject);();:=Optimum.Create(true);.FreeOnTerminate:=true;.Resume;;TForm1.Button4Click(Sender:
TObject);Demo:Demonstrate;:=Demonstrate.Create(true);.FreeOnTerminate:=true;.Resume;;TForm1.Button5Click(Sender:
TObject);ao,D0,Mo,L1,L2,Sum,M,Dx,az,C,buff:double;,i,s,k:integer;:array[1..331]
of double;:array[1..200] of double;:array[1..2] of double;:array[0..1] of
double;,Dz,A3:double;:array [1..21] of double;_rep:integer;:string;
//==============Вывод
результатов проверки работоспособности объекта===================
if BoolOpt
then_rep:=231;
for i:=1 to 200
do[i]:=0;
end;i:=1 to X_rep
do[i]:=0;;i:=1 to 21 do[i]:=0;;:=0.093;:=20;:=23;:=sqrt(10);:=sqrt(8);:=30;[1]:=(L1-floor(L1))-0.5;i:=2
to X_rep do[i]:=(L2*X[i-1]-floor(L2*X[i-1]))-0.5;;:=0;i:=1 to X_rep
do:=Sum+X[i];;(Sum/X_rep<>0) then:=Sum/X_rep;i:=1 to X_rep
do[i]:=X[i]-M;;;:=0;i:=1 to X_rep do:=Dx+X[i]*X[i];;:=Dx/X_rep;
[1]:=0.01;[2]:=0.01;(X,A,Ar);[1]:=Ar[0];[2]:=Ar[1];:=func(X,A,3);:=A[1]*sqrt(D0/(Dx*ao*A[2]))/Ns;k:=1
to 200 do:=0;i:=k to k+Ns do:=buff+X[i]*exp(-A[2]*ao*(i-k));
Z[k]:=C*buff+Mo+A3;
end;;:=0;i:=1 to
200 do
begin:=Mz+Z[i];
end;:=Mz/200;:=0;i:=1
to 200 do
Dz:=Dz+(Z[i]-Mz)*(Z[i]-Mz);
end;:=Dz/200;s:=1
to 20 doi:=1 to 200-s do
begin[s+1]:=Kz[s+1]+(Z[i]-Mz)*(Z[i+s]-Mz);
end;[s+1]:=Kz[s+1]/(200-s);;[1]:=Dz;:=SearchRoot(Dz,Kz);.Form3.Show;.Form3.Hide;
ExpMathModel(Z);i:=1
to 200 do
begin.Series[0].AddXY(i-1,Z[i]);
str:='X['+InttoStr(i-1)+']='+FloattoStr(RoundTo(X[i],-3))+';
';:=str+'Z['+InttoStr(i-1)+']='+FloattoStr(RoundTo(Z[i],-3))+'; ';
Unit3.Form3.Memo1.Lines.Add(str);.Form3.Chart1.Series[0].AddXY(i-1,Z[i]);.Form3.Chart2.Series[0].AddXY(i-1,X[i]);;i:=1
to 20 do.Form3.Chart3.Series[0].AddXY(i-1,Kz[i]);.Form3.Chart3.Series[1].AddXY(i-1,Kz[1]*exp(-az*(i-1)));;.Form3.Label2.Caption:='Ìàò. îæèäàíèå='+FloattoStr(RoundTo(Mz,-2));.Form3.Label1.Caption:='Äèñïåðñèÿ='+FloattoStr(RoundTo(Dz,-2));.Form3.Label3.Caption:='Êîýôôèöèåíò à='+FloattoStr(RoundTo(az,-4));.Form3.Label4.Caption:='A1='+FloattoStr(RoundTo(A[1],-3));.Form3.Label5.Caption:='A2='+FloattoStr(RoundTo(A[2],-3));else
MessageDlg('Ïåðåä ïðîâåðêîé íà ðàáîòîñïîñîáíîñòü îáúåêòà åãî ïåðâîíà÷àëüíî íåîáõîäèìî îïòèìèçèðîâàòü!', mtWarning, [mbOk],
0);;TForm1.Button6Click(Sender: TObject);.Form3.Show;;.
Назначение и общее описание
программы.
Приведенная программа
предназначена для оптимизации проектируемого объекта (требуется найти
температуру и объём реактора) и проверки его работоспособности методом
имитационного моделирования. Поиск оптимальных параметров осуществляется
методом возможных направлений Зойтендейка. Уравнения математической модели
решаются методом Эйлера. Для имитационного моделирования использован генератор
случайных процессов, построенный на генераторе случайных чисел, работающий по
методу иррациональных чисел.
Данная программа состоит из трех частей: проверка метода оптимизации,
оптимизация объекта и проверка работоспособности спроектированного объекта
методом имитационного моделирования.
Описание технических средств.
Программа была разработана на IBM совместимой машине (ноутбук Toshiba SATELLITE L130-134) с процессором Intel Celeron 1470 MHz на языке Delphi 7 под управлением ОС Microsoft
Windows XP ZverCD v 7.11.5. Системные требования минимальные. Предполагается
работа программы на любом IBM
совместимом компьютере под управлением Windows 95 / 98 / Me / Xp / Windows 7.
Вызов и загрузка программы.
Форматы команд для запуска различных этапов проектирования:
Запуск программы:
{диск}:\{путь}\ Project1.exe
На вход программы подаются значения параметров уравнений математической
модели и интервал, на котором ищется температура и объём реактора. На выходе
выдается оптимальное, с точки зрения значения (максимальное значение)
концентрации продукта реакции и оптимальные параметры. Кроме того, строятся
графики изменения концентраций веществ в реакторе от температуры при различных
объёмах реактора.
На вход программы имитационного моделирования подаются значения
характеристик случайного процесса: математическое ожидание, дисперсия и
показатель степени при экспоненте в корреляционной функции. На выходе
формируются график входной случайной величины (концентрации этилена) и
соответствующий ему график выходной величины (концентрации хлористого этила).