DAFTAR PUSTAKA
[1]
Brown, Kermitt, “The Technology of Artificial Lift Methods Volume
4”,Tulsa,1982
[2]
Gen, Mitsuo. dan Cheng, Runwei., “Genetic Algorithms and Engineering
Design”, A Willey-Interscience Publication, Canada, 1997
[3]
Goldberg, D.E., “Genetic Algorithms in Search, Optimization and
Machine Learning”, Addison-Wesley, Canada, 1989.
[4]
Hinduan, Lukluk, ”Optimasi Diameter Jaringan Pipa Gas dengan
Memperhitungkan Kemiringan Pipa”, Tugas Akhir, Jurusan Matematika,
ITB, Bandung, 2002.
[5]
Mathews, John.H dan Fink, Kurtis.D, ”Numerical Methods Using
MATLAB”, Prentice Hall, London, 1999.
[6] Simarmata, Giorevinus, ”Algoritma Genetika dalam Penyelesaian Sistem
Persamaan Non Linier”, Tugas Akhir, Jurusan Matematika, ITB,
Bandung, 2003.
[7]
Susila, I Nyoman, “Diktat Kuliah Metoda Numerik”, Jurusan
Matematika, ITB, Bandung, 2005.
LAMPIRAN A
Program Runge Kutta Untuk Mencari Gradien Tekanan pada Pipa
Aliran Multifasa
Program Utama
clear; clc; %Input
p = input('Masukkan Tekanan di Outlet : '); P = input('Masukkan Panjang Pipa '); beda =P*10; h=0.1; L=0; result=[p]; length = [0]; for i=1:beda k1=inclined(p); k2=inclined(p+(h/2)*k1); k3=inclined(p+(h/2)*k2); k4=inclined(p+h*k3); p=p+(k1+2*k2+2*k3+k4)*h/6; result=[result;p]; L=L+h; length=[length;L]; end hasil=[length result] plot(length,result); xlabel('length (feet)'); ylabel('pressure (psia)');
title('Pressure Distribution Along Pipe');
Fungsi Untuk Mencari Koefisien Beggs Brills
function pd=inclined(p) % input data2 kecuali p awal gc=32.17
g=32.17 q_o=30000 q_g=2570000 d=2 T=90 API=20 gamma_g=0.7 GOR=360 Rs=55 Bo=1.015 mu_o=4.2 mu_g=0.0105 sigma_o=22.3 Zg=0.93 R=360 fo=1 Ap=0.785 gamma_o=141.5/(131.5+API) rho_o=53 rho_g=(0.0764*gamma_g*p*520)/(14.7*(T+460)*Zg) rho_l=rho_o*fo q_g=(0.000000327*Zg*q_o*(R-Rs)*(T+460))/p q_l=0.0000649*q_o*Bo vsl=q_l/Ap vsg=q_g/Ap vm=vsl+vsg Gl=rho_l*vsl Gg=rho_g*vsg Gm=Gl+Gg lambda=q_l/(q_l+q_g) Nfr=vm^2/(g*d) mu_l=mu_o*fo mu_m=0.000672*(mu_l*lambda+mu_g*(1-lambda)) sigma_l=sigma_o*fo N_rens=Gm*d/mu_m N_lv=1.938*vsl*(rho_l/sigma_l)^0.25 Hl0=0.98*lambda^0.4846/(Nfr^0.0868) C=(1-lambda)*log(0.011*(lambda^(-3.768))*(N_lv^3.539)*(Nfr^(-1.614))) psi=1+C*(0.094-(0.333*0.094^3)) Hl3=Hl0*psi rho_tp=rho_l*Hl3+rho_g*(1-Hl3) y=lambda/(Hl3^2) s=log(y)/(-0.0523+3.182*log(y)-0.8725*log(y)*log(y)+0.01853*log(y)^4) a=2*log10(N_rens/(4.5223*log10(N_rens)-3.8215)) fns=1/(a^2) b=exp(s) ftp=b*fns a1=g/gc*rho_tp*0.0523 a2=ftp*Gm*vm/(2*gc*d) a3=rho_tp*vm*vsg/(gc*p*144) dp=a1+a2/(1-a3) pd=dp/144
LAMPIRAN B
Program Algoritma Genetika
Program Utama
% Program utama GA clear; clc;
% fprintf('Program ini dibuat untuk menyelesaikan masalah optimasi berbentuk:\n'); % fprintf('Meminimumkan f(x1,x2)\n'); %fungsi biaya
% fprintf('terhadap a<x1<b\n'); %max allowable pressure % fprintf(' c<x2<d\n');
%Input
gen_max = input('Banyak generasi: '); pop_size = input('Ukuran populasi: ');
co_prob = input('Peluang persilangan: (masukan angka di [0,1])'); mut_prob = input('Peluang mutasi: (masukan angka di [0,1])'); segmen = input('Masukkan banyaknya segmen');
nilai_a = input('Masukkan nilai batas bawah dari x1:'); nilai_b = input('Masukkan nilai batas atas dari x1:');
presisi = input('Ketelitian yang dikehendaki berapa angka setelah tanda desimal? '); pj_bit = ceil((presisi*log(10)+log(nilai_b-nilai_a))/log(2))
range=[16,23;16,23]
% Jangan lupa range harus diubah kalu segmen berubah %Menentukan Populasi Random Awal
popu = rand(pop_size, pj_bit*segmen)>0.5;
% fprintf('===========Populasi Awal=========== \n'); % tulis(popu,pop_size,pj_bit*segmen);
for v=1:gen_max
% konversi dari string ke real diameter=zeros(pop_size,segmen); for m = 1:pop_size for k = 1:segmen diameter(m,k)=konversi(popu(m,(k-1)*pj_bit+1:k*pj_bit),range(k,:)); end end
%Fungsi utk mencari perubahan tekanan menggunakan RK %Mencari perubahan tekanan pd pipa untuk mencari biaya total eval=zeros(pop_size,1);
for j=1:pop_size
eval(j)=Biaya_total(diameter,j); end
% Evaluation:The process of evaluating the fittness of a chromosome biaya_max=eval(1);
d_max=1; for i=2:pop_size if eval(i)>=biaya_max biaya_max=eval(i); d_max=i; end end
% fprintf('Individu yang paling lemah adalah individu %d\n',d_max); biaya_min=eval(1); d_min=1; for i=2:pop_size if eval(i)<=biaya_min biaya_min=eval(i); d_min=i; end end
% fprintf('Individu yang paling kuat adalah individu %d\n',d_min); eval_new=zeros(pop_size,1); for j=1:pop_size eval_new(j)=biaya_max-eval(j); end eval=eval_new; fitness_max=eval(d_min); % % Selection F=0; for i=1:pop_size
F=F+eval(i);%menghitung total fitness end
P=zeros(pop_size,1); for i=1:pop_size
P(i)=eval(i)/F;
%menghitung peluang seleksi end q=zeros(pop_size,1); for j=1:pop_size A=0; for i=1:j A=A+P(i); end q(j)=A; end Sel_rand=rand(pop_size,1); dummy=zeros(pop_size,pj_bit*segmen); for i=1:pop_size j=1; while Sel_rand(i)>q(j) j=j+1; end if Sel_rand(i)<=q(j)
dummy(i,:)=popu(j,:); end
% fprintf('Nilai bilangan random %d\n',Sel_rand(i)); % fprintf('Nilai peluang kumulatif %d\n',q(j));
% fprintf('Jadi individu yang terpilih individu ke %d\n',j); end popubaru=dummy; %Crossover ortu=randperm(m); dummy1=popubaru; for k=1:floor(m/2)
mate=[ortu(2*k-1),ortu(2*k)]; %Indeks pasangan persilangan pap=popubaru(ortu(2*k-1),:); %Induk 1 mam=popubaru(ortu(2*k),:) ; %Induk 2 if rand<co_prob pos=randint(1,1,[1,pj_bit*segmen-1]); dummy1(ortu(2*k-1),:)=[pap(1:pos) mam(pos+1:segmen*pj_bit)]; dummy1(ortu(2*k),:)=[mam(1:pos) pap(pos+1:segmen*pj_bit)];
fprintf('Titik persilangan = %d \n', pos+1); fprintf('Induk 1\n'); fprintf('%d ',pap); fprintf('\n'); fprintf('Induk 2\n'); fprintf('%d ',mam); fprintf('\n'); fprintf('Keturunan 1\n'); fprintf('%d ',dummy1(ortu(k*2-1),:)); fprintf('\n'); fprintf('Keturunan 2 \n'); fprintf('%d ',dummy1(ortu(k*2),:)); fprintf('\n'); else pos=0; end end popubaru=dummy1; %Mutation mutant=rand(pop_size,pj_bit*segmen); for i=1:pop_size for j=1:pj_bit*segmen if mutant(i,j)<mut_prob
fprintf('Terjadi mutasi pada individu ke-%d \n', i); fprintf('Terjadi mutasi pada alel ke-%d \n ', j); if popubaru(i,j)==0 popubaru(i,j)=1; else popubaru(i,j)=0; end end end end
fprintf('=============Populasi baru setelah Seleksi, Crossover, dan Mutasi ===========\n'); for k=1:pop_size fprintf('Individu%2d: ' ,k); for j=1:segmen*pj_bit fprintf('%d',popubaru(k,j)) end;
for idx_segmen = 1:segmen
diameter(k,idx_segmen)=konversi(popubaru(k,(idx_segmen1)*pj_bit+1:idx_segmen*pj_bit),range (idx_segmen,:)); fprintf('%4d ',diameter(k,idx_segmen)); end fprintf('\n'); end
% konversi dari string ke real diameter=zeros(pop_size,segmen); for m = 1:pop_size for k = 1:segmen diameter(m,k)=konversi(popubaru(m,(k-1)*pj_bit+1:k*pj_bit),range(k,:)); end end
%Fungsi utk mencari perubahan tekanan menggunakan RK %Mencari perubahan tekanan pd pipa untuk mencari biaya total eval=zeros(pop_size,1);
for j=1:pop_size
eval(j)=Biaya_total(diameter,j); end
% Evaluation:The process of evaluating the fittness of a chromosome biaya_max=eval(1); d_max=1; for i=2:pop_size if eval(i)>=biaya_max biaya_max=eval(i); d_max=i; end end
% fprintf('Individu yang paling lemah adalah individu %d\n',d_max); biaya_min=eval(1); d_min=1; for i=2:pop_size if eval(i)<=biaya_min biaya_min=eval(i); d_min=i; end end
% fprintf('Individu yang paling kuat adalah individu %d\n',d_min); eval_new=zeros(pop_size,1);
for j=1:pop_size
end
eval=eval_new;
fitness_max=eval(d_min); fprintf(' Generasi Ke %d \n',v);
Diameter_yang_memaksimumkan_fitness=diameter(d_min,:) fprintf('Individu yang paling kuat adalah individu %d \n',d_min); fprintf('Nilai Fitnessnya: %d\n',fitness_max);
fprintf('%d \n',biaya_min');
fprintf('Individu yang paling lemah adalah individu %d\n',d_max); Diameter_yg_minimum=diameter(d_max,:)
popu=popubaru; %Kriteria konvergensi
if sum(popu) >= (0.90*pop_size) | sum(popu) <= (0.10*pop_size) fprintf('Sudah konvergen pada generasi ke:%d\n',v);
break; end end
Program Untuk Menampilkan populasi
function tulis(popu,up,pb) for i=1:up fprintf('K%3d ',i) for j=1:pb fprintf('%1d',popu(i,j)) end fprintf('\n') end fprintf('\n')
Program Untuk Mengonversi String Biner ke Bilangan Real
function bil=konversi(bit,range) %Konversi string biner ke bilangan real %Contoh : bit2bil([1 1 0 1], [0,15]) %POLYVAL Evaluate polynomial.
%Y = POLYVAL(P,X), when P is a vector of length N whose elements %are the coefficients of a polynomial, is the value of the
%polynomial evaluated at X. Y = P(1)*X^(N-1) + P(2)*X^(N-2) + ... + P(N-1)*X + P(N) integer=polyval(bit,2);
bil=integer+range(1);
Program Untuk Mencari Biaya Tiap Segmen
% Program ini untuk mencari perubahan tekanan menggunakan runge kutta % Kemudian dicari Biaya total optimum untuk tiga segmen
% SEGMEN ke-3
function Biaya_total=Biaya_total(diameter,j) % Tekanan awal di ujung pipa2
p=325; d=diameter(j,1); beda =36.48622; h=10000; L=0; result=[325]; length = [0]; for i=1:beda k1=horizontal(p,d/12); k2=horizontal(p+(h/2)*k1,d/12); k3=horizontal(p+(h/2)*k2,d/12); k4=horizontal(p+h*k3,d/12); p=p+(k1+2*k2+2*k3+k4)*h/6; result=[result;p]; L=L+h; length=[length;L]; end hasil=[length result]; p1=hasil(36,2); p1=p1*144/53; p01=p1/4; delta_p=p1-p01; rho=53; q=30000; Rp=1; Cp=875; t=0.375; r=0.12; n=20; booster_price=450; Hy=8760; Ce=1.1; Pop=1; Cfp=0.01; Hp=rho*q*0.00006498843*delta_p/550; pipa_inv1=(15.894*(1+Rp)*Cp*L*0.0003048*(d+t)*t*(r*(1+r)^n/((1+r)^n-1))); pompa_inv1=booster_price*Hp*(r*(1+r)^n/((1+r)^n-1)); Pompa_op1=Hp*0.746*Hy*Ce*(1+Pop); Pipa_op1=pipa_inv1*Cfp; Biaya_op1=Pompa_op1+Pipa_op1; Biaya_inv1=pipa_inv1+pompa_inv1; Biaya_total1=pipa_inv1+pompa_inv1+Pompa_op1+Pipa_op1; % SEGMEN ke-2 p=p01*53/144; d=diameter(j,2); beda =32.14895; h=10000; L=0;
result=[p]; length = [0]; for i=1:beda k1=horizontal(p,d/12); k2=horizontal(p+(h/2)*k1,d/12); k3=horizontal(p+(h/2)*k2,d/12); k4=horizontal(p+h*k3,d/12); p=p+(k1+2*k2+2*k3+k4)*h/6; result=[result;p]; L=L+h; length=[length;L]; end hasil=[length result]; p1=hasil(32,2); p1=p1*144/53; p2=p1/3; delta_p=p1-p2; rho=53; q=30000; Rp=1; Cp=875; t=0.375; r=0.12; n=20; booster_price=450; Hy=8760; Ce=1.1; Pop=1; Cfp=0.01; Hp=rho*q*0.00006498843*delta_p/550; pipa_inv2=(15.894*(1+Rp)*Cp*L*0.0003048*(d+t)*t*(r*(1+r)^n/((1+r)^n-1))); pompa_inv2=booster_price*Hp*(r*(1+r)^n/((1+r)^n-1)); Pompa_op2=Hp*0.746*Hy*Ce*(1+Pop); Pipa_op2=pipa_inv2*Cfp; Biaya_op2=Pompa_op2+Pipa_op2; Biaya_inv2=pipa_inv2+pompa_inv2; Biaya_total2=pipa_inv2+pompa_inv2+Pompa_op2+Pipa_op2; % SEGMEN ke-1 p=p2*53/144; d=diameter(j,3); beda =29.76706; h=10000; L=0; result=[p]; length = [0]; for i=1:beda k1=horizontal(p,d/12); k2=horizontal(p+(h/2)*k1,d/12);
k3=horizontal(p+(h/2)*k2,d/12); k4=horizontal(p+h*k3,d/12); p=p+(k1+2*k2+2*k3+k4)*h/6; result=[result;p]; L=L+h; length=[length;L]; end hasil=[length result]; p1=hasil(29,2); p1=p1*144/53; p2=p1/2; delta_p=p1-p2; rho=53; q=30000; Rp=1; Cp=875; t=0.375; r=0.12; n=20; booster_price=450; Hy=8760; Ce=1.1; Pop=1; Cfp=0.01; pipa_inv3=(15.894*(1+Rp)*Cp*L*0.0003048*(d+t)*t*(r*(1+r)^n/((1+r)^n-1))); pompa_inv3=0; Pompa_op3=0; Pipa_op3=pipa_inv2*Cfp; Biaya_op3=Pompa_op3+Pipa_op3; Biaya_inv3=pipa_inv3+pompa_inv3; Biaya_total3=pipa_inv3+pompa_inv3+Pompa_op3+Pipa_op3; Biaya_total=Biaya_total1+Biaya_total2+Biaya_total3;