Программа оптимизации теплообменного аппарата
Для разработки предложенной программы была использована среда PascalABC совместно с офисным пакетом Microsoft Excel 2010.
Текст программы
Programsimone;
Constdx=0.0001;
Q=10000000; //Производительность
Tv1=64; //Начальная температура воды
Tv2=138; //Конечная температура воды
Tn=175.4; //Температура пара
R_zagr=0.00015; //Степень загрязнения
teta=0.98; //Коэффициент тепловых потерь
Lam_st=43; //Коэффициент теплопроводности
Delta_st=0.0025; //Толщина стенки
//Ограничения
dmax=10;
dmin=0.00000001;
Wmax=10;
Wmin=0.0000001;
//Параметры стенки
Pr_c=1.278;
Kw=0.0001;
Tc=138.2;
Lam_c=0.685;
mu_c=204.106/1000000;
L_tr=3;
//Параметры воды
Ro=957.66;
Cp=4221;
Lam_v=0.6832;
v=0.293/1000000;
Pr=1.735;
//Параметры пара
r1=2030.4;
mu_s=157.5/1000000;
Lambda_s=0.676;
Pr_s=1.023;
Ro_s=4.66;
w11=0.162;
//Цена
Cena_F=2000;
Cena_ElEn=5;
v_s=0.173/1000000;
dT=37.7;
H1=3;
typearray2D = array of array ofreal;
Varx,x0,df,g :array ofreal; d2f:array2D;
eps,h,grad,s,r,fc,P,c :real;
i,j,n,n1,k,l :integer;
Alfa_vod,K_tp,F_ta,dP,N_nasosa,Zatr_F,
Zatr_ElEn,Delta_t,G_vod,Lambda,Alfa_para,a,an,eps1,Q_ta,HdTkr: real;
Functionbarier(g:array ofreal): real;
labelstop;
Vari:integer;
s:real;
Begin
s:=0;
barier:=1e30;
Fori:=1 ton1 do
ifg[i]<0 thens:=s+1/g[i] else gotostop;
barier:=-r*s;
stop: end;
Functionf(x: array ofreal):real;
Begin
eps1:=Power((Power(Lam_c/Lambda_s ,3)*(mu_c/mu_s)),0.125);
an:=0.725*Power( ( Power(Lam_v,3)*9.81*(Ro-Ro_s)*r1*1000)/(v*x[1]*(Tn-Tc)) ,0.25 )*eps1;
a:=25.7*Power((Ro_s*w11*w11)/(9.81*Ro*x[1]),0.08)*Power((an*x[1]/Lam_v),(-0.5))*an;
Alfa_para:=(a*0.84)/Power(10,0.07);
Delta_t:=((Tn-Tv1)-(Tn-Tv2))/ln((Tn-Tv1)/(Tn-Tv2));
Alfa_vod:=(0.021*Power((x[2]*x[1]/v),0.8)*Power(Pr,0.43)*Power((Pr/Pr_c),0.25)*Lam_v)/x[1];
K_tp:=1/(1/Alfa_para+Delta_st/Lam_st+1/Alfa_vod+R_zagr);
Q_ta:=Q*teta;
F_ta:=Q_ta/(K_tp*Delta_t);
Lambda:=0.11*Power((Kw/x[1])+(v*68/x[2]*x[1]),0.25);
dP:=Lambda*(L_tr/x[1])*(x[2]*x[2]/2)*Ro+7.5*(Ro*x[2]*x[2]/2);
G_vod:=Q_ta/(Cp*(Tv2-Tv1));
N_nasosa:=(G_vod*dP)/(Ro*0.85);
Zatr_F:=F_ta*Cena_F;
Zatr_ElEn:=(N_nasosa*8400/1000)*Cena_ElEn;
fc:=Zatr_F+Zatr_ElEn;
//Ограничения
g[1]:=-dmax+x[1];
g[2]:=-x[1]+dmin;
g[3]:=-Wmax+x[2];
g[4]:=-x[2]+Wmin;
P:=barier(g);
F:=fc+P;
End;
//Процедураобращенияматрицы
Procedureinvert(n,q: integer; matr1:array2D; varmatr: array2D);
labelM1,M2;
Var
a:array of array ofreal;
i,j,k,m : integer;
t :real;
Begin
SetLength(a, n + 1);
Fori := low(a) tohigh(a) do
SetLength(a[i], 2*(n+1));
m:=2*n; q:=0;
Fori:=1 ton do
Forj:= 1 tom do
Ifj<=n thena[i,j]:=matr1[i,j] else
Ifj=n+i thena[i,j]:=1.0 elsea[i,j]:=0;
Fori:=1 ton do
Begink:=i;
M1: ifa[k,i]=0 then
Beginq:= 1;
ifk<n thenk:=k+1 else gotoM2;
gotoM1;
End;
Ifq=1 then
Forj:=1 tom do
Begin
t:=a[k,j]; a[k,j]:=a[i,j]; a[i,j]:=t
End;
Forj:=m downtoi doa[i,j]:=a[i,j]/a[i,i];
Fork:= 1 ton do
Ifk<>i then
Forj:=m downto1 do
a[k,j]:=a[k,j]-a[i,j]*a[k,i];
End; { i }
q:=0;
Fori:= 1 ton do
Forj:= 1 ton domatr[i,j]:=a[i,j+n];
M2: End; {invert}
// Процедура вычисления координат вектора градиента и формирования матрицы вторых производных
ProcedureFor_Mat_d2f(n:integer; vargrad:real);
Var
i,j :integer;
s,f0: real;
Begin
//Расчет первых производных
f0:=f(x); s:=0;
Fori:= 1 ton do begin
x[i]:=x[i]+dx;
df[i]:=(f(x)-f0)/dx;
s:=sqr(df[i]);
x[i]:=x[i]-dx;
End;
grad:=sqrt(s);
//Расчет вторых производных
Fori:=1 ton do
Begin
s:=-2*f(x);
x[i]:=x[i]+dx;
s:=s+f(x);
x[i]:=x[i]-2*dx;
s:=s+f(x);
x[i]:=x[i]+dx;
d2f[i,i]:=s/sqr(dx);
End;
//Расчет смешанных производных
Fori:= 1 ton-1 do
Forj:=i+1 ton do
Begin
s:=f(x); // 1
x[i]:=x[i]-dx; x[j]:=x[j]-dx;
s:=s+f(x); //4
x[j]:=x[j]+dx;
s:=s-f(x); //2
x[i]:=x[i]+dx; x[j]:=x[j]-dx;
s:=s-f(x); //3
x[j]:=x[j]+dx;
d2f[i,j]:=s/sqr(dx);
d2f[j,i]:=d2f[i,j];
End;
End; // For_Mat_d2f
Proceduretek_koord;
Vari,j :integer;
s: real;
Begin
Repeat
For_Mat_d2f(n,grad);
invert(n,q,d2f,d2f);
Ifq = 1 then
Begin
writeln('Определительравеннулю');
exit{goto stop}
End;
Fori:= 1 ton do
Begin
s:=0;
Forj:= 1 ton do
s:=s+d2f[i,j]*df[j];
x[i]:=x[i]-s;
End;
Untilgrad<eps;
End; // tek_koord
Procedureprint;
Vari : integer;
Begin
Writeln('Итерация ',k, ' Параметрштрафаr=',r: 12:8);
Fori:=1 ton do
Begin
Writeln('x0[',i,'] = ',x0[i], 'x[',i,'] = ',x[i]);
x0[i]:=x[i]
End;
writeln('Функцияштрафа = ',P);
writeln
End;
Begin
Writeln('Исходныеданные');
Writeln;
Write('Введите размерность задачи оптимизации n= ');
Readln(n);
Write('Введите точность вычислений eps= ');
Readln(eps);
Writeln('Введите начальные значения переменных');
SetLength(x,n + 1);
SetLength(x0,n+1);
SetLength(df,n+1);
SetLength(g,n + 3);
SetLength(d2f, n + 1);
Fori := low(d2f) tohigh(d2f) do
SetLength(d2f[i], n+1);
Fori:= 1 ton do
Begin
Write('x[',i,']=');
Readln(x[i]);
End;
Write('Введите число ограничений = ');
Readln(n1);
Write('Введите начальное значение параметра штрафа r=');
Readln(r);
Write('Введите число уменьшения параметра штрафа с=');
Readln(c);
Writeln;
k:=0;
Repeat
k:=k+1;
tek_koord;
print;
r:=r/c;
Untilabs(P)<0.01;
Writeln;
Writeln('Peзyльтaтыоптимизации');
Writeln('c использованием обратной штрафной функции:');
Writeln;
Fori:= 1 ton dowriteln('x[',i,'] = ',x[i]);
Writeln;
Writeln('Значение функции цели = ',f(x));
Writeln;
Writeln('Значение функции цели = ',f(x));
Writeln;
Writeln('Значение функции цели = ',f(x));
Writeln;
Writeln('Оптимальные значения ');
Writeln;
Writeln('диаметр d = ',x[1]:2:3,' м');
Writeln;
Writeln('скоростьw = ',x[2]:2:3,' м3/с');
Writeln;
Writeln('ЗатратыЗ= ',f(x):8:3,' руб');
Writeln;
Writeln('ПлощадьтеплообменногоаппаратаF= ',F_ta:5:3,' м2');
Readln;
End.
Результаты оптимизации данной программы быть представлены на рисунке 1.2.
Рис.1.2. - Результаты оптимизации теплообменного аппарата
З=f(dвн,w)
Рис.1.3. – Изменение затрат
В программе Surfer 13 был построен график зависимости скорости в теплообменном аппарате от диаметра его труб.
Рис 1.4. – Зависимость диаметра от скорости теплоносителя с ограничениями
Из результатов оптимизации функции затрат для рассматриваемого аппарата видно, что минимум (З=140607.015 руб) достигается при dвн=17.915 мм, F=63.477 и скорости теплоносителя в трубах w=1.185 м/с.
По каталогу был выбран стандартный теплообменный аппарат, тип ихарактеристики данного аппарата представлены в таблице 1.1:
Таблица 1.1. - Характеристики теплообменного аппарата
Тип аппарата | Диаметр кожуха, мм | Условное давление, МПа | Число ходов по трубам | Наружный диаметр труб, мм | Площадь поверхности теплообменника, м2 | Площадь проходного сечения одного хода по трубам, м2 | Площадь проходного сечения по межтрубному пространству, м2 | ||||
Наружный | Внутренний | В кожухе | В трубах | При длине прямого участка 3000 мм | При толщине стенки труб, мм | В вырезе перегородки | Между перегородками | ||||
1,8 | |||||||||||
ТН | 1,6 | 1,6 | 0,039 | 0,037 | 0,037 | 0,048 |