SlideShare una empresa de Scribd logo
1 de 15
Pendahuluan
Seismik tomografi merupakan sebuah metode geofisika untuk mengetahui kondisi bawah
permukaan bumi berdasarkan data waktu tiba gelombang gempabumi (P dan S) yang terekam oleh
peralatan seismik (seismometer) yang tersebar di atas permukaan bumi. Hasil pengolahan dan
analisa gelombang tersebut akan memberikan gambaran struktur 3D interior bumi secara rinci.
Dalam melakukan pengolahan data tomografi dan permodelannya dikenal adanya istilah inversi
tomografi. Inversi tomografi sendiri merupakan tahapan dimana dari data travel time yang ada kita
berusaha memprediksi dan menentukan parameter-parameter model dari model bawah permukaan
bumi kita atau model inisiasi kita. Dalam proses inversi tomografi, salah satu poin penting yang tidak
bisa dilepaskan adalah bagaimana kita menghitung travel time kalkulasi melalui model kecepatan
yang ada. Untuk itu kita perlu untuk memprediksi jalur penjajakan sinar atau gelombang seismik
yang melewati model yang di-inisiasikan, proses tersebut sering disebut ray tracing. Seperti yang
sudah kita ketahui dari kuliah tentang Gelombang Dalam Geofisika bahwa gelombang mempunyai
banyak sifat dalam penjalarannya, dan itu mempengaruhi juga terhadap jenis ray tracing dalam
inversi tomografi ini. Adapun beberapa jenis metoda Ray Tracing yang biasa digunakan di inversi
tomografi :
      Shooting methods [Snell’s Law, Born & Wolf, 1980]
      Bending methods [Fermat’s Principle, Fermat, 1891]
      Full wave equation methods [Huygen’s Principle, Huygen’s,1690]
Terinspirasi dari hal tersebut, dalam tugas besar ini saya mencoba menerapkan metoda inversi
geofisika dalam permasalahan inversi geofisika khususnya untuk ray tracing tomografi. Inti
programnya adalah tentang bagaimana metoda inversi non-linier dengan pendekatan global
membantu proses ray tracing dalam menentukan sudut tembak yang paling baik dalam
mendapatkan selisih jarak antara titik akhir ray dengan titik posisi receiver. Untuk metoda
inversinya, saya mencoba menerapkan apa yang diajarkan di kuliah Inversi Geofisika, yaitu tentang
metoda Simlated Annealing. Simulated Annealing atau yang sering disingkat SA merupakan salah
satu metoda guided random search atau pencarian acak terarah dengan mengadopsi persamaan
probabilitas Bolztmann. Sejauh yang saya mengerti metoda ini sangat baik untuk menentukan suatu
nilai minimum dari sebuah fungsi walau memang algoritmanya sedikit kompleks, namun secara
keseluruhan ia dapat menunjukan pencarian solusi dengan jelas dnegan menunjukan ama solusi
yang ditolak dan mana yang diterima. Untuk teori dasar dari metoda ini selengkapnya dapat dilihat
di Buku Pengantar Permodelan inversi Geofisika (Hendra Grandis). Selain SA saya juga berusaha
menerapkan metoda inversi lainya seperti, inversi linier berbobot untuk mencari parameter model
kecepatan yang nantinya akan digunakan dalam proses ray tracing. Diharapkan dengan metoda SA
ini didapatkan sudut tembak terbaik dan selisih jarak yang paling minimum dari proses ray tracing.

Metoda
Metoda yang digunakan dalam program ini adalah:
    Konsep dasar sesimik tomografi cross-hole
    Ray tracing dengan shooting methods
    Konsep delay time tomografi
    Konsep inversi linier berbobot objektif
    Konsep inversi non-linier pendekatan global – Simulated Annealing
Adapun model yang saya inisiasikan untuk dilakukan inversi tomografi adalah sebagai berikut,
    Source 2 buah
    Receiver 3 buah
    Geologi 3 lapisan dengan kecepatan berbeda yaitu 1000, 1200 dan 1500
    Jarak 2 lubang bor adalah 100 m dan kedalam masing-masing 50 m
Untuk metoda inversi non-linier dengan pendekatan global – Simulated Annealing, arus kerja
program yang saya gunakan tidak berbeda jauh dengan apa yang diajarkan di kuliah Inversi
Geofisika. Adapun flowchart-nya adalah sebagai berikut,

   Model Awal m0,
    n=0, T awal


   Perubasi model             Penurunan T
        m n+1
                                                           N

    ∆E = E(m n+1) –
        E(m n)                                                      Y
                                                      Stop ?                    Solusi



                          Y          Model                              Model
        ∆E <0 ?
                                   m n = m n+1                           mn


                   N

     P = exp(-∆E/kT)

       R=rand(1)




                               Y
         R<P?




                               N


Dengan flowchart diatas dalam menjalankannya, saya memasuka beberapa parameter untuk
algoritma SA sebagai berikut,
     Temperatur awal di T = 10.0
     Temperatur iterasi berhenti ketika T = 0.02
      = 0.98;
     Persamaan penurunan suhunya adalah Tn = *T = 0.98*T
     Iterasi maksimal di 1000 iterasi
     Dalam suatu nilai T akan ada maksimal 100 iterasi
 Sebuah solusi akan diterima sebanyak 30 kali sebelum iterasi penambahan temperatur
      k=1
Sebenarnya saya mendefinisikan banyak sumber dan receiver. Ini diperlukan agar pada saat inversi
linier berbobot untuk menentukan kecepatan model dengan metoda inversi kasus yang kita punya
adalah dalam karakter under-determined. Namun untuk melakukan ray tracing dengan shooting
method saya menggunakan contoh ray tracing untuk source ke-1 yang berada di lapisan pertama
dengan receiver ke-3 yang berada di lapisan ketiga. Memang saya mengakui bahwa script yang saya
buat ini berjalan dengan sangat baik hanya ketika source dan receiver ada pada kondisi seperti itu,
jika diinginkan kondisi yang berbeda maka diperlukan pemrograman lebih expert untuk itu.
Sementara ini dengan keterbatasan kondisi seperti itu, mari kita liat script MATLAB-nya dibawah ini,

clc, clear all
%%% DEFINISIKAN PARAMETER YG DIKEHENDAKI (BENTUK MODEL)
x_hole_1 = 0; x_hole_2 = 100; y_hole = 50;
y_batas = [20 30 50]; % batas lapisan. SA: WAJIB 3 batas model
v_lap = [1000 1200 1500]; % parameter kecepatan lapisan model
sou_y = [5 10]; % posisi kedalaman source. SA: WAJIB diatas batas 1
rec_y = [5 25 40]; % posisi kedalaman receiver. SA: WAJIB kondisi
underdetermined
n_ray = length(sou_y) * length(rec_y);
fprintf('Jumlah ray adalah %d n',n_ray);

%%% FUNGSI TAMPILAN MODEL GEOLOGI
figure (1)
plot_model( x_hole_1,x_hole_2,y_hole,y_batas,v_lap,sou_y,rec_y );

%%% FUNGSI SKEMA GRID DAN SHOOT
figure (2)
plot_grid_shoot( x_hole_1,x_hole_2,y_hole,y_batas,sou_y,rec_y );

%%% FUNGSI HITUNG TIME MODEL (DIRECT)
[ pan_ray_total,d,G ] = dt_forward(
x_hole_1,x_hole_2,y_batas,v_lap,sou_y,rec_y );

%%% FUNGSI INVERSI KECEPATAN LINIER BERBOBOT
[ v0_linier,dv_linier,v_linier ] = inversi_linier(
d,n_ray,sou_y,rec_y,pan_ray_total,G );

%%% DEFINISIKAN PARAMETER OPERASI SA
T = 10.0; % temperatur awal
T_stop = 0.02; % temperatur berhenti
alpha = 0.98;
iter_max = 1000;
T_iter_max = 100; % batas maksimal jumalh iterasi dalam satu nilai T
solusi_iter_max = 30; % batas maksimal penerimaan solusi sebelum T diubah
k = 1; % konstanta
T_iter = 0; % nilai iterasi awal untuk temperatur
solusi_iter = 0; % nilai iterasi pencarian (penerimaan) solusi awal
iter = 1;
konvergensi = 0;

%%% PARAMETER NILAI SOLUSI AWAL --> TITIK AWAL
n = 1; % indeks source
m = 3; % indeks receiver
i = 1; % indeks sudut
% Inisiasi sudut tembakan dari source ke-n ke receiver ke-m
sudut_tembak = 80;
teta = sudut_tembak;
[ selisih,T1x,T2x,T3x,T1y,T2y,T3y ] = ray_tracing_snell( x_hole_1, ...
    x_hole_2,y_batas,sou_y,rec_y,teta,v_linier,n,m );
dE = selisih;
dE_paling_awal = selisih;
% Mendefinisikan solusi terbaik
sudut_tembak_terbaik = sudut_tembak;
dE_terkecil = dE;
% Setting display grafik selisih tiap iterasi
figure(123); hold on;
title('Kurva Pencarian Sudut Tembak');
xlabel('Iterasi'); ylabel('Nilai Selisih Titik Akhir (dE)');

%%% MULAI PROGRAM
while konvergensi == 0 && iter <= iter_max
    % Men-generate sudut_tembak baru dengan bilangan random distribusi
    % Gauss
    sudut_tembak_baru = sudut_tembak + (1-(2*rand(1)));
    % Menghitung dE_baru dari sudut_tembak_baru
    teta = sudut_tembak_baru;
    [ selisih,T1x,T2x,T3x,T1y,T2y,T3y ] = ray_tracing_snell( x_hole_1, ...
    x_hole_2,y_batas,sou_y,rec_y,teta,v_linier,n,m );
    dE_baru = selisih; % @#$% user-defined

    % Optimisasi
    % Melihat penerimaan solusi/selisih baru
    if dE_baru <= dE
       % Backup data lama sebelum di-update
       dE_lama = dE;
       sudut_tembak_lama = sudut_tembak;
       % Update
       dE = dE_baru; % Penerimaan solusi
       sudut_tembak = sudut_tembak_baru; % Penerimaan solusi
       solusi_iter = solusi_iter + 1;
       % Plot data selisih untuk iterasi ke-iter
       figure(123); plot(iter,dE,'b.','MarkerSize',20);
       plot_ray_tracing( x_hole_1,sou_y,T1x,T2x,T3x,T1y,T2y,T3y,n );

       % Mengecek solusi terbaik
       if dE_baru <= dE_terkecil
          dE_terkecil = dE_baru;
          sudut_tembak_terbaik = sudut_tembak_baru;
          % Plot data selisih untuk iterasi ke-iter
          figure(123); plot(iter,dE,'go','MarkerSize',10);
       end

    elseif exp((-dE_baru+dE)/(k*T)) > rand(1) % Probabilitas Boltzmann
           % Back up data lama sebelum di-update
           dE_lama = dE;
           sudut_tembak_lama = sudut_tembak;
           % Update
           dE = dE_baru; % Penerimaan solusi
           sudut_tembak = sudut_tembak_baru; % Penerimaan solusi
           solusi_iter = solusi_iter + 1;
           % Plot data selisih untuk iterasi ke-iter
           figure(123); plot(iter,dE,'k.','MarkerSize',20);
           plot_ray_tracing( x_hole_1,sou_y,T1x,T2x,T3x,T1y,T2y,T3y,n );

    else
           % Plot data selisih untuk iterasi ke-iter
           figure(123); plot(iter,dE,'rx','MarkerSize',10);
end
     pause(0.01);
     % Update parameter iterasi program
     T_iter = T_iter + 1;
     iter = iter + 1;
     % Melihat dan melakukan perubahan fungsi temperatur (T)
     if T_iter >= T_iter_max || solusi_iter >= solusi_iter_max
         T = alpha*T;
         figure (3); hold on;
         plot(iter,T,'--rs','LineWidth',2,...
                 'MarkerEdgeColor','k',...
                 'MarkerFaceColor','g',...
                 'MarkerSize',10)
         title('Kurva Penurunan Temperatur');
         xlabel('Iterasi'); ylabel('Temperatur');
         T_iter = 0;
         solusi_iter = 0;
         dE = dE_terkecil;
         sudut_tembak = sudut_tembak_terbaik;
         % Plot nilai temperaturnya
         figure(123); plot(iter,dE,'ks-');
         line([iter iter],[dE dE + 1],'Color','k');
         text(iter,dE + 1,num2str(T),'Rotation',90);
     end
     % Parameter kriteria berhenti karena perubahan penurunan temperatur
     % karena fungsi iterasi
     if T < T_stop
         konvergensi = 1;
     end
end
%%% AKHIR PROGRAM

% Menampilkan hasil iterasi terbaik
fprintf('The best solution is sudut_tembak_terbaik= %6.4f n and
dE_terkecil= %6.4fn',sudut_tembak_terbaik, dE_terkecil);
% Plot raytracing dengan sudut tembak dan selisih terbaik
teta = sudut_tembak_terbaik;
    [ selisih,T1x,T2x,T3x,T1y,T2y,T3y ] = ray_tracing_snell( x_hole_1, ...
    x_hole_2,y_batas,sou_y,rec_y,teta,v_linier,n,m );
figure (2)
hold all
line([x_hole_1 T1x],[sou_y(n) T1y], ...
        'Color','g','LineStyle','-','LineWidth',2)
line([T1x T2x],[T1y T2y], ...
        'Color','g','LineStyle','-','LineWidth',2)
line([T2x T3x],[T2y T3y], ...
        'Color','g','LineStyle','-','LineWidth',2)



Pada script diatas saya memasukan beberapa function script dengan tujuan untuk menghemat
tampilan line dan juga diharapkan dapat lebih mempercepat proses hasil dikarenakan banyaknya
looping yang digunakan untuk menjalankan program diatas. Berikut detail script dari semua function
script yang ada diatas,
1. Fungsi untuk membuat tampilan model geologi yang diinisiasikan

function [ PM ] = plot_model(
x_hole_1,x_hole_2,y_hole,y_batas,v_lap,sou_y,rec_y )
%%% TAMPILAN MODEL GEOLOGI
dgrid=0.05;
[x_lap,y_lap] = meshgrid(0:dgrid:x_hole_2,0:dgrid:y_hole);
kec_grid = zeros(size(x_lap));
kec_grid(1:(y_batas(1)/dgrid),:) = v_lap(1);
kec_grid((y_batas(1)/dgrid)+1:(y_batas(2)/dgrid),:) = v_lap(2);
kec_grid((y_batas(2)/dgrid)+1:(y_batas(3)/dgrid)+1,:) = v_lap(3);

contourf(x_lap,y_lap,kec_grid)
hold on
plot(x_hole_2,rec_y,'v','MarkerEdgeColor','k',...
        'MarkerFaceColor','y',...
        'MarkerSize',6)
hold on
plot(x_hole_1,sou_y,'p','MarkerEdgeColor','k',...
        'MarkerFaceColor','g',...
        'MarkerSize',10)
colormap(flipud(hot)); colorbar; set(gca,'ydir','reverse')
xlabel('Koordinat X (m)'); ylabel('Kedalaman (m)');
title('Tomography Cross-Hole')
end

2. Fungsi untuk menampilkan skema grid dan ray tracing shooting method-nya

function [ PGS ] = plot_grid_shoot(
x_hole_1,x_hole_2,y_hole,y_batas,sou_y,rec_y )
%%% TAMPILAN SKEMA GRID DAN SHOOT
%%% plot direct ray
dgrid=5; jgrid=(x_hole_2/dgrid); jgrid2=(y_hole/dgrid);
%for i=1:length(sou_y)
    %for j=1:length(rec_y)
    %    line([x_hole_1 x_hole_2],[sou_y(i) rec_y(j)], ...
    %    'Color','b','LineStyle','-','LineWidth',1.2)
    %end
%end
hold all
%%% plot garis batas lapisan
for i=1:length(y_batas)-1
    line([x_hole_1 x_hole_2],[y_batas(i) y_batas(i)], ...
        'Color','r','LineStyle','-','LineWidth',2)
end
%%% parameterisasi blok
for i=1:jgrid-1
    line([i*dgrid i*dgrid],[0 y_hole], ...
        'Color','k','LineStyle','--')
end
for i=1:jgrid2-1
    line([x_hole_1 x_hole_2],[i*dgrid i*dgrid], ...
        'Color','k','LineStyle','--')
end
%%% plot titik source dan receiver
plot(x_hole_2,rec_y,'v','MarkerEdgeColor','k',...
        'MarkerFaceColor','y',...
        'MarkerSize',10)
plot(x_hole_1,sou_y,'p','MarkerEdgeColor','k',...
        'MarkerFaceColor','g',...
        'MarkerSize',10)
text(x_hole_1,sou_y(1),'SOURCE 1 rightarrow
','HorizontalAlignment','right')
text(x_hole_2,rec_y(1),'   leftarrow RECEIVER
1','HorizontalAlignment','left')
text(x_hole_2,y_batas(1),'   leftarrow BATAS LAP
1/2','HorizontalAlignment','left')
text(x_hole_2,y_batas(2),'   leftarrow BATAS LAP
2/3','HorizontalAlignment','left')
xlim([0 x_hole_2]); ylim([0 y_hole])
set(gca,'ydir','reverse')
xlabel('Koordinat X (m)'); ylabel('Kedalaman (m)');
title('Tomography Cross-Hole')
end

3. Fungsi untuk menghitung forward modeling dalam mendapatkan data waktu dari model
   kecepatan awal yang diinisiasikan

function [ pan_ray_total,d,G ] = dt_forward(
x_hole_1,x_hole_2,y_batas,v_lap,sou_y,rec_y )
%%% FUNGSI HITUNG TIME MODEL (DIRECT)
%%% menghitung panjang direct ray dari source ke receiver
n_ray = length(sou_y) * length(rec_y);
pan_ray_total = zeros(length(sou_y),length(rec_y));
for i = 1:length(sou_y)
    for j = 1:length(rec_y)
        pan_ray_total(i,j) = sqrt((x_hole_1-x_hole_2).^2 + ...
            (sou_y(i)-rec_y(j)).^2);
    end
end
%%% menghitung sudut tembak ray dari titik shoot
sudut_tembak = zeros(length(rec_y),length(sou_y));
for i = 1:length(sou_y)
    for j = 1:length(rec_y)
        sudut_tembak(i,j) = acosd((x_hole_2/pan_ray_total(i,j)));
    end
end
%%% menghitung panjang tiap segmen ray yang melewati tiap blok
k = 1;
for i = 1:length(sou_y)
for j = 1:length(rec_y)
%%% dasar pembutaan syntax memakai simulasi shooting dari source 1
tikpot_bts1 = ((y_batas(1) - sou_y(i))/tand(sudut_tembak(i,j))) + x_hole_1;
pan_ray_bag(k,1) = sqrt((x_hole_1-tikpot_bts1).^2 + ...
            (sou_y(i)-y_batas(1)).^2);
tikpot_bts2 = ((y_batas(2) - sou_y(i))/tand(sudut_tembak(i,j))) + x_hole_1;
pan_ray_bag(k,2) = sqrt((tikpot_bts1-tikpot_bts2).^2 + ...
            (y_batas(1)-y_batas(2)).^2);
pan_ray_bag(k,3) = pan_ray_total(i,j) -
(pan_ray_bag(k,1)+pan_ray_bag(k,2));
%%% loop hubungan kondisi posisi source dan receiver
if (sou_y(i) < y_batas(1))&&(rec_y(j) < y_batas(1))
    %%% direct ray di blok 1
    pan_ray_bag(k,1) = pan_ray_total(i,j);
    pan_ray_bag(k,2) = 0;
    pan_ray_bag(k,3) = 0;
elseif (sou_y(i) < y_batas(1))&&(rec_y(j) > y_batas(1))&& ...
        (rec_y(j) < y_batas(2))
    pan_ray_bag(k,2) = pan_ray_total(i,j) - pan_ray_bag(k,1);
    pan_ray_bag(k,3) = pan_ray_total(i,j) -
(pan_ray_bag(k,1)+pan_ray_bag(k,2));
elseif (sou_y(i) > y_batas(1))&&(sou_y(i) < y_batas(2))&& ...
        (rec_y(j) < y_batas(1))
    pan_ray_bag(k,2) = pan_ray_bag(k,1);
    pan_ray_bag(k,1) = pan_ray_total(i,j) - pan_ray_bag(k,1);
pan_ray_bag(k,3) = pan_ray_total(i,j) -
(pan_ray_bag(k,1)+pan_ray_bag(k,2));
elseif (sou_y(i) > y_batas(1))&&(sou_y(i) < y_batas(2))&& ...
        (rec_y(j) > y_batas(1))&&(rec_y(j) < y_batas(2))
    %%% direct ray di blok 2
    pan_ray_bag(k,1) = 0;
    pan_ray_bag(k,2) = pan_ray_total(i,j);
    pan_ray_bag(k,3) = 0;
elseif (sou_y(i) > y_batas(1))&&(sou_y(i) < y_batas(2))&& ...
        (rec_y(j) > y_batas(2))
    pan_ray_bag(k,1) = 0;
    pan_ray_bag(k,2) = sqrt((x_hole_1-tikpot_bts2).^2 + ...
        (sou_y(i)-y_batas(2)).^2);
    pan_ray_bag(k,3) = pan_ray_total(i,j) -
(pan_ray_bag(k,1)+pan_ray_bag(k,2));
elseif (sou_y(i) > y_batas(2))&&(rec_y(j) < y_batas(1))
    pan_ray_bag(k,3) = sqrt((x_hole_1-tikpot_bts2).^2 + ...
            (sou_y(i)-y_batas(2)).^2);
    pan_ray_bag(k,2) = pan_ray_bag(k,1) - pan_ray_bag(k,3);
    pan_ray_bag(k,1) = pan_ray_total(i,j) -
abs(pan_ray_bag(k,2)+pan_ray_bag(k,3));
elseif (sou_y(i) > y_batas(2))&&(rec_y(j) > y_batas(1))&& ...
        (rec_y(j) < y_batas(2))
    pan_ray_bag(k,1) = 0;
    pan_ray_bag(k,2) = sqrt((x_hole_1-tikpot_bts2).^2 + ...
            (sou_y(i)-y_batas(2)).^2);
    pan_ray_bag(k,3) = pan_ray_total(i,j) -
(pan_ray_bag(k,1)+pan_ray_bag(k,2));
elseif (sou_y(i) > y_batas(2))&&(rec_y(j) > y_batas(2))
    %%% direct ray di blok 3
    pan_ray_bag(k,1) = 0;
    pan_ray_bag(k,2) = 0;
    pan_ray_bag(k,3) = pan_ray_total(i,j) -
(pan_ray_bag(k,1)+pan_ray_bag(k,2));
end
k = 1 + k;
end
end

%%% menghitung matriks forward
dt_cal = pan_ray_bag * (1./v_lap');
for l = 1:length(sou_y)
    d(l,:) = dt_cal((length(rec_y)*(l-1))+1:length(rec_y)*l,1);
end
G = pan_ray_bag;
end

4. Fungsi untuk mendapatkan kecepatan lapisan dengan metoda inversi linier berbobot

function [ v0_linier,dv_linier,v_linier ] = inversi_linier( ...
    d,n_ray,sou_y,rec_y,pan_ray_total,G )
%%% FUNGSI INVERSI KECEPATAN LINIER BERBOBOT
%%% menghitung dt observasi linier
%%% dari time model yang didapat sebelumnya (d) tambahkan delta yg sangat
%%% kecil untuk melihat apakah bisa kembali atau tidak kecepatannya
%a = max(d);
%b = min(d);
%dt_noise = rand(1)*(a-b)*0.1;
t_obs = d; %+ dt_noise;
%%% membuat kecepatan awal model linier
vsem = zeros(length(sou_y),length(rec_y));
for i = 1:length(sou_y)
    for j = 1:length(rec_y)
    vsem(i,j) = pan_ray_total(i,j) ./ t_obs(i,j);
    end
end
v0_linier = sum(sum(vsem)) ./ n_ray;
t_cal_linier = pan_ray_total ./ v0_linier;

%%% menghitung delta waktu (observasi - kalkulasi)
dt_linier = t_obs - t_cal_linier;
for l = 1:length(sou_y)
    dt((length(rec_y)*(l-1))+1:length(rec_y)*l,1) = dt_linier(l,:);
end

%%% membuat matriks kernel
G_linier = G;

%%% memebuat bobot We berdasarkan misfit data
misfit = dt.^2;
We = (misfit).^-1;

%%% melakukan inversi untuk mendapatkan delta S
%m_linier = (inv(G_linier'*G_linier))*G_linier'*dt;
m_linier = (inv(G_linier'*diag(We)*G_linier))*G_linier'*diag(We)*dt;

%%% mencari kecepatan tiap blok dengan asumsi delta V >>
dv_linier = zeros(length(m_linier),1);
v_linier = zeros(length(m_linier),1);
for i = 1:length(m_linier)
    dv_linier(i) = (-1*m_linier(i)*v0_linier^2) / (1 +
m_linier(i)*v0_linier);
    v_linier(i) = v0_linier + dv_linier(i);
end
end

5. Fungsi untuk melaukan ray tracing dengan konsep Hk. Snell dengan sudut tembak yang telah
   didefinisikan sebelumnya sehingga menghasilkan informasi akhir selisih jarak dengan posisi
   receiver yang sebenarnya

function [ selisih,T1x,T2x,T3x,T1y,T2y,T3y ] = ray_tracing_snell( x_hole_1,
...
    x_hole_2,y_batas,sou_y,rec_y,teta,v_linier,n,m );
%%% FUNGSI SHOOTING METHOD DENGAN HK. SNELL
%%% mendefinisikan variabel yang dipakai untuk SHOOTING SOURCE KE-n
sudut = (90 - teta);
v_snell = v_linier;
ray_shoot = zeros(1,3);
T1x = 0; T2x = 0; T3x = 0;
T1y = 0; T2y = 0; T3y = 0;
while T3x == 0
%%% menghitung ray tracing pada SHOOT SOURCE ke-n (Prinsip Phytagoras)
%%% menghitung panjang tiap segmen ray yang melewati tiap blok
%%% menghitung ray shooting pada kotak pertama
a1 = (y_batas(1) - sou_y(n));
c1 = a1 / cosd(sudut);
b1 = c1 * sind(sudut);
T1x = x_hole_1 + b1;
T1y = sou_y(n) + a1;
grad = (T1y - sou_y(n)) / (T1x - x_hole_1);
%%% menghitung sudut pergi/sudut datang ray pada kotak 2 dengan Hk. Snell
sudut2 = asind((v_snell(2) * sind(sudut)) / v_snell(1));
if abs(sudut2) > 90
   sudut2 = 90;
   if T1x > x_hole_2
      T1x = x_hole_2;
      T1y = sou_y(n) + (grad*T1x);
   end
   T2x = T1x;
   T2y = T1y;
   T3x = T1x;
   T3y = T1y; break
end

%%% menghitung ray shooting pada kotak kedua
a2 = (y_batas(2) - T1y);
c2 = abs(a2 / cosd(sudut2));
b2 = abs(c2 * sind(sudut2));
T2x = T1x + b2;
T2y = T1y + a2;
grad2 = (T2y - T1y) / (T2x - T1x);
%%% menghitung sudut pergi/sudut datang ray pada kotak 3 dengan Hk. Snell
sudut3 = asind((v_snell(3) * sind(sudut2) / v_snell(2)));
if abs(sudut3) > 90
   sudut3 = 90;
   if T2x > x_hole_2
      T2x = x_hole_2;
      T2y = T1y + (grad2*(T2x - T1x));
   end
   T3x = T2x;
   T3y = T2y; break
end

%%% menghitung ray shooting pada kotak ketiga
b3 = (x_hole_2 - T2x);
c3 = abs(b3 / sind(sudut3));
a3 = abs(c3 * cosd(sudut3));
T3x = T2x + b3;
T3y = T2y + a3;

ray_shoot(1,1)=(((T1x-x_hole_1).^2 + (T1y-sou_y(n)).^2).^0.5);
ray_shoot(1,2)=(((T2x-T1x).^2 + (T2y-T1y).^2).^0.5);
ray_shoot(1,3)=(((T3x-T2x).^2 + (T3y-T2y).^2).^0.5);
%%% menghitung selisih titik akhir (jarak ke receiver)
end
selisih = abs(T3y - rec_y(m));
end

6. Fungsi untuk memplot ray tracing dengan berbagai sudut tembak

function [ PRT ] = plot_ray_tracing(
x_hole_1,sou_y,T1x,T2x,T3x,T1y,T2y,T3y,n )
%%% FUNGSI PLOT GRAFIK 2D DENGAN RAY SHOOTING
%%% plot raytracing S-R dengan sudut tembak tertentu
figure(2)
hold all
line([x_hole_1 T1x],[sou_y(n) T1y], ...
        'Color','m','LineStyle','-','LineWidth',1)
line([T1x T2x],[T1y T2y], ...
        'Color','m','LineStyle','-','LineWidth',1)
line([T2x T3x],[T2y T3y], ...
        'Color','m','LineStyle','-','LineWidth',1)
end



HASIL
Dari script diatas hasil atau output yang saya dapatkan adalah sebagai berikut, untuk model awal
geologi output tampilan ynag dihasilkan adalah sebagaimana yang ditunjukan oleh gambar berikut,




Dari model diatas dicoba dilakukan tomografi dengan menggunakan straight raypath (jalur sinar
lurus) untuk nantinya digunakan dalam melakukan forward modeling. Adapun output gambar dari
penembakan jalur sinar lurusnya adalah sebagai berikut,
Dari hasil ray tracing dengan straight raypath yang ditunjukan oleh gambar diatas, saya
mendapatkan panjang sinar tiap kotak kecepatan ynag kemudian saya jadikan data untuk matriks
kernel lalu dengan kecepatan model yang saya punya, saya coba dapatnya waktu kalkulasinya. Dari
waktu kalkulasi dan ditambah sedikit noise, dengan metoda inversi linier berbobot saya coba balikan
lagi untuk mendapatkan parameter model kecepatan untuk melihat apakan dengan metoda inversi
ini akan dapat memberikan hasil pencarian parameter yang mendekati atau sama dengan parameter
model ynag diinisiasikan.

Ternyata memang setelah dialkukan inversi, saya berhasil kembali mendapatkan kecepatan lapisan
yang sangat mirip dengan model kecepatan lapisan ynag didefinisikan sebelumnya yaitu ditunjukan
oleh gambar dibawah ini,




Kemudian kecepatan yang saya dapatkan tersebut akan saya gunakan untuk melakukan proses ray
tracing Hk. Snell dengan metoda SA. Sebagai contoh saya ambil source ke-1 dan receiver ke-3 serta
sudut tembak awal 80° dalam menjalankan program SA tersebut. Adapun hasil yang diberikan
dengan parameter yang telah didefinisikan sebelumnya adalah sebagaimana ynag ditunjukan oleh
gambar dibawah ini,




Gambar diatas menunjuka nilai selisih titik akhir ray dengan pencarian SA degan titik akhir
sebenarnya (posisi receiver 3) terhadap jumalh iterasi ynag dilakukan. Terlihat dari kurva diatas
bahwa metoda SA “menuntun” data untuk semakin memeberikan selisih yang minimum, dimana
walaupun memang datanya berfluktuasi namun secara garis besar trend yang diberikan menunjukan
bahwa semakin tinggi iterasinya, maka selisih yang dihasilkan semakin kecil/minimum. Hal ini sangat
jelas terlihat pada iterasi 1-250. Selebihnya data bergerak terus berfluktuasi sesuai dengan fungsi
penambahan parameter model sudut tembaknya sehingga hasil selisihnya pun sangat bervariasi
namun trend datarnya tetap sama. Fluktuasi yang terlihat sangat terarah ini saya analisa disebabkan
memang oleh algoritma dari SA sendiri dimana ada Probabilitas Boltzmann yang menyeleksi data
selisih mana yang bisa ditolak dan mana yang tidak bisa ditolak. Selain itu dengan SA juga saya dapat
mengetahui sudut tembak paling baik untuk menghasilkan selisih yang paling kecil.

Jika kurva tersebut lebih di-zoom maka akan tampak tampilan sebagai berikut,




       Ttitik biru merupaka titik dengan nilai selisih yang diterima karena nilainya lebih kecil
        dibandingkan dengan nilai selisih pada iterasi sebelumnya.
       Titik biru dengan lingkaran hijau diluarnya merupakan titik dengan nilai selisih terbaik sejauh
        itu, sejauh iterasi yang sudah berjalan.
       Ttitik hitam menunjukan titik dengan nilai selisih yang diterima juga namun dalam hal ini
        nilai selisihnya tidak lebih kecil dibandingkan dengan nilai selisih titik pada iterasi
        sebelumnya, tetapi dengan “keberuntungan” pada probabilitas P(∆E) yang lebih besar
        sehingga bilangan random akan jatuh pada posisi yang lebih kecil sehingga memungkinkan
        solusi ini untuk diterima.
       Sedangkan tanda silang merah menunjukan titik dengan nilai selisih yang ditolak karena
        selisihnya tidak lebih kecil dibandingan selisih pada titik iterasi sebelumnya dan juga ia
        memiliki probabilitas P(∆E) yang lebih kecil sehingga memungkinkan solusi untuk ditolak.

Dalam probalitas Boltzman terdapat parameter temperatur dan itu akan terus berubah seiring
dengan semakin banyaknya iterasi yang dijalankan dalam melakukan penerimaan data/solusi.
Adapun grafik kurva penurunan suhu hingga iterasi ke-1000 yang saya lakukan terhadap program
diatas adalah sebagai berikut,
Kemudian sebagai hasil akhir saya mendapatkan sudut tembak terbaik dan selisih yang paling kecil
dari 1000 iterasi adalah sebagai berikut,




Dengan output untuk penggambaran ray tracing yang dilakukan untuk berbagai sudut tembak
ditunjukan oleh gambar dibawah ini, (ray tracing yang paling baik ditunjukan oleh garis sinar yang
berwarna hijau)
Kesimpulan
Kesimpulan yang saya dapat adalah bahwa metoda inversi sangat membatu dalam menyelesaikan
permasalahan siesmik tomografi terutama untuk permodelannya dan juga ternyata berdasarkan dari
hasil percobaan, metoda Simulated Annealing berkerja dengan sangat baik dalam membantu
permasalahan raytracing shooting method untuk mencari sudut tembak terbaik. Metoda SA yang
saya lakukan pada kasus tomografi diatas berhasil memeberikan solusi sudut tembak terbaik yang
mana memberikan selisih titik akhir-receiver terkecil pula. Dilihat dari kemampuannya dalam
menentukan nilai minimum global dari sebuah fungsi, permasalahan, ataupun informasi dengan
sangat baik maka saya berpendapat metoda SA ini akan dapat digunakan untuk memecahkan
persoalan yang lain yang menginginkan mencari titik solusi minimum namun mempunyai bentuk
fungsi yang kompleks.


Ucapan Terimakasih
Saya sangat berterima kasih kepada buku kuliah Pengantar Permodelan Inversi Geofisika (Dr. Hendra
Grandis) dan slide kuliah Geotomografi (Dr. Andri Dian Nugraha) atas sumber puastaka dan inspirasi
dalam pembuatan laporan ini. Juga kepada Dr. Hendra Grandis sebagai dosen pembimbing mata
kuliah Inversi Geofisika atas bimbingan dan pengetahuan yang diberikan.

Más contenido relacionado

La actualidad más candente

Pengolahan Data Refraksi KARSAM 2012
Pengolahan Data Refraksi KARSAM 2012Pengolahan Data Refraksi KARSAM 2012
Pengolahan Data Refraksi KARSAM 2012Fajar Perdana
 
Pengolahan Data Magnetik KARSAM 2012
Pengolahan Data Magnetik KARSAM 2012Pengolahan Data Magnetik KARSAM 2012
Pengolahan Data Magnetik KARSAM 2012Fajar Perdana
 
Analisis data geofisika
Analisis data geofisikaAnalisis data geofisika
Analisis data geofisikavidya amalia
 
Pengolahan Data GPR - REFLEXW
Pengolahan Data GPR - REFLEXWPengolahan Data GPR - REFLEXW
Pengolahan Data GPR - REFLEXWDery Marsan
 
langkah - langkah picking gelombang p dan s dengan software seisgram
langkah - langkah picking gelombang p dan s dengan software seisgramlangkah - langkah picking gelombang p dan s dengan software seisgram
langkah - langkah picking gelombang p dan s dengan software seisgramtwin aji kusumagiani
 
Metode gridding-pada-software-surfer
Metode gridding-pada-software-surferMetode gridding-pada-software-surfer
Metode gridding-pada-software-surferFitra Rayhan Akbar
 
Metode eksplorasi dengan gravitasi
Metode eksplorasi dengan gravitasiMetode eksplorasi dengan gravitasi
Metode eksplorasi dengan gravitasiRidwan Tedjokusumo
 
MATERI 5 HIDROGEOLOGI (Manajemen Pertambangan & Energi) STEM Akamigas
MATERI 5 HIDROGEOLOGI (Manajemen Pertambangan & Energi) STEM AkamigasMATERI 5 HIDROGEOLOGI (Manajemen Pertambangan & Energi) STEM Akamigas
MATERI 5 HIDROGEOLOGI (Manajemen Pertambangan & Energi) STEM AkamigasYOHANIS SAHABAT
 
Analisis VES Resistivity dengan IP2WIN
Analisis VES Resistivity dengan IP2WINAnalisis VES Resistivity dengan IP2WIN
Analisis VES Resistivity dengan IP2WINDery Marsan
 
Pendugaan air tanah atau batuan dengan metode seismik
Pendugaan air tanah atau batuan dengan metode seismikPendugaan air tanah atau batuan dengan metode seismik
Pendugaan air tanah atau batuan dengan metode seismikOktavia Triana
 
Pengolahan data Gravity
Pengolahan data GravityPengolahan data Gravity
Pengolahan data GravityKevin Pratama
 
Pengolahan Data Resistivity dengan RES2DINV
Pengolahan Data Resistivity dengan RES2DINVPengolahan Data Resistivity dengan RES2DINV
Pengolahan Data Resistivity dengan RES2DINVDery Marsan
 
Modul 4 pengolahan awal data gravitasi
Modul 4   pengolahan awal data gravitasiModul 4   pengolahan awal data gravitasi
Modul 4 pengolahan awal data gravitasiFitra Akbar
 
Analisis Data Radiosonde dengan Aerological Diagram
Analisis Data Radiosonde dengan Aerological DiagramAnalisis Data Radiosonde dengan Aerological Diagram
Analisis Data Radiosonde dengan Aerological DiagramAndi Muttaqin
 
Laporan peta geologi
Laporan peta geologiLaporan peta geologi
Laporan peta geologi4211410001
 

La actualidad más candente (20)

Pengolahan Data Refraksi KARSAM 2012
Pengolahan Data Refraksi KARSAM 2012Pengolahan Data Refraksi KARSAM 2012
Pengolahan Data Refraksi KARSAM 2012
 
Pengolahan Data Magnetik KARSAM 2012
Pengolahan Data Magnetik KARSAM 2012Pengolahan Data Magnetik KARSAM 2012
Pengolahan Data Magnetik KARSAM 2012
 
Analisis data geofisika
Analisis data geofisikaAnalisis data geofisika
Analisis data geofisika
 
Pengolahan Data GPR - REFLEXW
Pengolahan Data GPR - REFLEXWPengolahan Data GPR - REFLEXW
Pengolahan Data GPR - REFLEXW
 
langkah - langkah picking gelombang p dan s dengan software seisgram
langkah - langkah picking gelombang p dan s dengan software seisgramlangkah - langkah picking gelombang p dan s dengan software seisgram
langkah - langkah picking gelombang p dan s dengan software seisgram
 
Geolistrik 1
Geolistrik 1Geolistrik 1
Geolistrik 1
 
Metode gridding-pada-software-surfer
Metode gridding-pada-software-surferMetode gridding-pada-software-surfer
Metode gridding-pada-software-surfer
 
Metode eksplorasi dengan gravitasi
Metode eksplorasi dengan gravitasiMetode eksplorasi dengan gravitasi
Metode eksplorasi dengan gravitasi
 
Metode gravity
Metode gravityMetode gravity
Metode gravity
 
MATERI 5 HIDROGEOLOGI (Manajemen Pertambangan & Energi) STEM Akamigas
MATERI 5 HIDROGEOLOGI (Manajemen Pertambangan & Energi) STEM AkamigasMATERI 5 HIDROGEOLOGI (Manajemen Pertambangan & Energi) STEM Akamigas
MATERI 5 HIDROGEOLOGI (Manajemen Pertambangan & Energi) STEM Akamigas
 
Analisis VES Resistivity dengan IP2WIN
Analisis VES Resistivity dengan IP2WINAnalisis VES Resistivity dengan IP2WIN
Analisis VES Resistivity dengan IP2WIN
 
Geolistrik ppt
Geolistrik pptGeolistrik ppt
Geolistrik ppt
 
Pendugaan air tanah atau batuan dengan metode seismik
Pendugaan air tanah atau batuan dengan metode seismikPendugaan air tanah atau batuan dengan metode seismik
Pendugaan air tanah atau batuan dengan metode seismik
 
Pengolahan data Gravity
Pengolahan data GravityPengolahan data Gravity
Pengolahan data Gravity
 
Pengolahan Data Resistivity dengan RES2DINV
Pengolahan Data Resistivity dengan RES2DINVPengolahan Data Resistivity dengan RES2DINV
Pengolahan Data Resistivity dengan RES2DINV
 
3 pumping test
3 pumping test3 pumping test
3 pumping test
 
Modul 4 pengolahan awal data gravitasi
Modul 4   pengolahan awal data gravitasiModul 4   pengolahan awal data gravitasi
Modul 4 pengolahan awal data gravitasi
 
Sesar atau fault
Sesar atau faultSesar atau fault
Sesar atau fault
 
Analisis Data Radiosonde dengan Aerological Diagram
Analisis Data Radiosonde dengan Aerological DiagramAnalisis Data Radiosonde dengan Aerological Diagram
Analisis Data Radiosonde dengan Aerological Diagram
 
Laporan peta geologi
Laporan peta geologiLaporan peta geologi
Laporan peta geologi
 

Destacado

Eliptic Partial DIfferential Equation
Eliptic Partial DIfferential EquationEliptic Partial DIfferential Equation
Eliptic Partial DIfferential EquationFajar Perdana
 
Jurnal rekayasa metode_geolistrik
Jurnal rekayasa metode_geolistrikJurnal rekayasa metode_geolistrik
Jurnal rekayasa metode_geolistrikEddy Ibrahim
 
Tugas Pemrograman Komputer dengan Aplikasi Matlab
Tugas Pemrograman Komputer dengan Aplikasi MatlabTugas Pemrograman Komputer dengan Aplikasi Matlab
Tugas Pemrograman Komputer dengan Aplikasi MatlabKhoirul Ummah
 
Bab 5 sistem kerangka non inersia
Bab 5 sistem kerangka non inersiaBab 5 sistem kerangka non inersia
Bab 5 sistem kerangka non inersiaSyaRi EL-nahLy
 
Modul Karsam 2013: Instruksi Penggunaan Ministing
Modul Karsam  2013: Instruksi Penggunaan MinistingModul Karsam  2013: Instruksi Penggunaan Ministing
Modul Karsam 2013: Instruksi Penggunaan MinistingFajar Perdana
 
Band Limited Impedance Inversion (BLIMP)
Band Limited Impedance Inversion (BLIMP)Band Limited Impedance Inversion (BLIMP)
Band Limited Impedance Inversion (BLIMP)Fajar Perdana
 
Pengolahan Data GPR KARSAM 2012
Pengolahan Data GPR KARSAM 2012Pengolahan Data GPR KARSAM 2012
Pengolahan Data GPR KARSAM 2012Fajar Perdana
 
Observasi geologi Karsam
Observasi geologi KarsamObservasi geologi Karsam
Observasi geologi KarsamFajar Perdana
 
Pengolahan Data Geolistrik KARSAM 2012
Pengolahan Data Geolistrik KARSAM 2012Pengolahan Data Geolistrik KARSAM 2012
Pengolahan Data Geolistrik KARSAM 2012Fajar Perdana
 
Gravity, Expl.ravity
 Gravity, Expl.ravity Gravity, Expl.ravity
Gravity, Expl.ravityahmadraza05
 

Destacado (14)

Eliptic Partial DIfferential Equation
Eliptic Partial DIfferential EquationEliptic Partial DIfferential Equation
Eliptic Partial DIfferential Equation
 
Proposal TA kid
Proposal TA kidProposal TA kid
Proposal TA kid
 
Jurnal rekayasa metode_geolistrik
Jurnal rekayasa metode_geolistrikJurnal rekayasa metode_geolistrik
Jurnal rekayasa metode_geolistrik
 
Tugas Pemrograman Komputer dengan Aplikasi Matlab
Tugas Pemrograman Komputer dengan Aplikasi MatlabTugas Pemrograman Komputer dengan Aplikasi Matlab
Tugas Pemrograman Komputer dengan Aplikasi Matlab
 
sistem banyak partikel
sistem banyak partikelsistem banyak partikel
sistem banyak partikel
 
Bab 5 sistem kerangka non inersia
Bab 5 sistem kerangka non inersiaBab 5 sistem kerangka non inersia
Bab 5 sistem kerangka non inersia
 
Modul Karsam 2013: Instruksi Penggunaan Ministing
Modul Karsam  2013: Instruksi Penggunaan MinistingModul Karsam  2013: Instruksi Penggunaan Ministing
Modul Karsam 2013: Instruksi Penggunaan Ministing
 
Band Limited Impedance Inversion (BLIMP)
Band Limited Impedance Inversion (BLIMP)Band Limited Impedance Inversion (BLIMP)
Band Limited Impedance Inversion (BLIMP)
 
1960 parasnis-1-28
1960 parasnis-1-281960 parasnis-1-28
1960 parasnis-1-28
 
Iterasi jacobi
Iterasi jacobiIterasi jacobi
Iterasi jacobi
 
Pengolahan Data GPR KARSAM 2012
Pengolahan Data GPR KARSAM 2012Pengolahan Data GPR KARSAM 2012
Pengolahan Data GPR KARSAM 2012
 
Observasi geologi Karsam
Observasi geologi KarsamObservasi geologi Karsam
Observasi geologi Karsam
 
Pengolahan Data Geolistrik KARSAM 2012
Pengolahan Data Geolistrik KARSAM 2012Pengolahan Data Geolistrik KARSAM 2012
Pengolahan Data Geolistrik KARSAM 2012
 
Gravity, Expl.ravity
 Gravity, Expl.ravity Gravity, Expl.ravity
Gravity, Expl.ravity
 

Similar a Penyelesaian Raytracing dengan Bantuan Inversi Simulated Annealing

Persamaan diferensial(differential equation
Persamaan diferensial(differential equationPersamaan diferensial(differential equation
Persamaan diferensial(differential equationartyudy
 
Momen inersia
Momen inersiaMomen inersia
Momen inersiaNia Rahma
 
Matematika Diskrit - 11 kompleksitas algoritma - 03
Matematika Diskrit - 11 kompleksitas algoritma - 03Matematika Diskrit - 11 kompleksitas algoritma - 03
Matematika Diskrit - 11 kompleksitas algoritma - 03KuliahKita
 
DETEKSI POLA SEBARAN TITIK SPASIAL SECARA REGULER MELALUI PENELUSURAN FUNGSI ...
DETEKSI POLA SEBARAN TITIK SPASIAL SECARA REGULER MELALUI PENELUSURAN FUNGSI ...DETEKSI POLA SEBARAN TITIK SPASIAL SECARA REGULER MELALUI PENELUSURAN FUNGSI ...
DETEKSI POLA SEBARAN TITIK SPASIAL SECARA REGULER MELALUI PENELUSURAN FUNGSI ...Repository Ipb
 
7 analog digital converter
7 analog digital converter7 analog digital converter
7 analog digital converterSimon Patabang
 
Interpolasi lagrange dan newton
Interpolasi lagrange dan newtonInterpolasi lagrange dan newton
Interpolasi lagrange dan newtonYuni Dwi Utami
 
Pengenalan dasar Sinyal.pptx
Pengenalan dasar Sinyal.pptxPengenalan dasar Sinyal.pptx
Pengenalan dasar Sinyal.pptxFeriRamadhan6
 
Model regresi-non-linear
Model regresi-non-linearModel regresi-non-linear
Model regresi-non-linearGifard Narut
 
Kalkulus diferensial integral
Kalkulus diferensial integralKalkulus diferensial integral
Kalkulus diferensial integraldwiprananto
 
Runtutan ( sequence )
Runtutan ( sequence )Runtutan ( sequence )
Runtutan ( sequence )ariesmaesya
 
001 konsep hitung_kuadrat_terkecil
001 konsep hitung_kuadrat_terkecil001 konsep hitung_kuadrat_terkecil
001 konsep hitung_kuadrat_terkecilleonardo onar
 
Makalah fisika terapan
Makalah fisika terapanMakalah fisika terapan
Makalah fisika terapanArief Nuryadi
 

Similar a Penyelesaian Raytracing dengan Bantuan Inversi Simulated Annealing (20)

Job4
Job4Job4
Job4
 
Persamaan diferensial(differential equation
Persamaan diferensial(differential equationPersamaan diferensial(differential equation
Persamaan diferensial(differential equation
 
Momen inersia
Momen inersiaMomen inersia
Momen inersia
 
Matlab 8
Matlab 8Matlab 8
Matlab 8
 
Fisika komputasi
Fisika komputasiFisika komputasi
Fisika komputasi
 
Fisika komputasi
Fisika komputasiFisika komputasi
Fisika komputasi
 
Fisika komputasi
Fisika komputasiFisika komputasi
Fisika komputasi
 
Persdif
PersdifPersdif
Persdif
 
Matematika Diskrit - 11 kompleksitas algoritma - 03
Matematika Diskrit - 11 kompleksitas algoritma - 03Matematika Diskrit - 11 kompleksitas algoritma - 03
Matematika Diskrit - 11 kompleksitas algoritma - 03
 
(FIXED) Decomposition and Smoothing Data Analysis
(FIXED) Decomposition and Smoothing Data Analysis(FIXED) Decomposition and Smoothing Data Analysis
(FIXED) Decomposition and Smoothing Data Analysis
 
DETEKSI POLA SEBARAN TITIK SPASIAL SECARA REGULER MELALUI PENELUSURAN FUNGSI ...
DETEKSI POLA SEBARAN TITIK SPASIAL SECARA REGULER MELALUI PENELUSURAN FUNGSI ...DETEKSI POLA SEBARAN TITIK SPASIAL SECARA REGULER MELALUI PENELUSURAN FUNGSI ...
DETEKSI POLA SEBARAN TITIK SPASIAL SECARA REGULER MELALUI PENELUSURAN FUNGSI ...
 
7 analog digital converter
7 analog digital converter7 analog digital converter
7 analog digital converter
 
Interpolasi lagrange dan newton
Interpolasi lagrange dan newtonInterpolasi lagrange dan newton
Interpolasi lagrange dan newton
 
Pengenalan dasar Sinyal.pptx
Pengenalan dasar Sinyal.pptxPengenalan dasar Sinyal.pptx
Pengenalan dasar Sinyal.pptx
 
3..pptx
3..pptx3..pptx
3..pptx
 
Model regresi-non-linear
Model regresi-non-linearModel regresi-non-linear
Model regresi-non-linear
 
Kalkulus diferensial integral
Kalkulus diferensial integralKalkulus diferensial integral
Kalkulus diferensial integral
 
Runtutan ( sequence )
Runtutan ( sequence )Runtutan ( sequence )
Runtutan ( sequence )
 
001 konsep hitung_kuadrat_terkecil
001 konsep hitung_kuadrat_terkecil001 konsep hitung_kuadrat_terkecil
001 konsep hitung_kuadrat_terkecil
 
Makalah fisika terapan
Makalah fisika terapanMakalah fisika terapan
Makalah fisika terapan
 

Penyelesaian Raytracing dengan Bantuan Inversi Simulated Annealing

  • 1. Pendahuluan Seismik tomografi merupakan sebuah metode geofisika untuk mengetahui kondisi bawah permukaan bumi berdasarkan data waktu tiba gelombang gempabumi (P dan S) yang terekam oleh peralatan seismik (seismometer) yang tersebar di atas permukaan bumi. Hasil pengolahan dan analisa gelombang tersebut akan memberikan gambaran struktur 3D interior bumi secara rinci. Dalam melakukan pengolahan data tomografi dan permodelannya dikenal adanya istilah inversi tomografi. Inversi tomografi sendiri merupakan tahapan dimana dari data travel time yang ada kita berusaha memprediksi dan menentukan parameter-parameter model dari model bawah permukaan bumi kita atau model inisiasi kita. Dalam proses inversi tomografi, salah satu poin penting yang tidak bisa dilepaskan adalah bagaimana kita menghitung travel time kalkulasi melalui model kecepatan yang ada. Untuk itu kita perlu untuk memprediksi jalur penjajakan sinar atau gelombang seismik yang melewati model yang di-inisiasikan, proses tersebut sering disebut ray tracing. Seperti yang sudah kita ketahui dari kuliah tentang Gelombang Dalam Geofisika bahwa gelombang mempunyai banyak sifat dalam penjalarannya, dan itu mempengaruhi juga terhadap jenis ray tracing dalam inversi tomografi ini. Adapun beberapa jenis metoda Ray Tracing yang biasa digunakan di inversi tomografi :  Shooting methods [Snell’s Law, Born & Wolf, 1980]  Bending methods [Fermat’s Principle, Fermat, 1891]  Full wave equation methods [Huygen’s Principle, Huygen’s,1690] Terinspirasi dari hal tersebut, dalam tugas besar ini saya mencoba menerapkan metoda inversi geofisika dalam permasalahan inversi geofisika khususnya untuk ray tracing tomografi. Inti programnya adalah tentang bagaimana metoda inversi non-linier dengan pendekatan global membantu proses ray tracing dalam menentukan sudut tembak yang paling baik dalam mendapatkan selisih jarak antara titik akhir ray dengan titik posisi receiver. Untuk metoda inversinya, saya mencoba menerapkan apa yang diajarkan di kuliah Inversi Geofisika, yaitu tentang metoda Simlated Annealing. Simulated Annealing atau yang sering disingkat SA merupakan salah satu metoda guided random search atau pencarian acak terarah dengan mengadopsi persamaan probabilitas Bolztmann. Sejauh yang saya mengerti metoda ini sangat baik untuk menentukan suatu nilai minimum dari sebuah fungsi walau memang algoritmanya sedikit kompleks, namun secara keseluruhan ia dapat menunjukan pencarian solusi dengan jelas dnegan menunjukan ama solusi yang ditolak dan mana yang diterima. Untuk teori dasar dari metoda ini selengkapnya dapat dilihat di Buku Pengantar Permodelan inversi Geofisika (Hendra Grandis). Selain SA saya juga berusaha menerapkan metoda inversi lainya seperti, inversi linier berbobot untuk mencari parameter model kecepatan yang nantinya akan digunakan dalam proses ray tracing. Diharapkan dengan metoda SA ini didapatkan sudut tembak terbaik dan selisih jarak yang paling minimum dari proses ray tracing. Metoda Metoda yang digunakan dalam program ini adalah:  Konsep dasar sesimik tomografi cross-hole  Ray tracing dengan shooting methods  Konsep delay time tomografi  Konsep inversi linier berbobot objektif  Konsep inversi non-linier pendekatan global – Simulated Annealing Adapun model yang saya inisiasikan untuk dilakukan inversi tomografi adalah sebagai berikut,  Source 2 buah  Receiver 3 buah  Geologi 3 lapisan dengan kecepatan berbeda yaitu 1000, 1200 dan 1500  Jarak 2 lubang bor adalah 100 m dan kedalam masing-masing 50 m
  • 2. Untuk metoda inversi non-linier dengan pendekatan global – Simulated Annealing, arus kerja program yang saya gunakan tidak berbeda jauh dengan apa yang diajarkan di kuliah Inversi Geofisika. Adapun flowchart-nya adalah sebagai berikut, Model Awal m0, n=0, T awal Perubasi model Penurunan T m n+1 N ∆E = E(m n+1) – E(m n) Y Stop ? Solusi Y Model Model ∆E <0 ? m n = m n+1 mn N P = exp(-∆E/kT) R=rand(1) Y R<P? N Dengan flowchart diatas dalam menjalankannya, saya memasuka beberapa parameter untuk algoritma SA sebagai berikut,  Temperatur awal di T = 10.0  Temperatur iterasi berhenti ketika T = 0.02   = 0.98;  Persamaan penurunan suhunya adalah Tn = *T = 0.98*T  Iterasi maksimal di 1000 iterasi  Dalam suatu nilai T akan ada maksimal 100 iterasi
  • 3.  Sebuah solusi akan diterima sebanyak 30 kali sebelum iterasi penambahan temperatur  k=1 Sebenarnya saya mendefinisikan banyak sumber dan receiver. Ini diperlukan agar pada saat inversi linier berbobot untuk menentukan kecepatan model dengan metoda inversi kasus yang kita punya adalah dalam karakter under-determined. Namun untuk melakukan ray tracing dengan shooting method saya menggunakan contoh ray tracing untuk source ke-1 yang berada di lapisan pertama dengan receiver ke-3 yang berada di lapisan ketiga. Memang saya mengakui bahwa script yang saya buat ini berjalan dengan sangat baik hanya ketika source dan receiver ada pada kondisi seperti itu, jika diinginkan kondisi yang berbeda maka diperlukan pemrograman lebih expert untuk itu. Sementara ini dengan keterbatasan kondisi seperti itu, mari kita liat script MATLAB-nya dibawah ini, clc, clear all %%% DEFINISIKAN PARAMETER YG DIKEHENDAKI (BENTUK MODEL) x_hole_1 = 0; x_hole_2 = 100; y_hole = 50; y_batas = [20 30 50]; % batas lapisan. SA: WAJIB 3 batas model v_lap = [1000 1200 1500]; % parameter kecepatan lapisan model sou_y = [5 10]; % posisi kedalaman source. SA: WAJIB diatas batas 1 rec_y = [5 25 40]; % posisi kedalaman receiver. SA: WAJIB kondisi underdetermined n_ray = length(sou_y) * length(rec_y); fprintf('Jumlah ray adalah %d n',n_ray); %%% FUNGSI TAMPILAN MODEL GEOLOGI figure (1) plot_model( x_hole_1,x_hole_2,y_hole,y_batas,v_lap,sou_y,rec_y ); %%% FUNGSI SKEMA GRID DAN SHOOT figure (2) plot_grid_shoot( x_hole_1,x_hole_2,y_hole,y_batas,sou_y,rec_y ); %%% FUNGSI HITUNG TIME MODEL (DIRECT) [ pan_ray_total,d,G ] = dt_forward( x_hole_1,x_hole_2,y_batas,v_lap,sou_y,rec_y ); %%% FUNGSI INVERSI KECEPATAN LINIER BERBOBOT [ v0_linier,dv_linier,v_linier ] = inversi_linier( d,n_ray,sou_y,rec_y,pan_ray_total,G ); %%% DEFINISIKAN PARAMETER OPERASI SA T = 10.0; % temperatur awal T_stop = 0.02; % temperatur berhenti alpha = 0.98; iter_max = 1000; T_iter_max = 100; % batas maksimal jumalh iterasi dalam satu nilai T solusi_iter_max = 30; % batas maksimal penerimaan solusi sebelum T diubah k = 1; % konstanta T_iter = 0; % nilai iterasi awal untuk temperatur solusi_iter = 0; % nilai iterasi pencarian (penerimaan) solusi awal iter = 1; konvergensi = 0; %%% PARAMETER NILAI SOLUSI AWAL --> TITIK AWAL n = 1; % indeks source m = 3; % indeks receiver i = 1; % indeks sudut % Inisiasi sudut tembakan dari source ke-n ke receiver ke-m sudut_tembak = 80; teta = sudut_tembak;
  • 4. [ selisih,T1x,T2x,T3x,T1y,T2y,T3y ] = ray_tracing_snell( x_hole_1, ... x_hole_2,y_batas,sou_y,rec_y,teta,v_linier,n,m ); dE = selisih; dE_paling_awal = selisih; % Mendefinisikan solusi terbaik sudut_tembak_terbaik = sudut_tembak; dE_terkecil = dE; % Setting display grafik selisih tiap iterasi figure(123); hold on; title('Kurva Pencarian Sudut Tembak'); xlabel('Iterasi'); ylabel('Nilai Selisih Titik Akhir (dE)'); %%% MULAI PROGRAM while konvergensi == 0 && iter <= iter_max % Men-generate sudut_tembak baru dengan bilangan random distribusi % Gauss sudut_tembak_baru = sudut_tembak + (1-(2*rand(1))); % Menghitung dE_baru dari sudut_tembak_baru teta = sudut_tembak_baru; [ selisih,T1x,T2x,T3x,T1y,T2y,T3y ] = ray_tracing_snell( x_hole_1, ... x_hole_2,y_batas,sou_y,rec_y,teta,v_linier,n,m ); dE_baru = selisih; % @#$% user-defined % Optimisasi % Melihat penerimaan solusi/selisih baru if dE_baru <= dE % Backup data lama sebelum di-update dE_lama = dE; sudut_tembak_lama = sudut_tembak; % Update dE = dE_baru; % Penerimaan solusi sudut_tembak = sudut_tembak_baru; % Penerimaan solusi solusi_iter = solusi_iter + 1; % Plot data selisih untuk iterasi ke-iter figure(123); plot(iter,dE,'b.','MarkerSize',20); plot_ray_tracing( x_hole_1,sou_y,T1x,T2x,T3x,T1y,T2y,T3y,n ); % Mengecek solusi terbaik if dE_baru <= dE_terkecil dE_terkecil = dE_baru; sudut_tembak_terbaik = sudut_tembak_baru; % Plot data selisih untuk iterasi ke-iter figure(123); plot(iter,dE,'go','MarkerSize',10); end elseif exp((-dE_baru+dE)/(k*T)) > rand(1) % Probabilitas Boltzmann % Back up data lama sebelum di-update dE_lama = dE; sudut_tembak_lama = sudut_tembak; % Update dE = dE_baru; % Penerimaan solusi sudut_tembak = sudut_tembak_baru; % Penerimaan solusi solusi_iter = solusi_iter + 1; % Plot data selisih untuk iterasi ke-iter figure(123); plot(iter,dE,'k.','MarkerSize',20); plot_ray_tracing( x_hole_1,sou_y,T1x,T2x,T3x,T1y,T2y,T3y,n ); else % Plot data selisih untuk iterasi ke-iter figure(123); plot(iter,dE,'rx','MarkerSize',10);
  • 5. end pause(0.01); % Update parameter iterasi program T_iter = T_iter + 1; iter = iter + 1; % Melihat dan melakukan perubahan fungsi temperatur (T) if T_iter >= T_iter_max || solusi_iter >= solusi_iter_max T = alpha*T; figure (3); hold on; plot(iter,T,'--rs','LineWidth',2,... 'MarkerEdgeColor','k',... 'MarkerFaceColor','g',... 'MarkerSize',10) title('Kurva Penurunan Temperatur'); xlabel('Iterasi'); ylabel('Temperatur'); T_iter = 0; solusi_iter = 0; dE = dE_terkecil; sudut_tembak = sudut_tembak_terbaik; % Plot nilai temperaturnya figure(123); plot(iter,dE,'ks-'); line([iter iter],[dE dE + 1],'Color','k'); text(iter,dE + 1,num2str(T),'Rotation',90); end % Parameter kriteria berhenti karena perubahan penurunan temperatur % karena fungsi iterasi if T < T_stop konvergensi = 1; end end %%% AKHIR PROGRAM % Menampilkan hasil iterasi terbaik fprintf('The best solution is sudut_tembak_terbaik= %6.4f n and dE_terkecil= %6.4fn',sudut_tembak_terbaik, dE_terkecil); % Plot raytracing dengan sudut tembak dan selisih terbaik teta = sudut_tembak_terbaik; [ selisih,T1x,T2x,T3x,T1y,T2y,T3y ] = ray_tracing_snell( x_hole_1, ... x_hole_2,y_batas,sou_y,rec_y,teta,v_linier,n,m ); figure (2) hold all line([x_hole_1 T1x],[sou_y(n) T1y], ... 'Color','g','LineStyle','-','LineWidth',2) line([T1x T2x],[T1y T2y], ... 'Color','g','LineStyle','-','LineWidth',2) line([T2x T3x],[T2y T3y], ... 'Color','g','LineStyle','-','LineWidth',2) Pada script diatas saya memasukan beberapa function script dengan tujuan untuk menghemat tampilan line dan juga diharapkan dapat lebih mempercepat proses hasil dikarenakan banyaknya looping yang digunakan untuk menjalankan program diatas. Berikut detail script dari semua function script yang ada diatas, 1. Fungsi untuk membuat tampilan model geologi yang diinisiasikan function [ PM ] = plot_model( x_hole_1,x_hole_2,y_hole,y_batas,v_lap,sou_y,rec_y ) %%% TAMPILAN MODEL GEOLOGI dgrid=0.05;
  • 6. [x_lap,y_lap] = meshgrid(0:dgrid:x_hole_2,0:dgrid:y_hole); kec_grid = zeros(size(x_lap)); kec_grid(1:(y_batas(1)/dgrid),:) = v_lap(1); kec_grid((y_batas(1)/dgrid)+1:(y_batas(2)/dgrid),:) = v_lap(2); kec_grid((y_batas(2)/dgrid)+1:(y_batas(3)/dgrid)+1,:) = v_lap(3); contourf(x_lap,y_lap,kec_grid) hold on plot(x_hole_2,rec_y,'v','MarkerEdgeColor','k',... 'MarkerFaceColor','y',... 'MarkerSize',6) hold on plot(x_hole_1,sou_y,'p','MarkerEdgeColor','k',... 'MarkerFaceColor','g',... 'MarkerSize',10) colormap(flipud(hot)); colorbar; set(gca,'ydir','reverse') xlabel('Koordinat X (m)'); ylabel('Kedalaman (m)'); title('Tomography Cross-Hole') end 2. Fungsi untuk menampilkan skema grid dan ray tracing shooting method-nya function [ PGS ] = plot_grid_shoot( x_hole_1,x_hole_2,y_hole,y_batas,sou_y,rec_y ) %%% TAMPILAN SKEMA GRID DAN SHOOT %%% plot direct ray dgrid=5; jgrid=(x_hole_2/dgrid); jgrid2=(y_hole/dgrid); %for i=1:length(sou_y) %for j=1:length(rec_y) % line([x_hole_1 x_hole_2],[sou_y(i) rec_y(j)], ... % 'Color','b','LineStyle','-','LineWidth',1.2) %end %end hold all %%% plot garis batas lapisan for i=1:length(y_batas)-1 line([x_hole_1 x_hole_2],[y_batas(i) y_batas(i)], ... 'Color','r','LineStyle','-','LineWidth',2) end %%% parameterisasi blok for i=1:jgrid-1 line([i*dgrid i*dgrid],[0 y_hole], ... 'Color','k','LineStyle','--') end for i=1:jgrid2-1 line([x_hole_1 x_hole_2],[i*dgrid i*dgrid], ... 'Color','k','LineStyle','--') end %%% plot titik source dan receiver plot(x_hole_2,rec_y,'v','MarkerEdgeColor','k',... 'MarkerFaceColor','y',... 'MarkerSize',10) plot(x_hole_1,sou_y,'p','MarkerEdgeColor','k',... 'MarkerFaceColor','g',... 'MarkerSize',10) text(x_hole_1,sou_y(1),'SOURCE 1 rightarrow ','HorizontalAlignment','right') text(x_hole_2,rec_y(1),' leftarrow RECEIVER 1','HorizontalAlignment','left')
  • 7. text(x_hole_2,y_batas(1),' leftarrow BATAS LAP 1/2','HorizontalAlignment','left') text(x_hole_2,y_batas(2),' leftarrow BATAS LAP 2/3','HorizontalAlignment','left') xlim([0 x_hole_2]); ylim([0 y_hole]) set(gca,'ydir','reverse') xlabel('Koordinat X (m)'); ylabel('Kedalaman (m)'); title('Tomography Cross-Hole') end 3. Fungsi untuk menghitung forward modeling dalam mendapatkan data waktu dari model kecepatan awal yang diinisiasikan function [ pan_ray_total,d,G ] = dt_forward( x_hole_1,x_hole_2,y_batas,v_lap,sou_y,rec_y ) %%% FUNGSI HITUNG TIME MODEL (DIRECT) %%% menghitung panjang direct ray dari source ke receiver n_ray = length(sou_y) * length(rec_y); pan_ray_total = zeros(length(sou_y),length(rec_y)); for i = 1:length(sou_y) for j = 1:length(rec_y) pan_ray_total(i,j) = sqrt((x_hole_1-x_hole_2).^2 + ... (sou_y(i)-rec_y(j)).^2); end end %%% menghitung sudut tembak ray dari titik shoot sudut_tembak = zeros(length(rec_y),length(sou_y)); for i = 1:length(sou_y) for j = 1:length(rec_y) sudut_tembak(i,j) = acosd((x_hole_2/pan_ray_total(i,j))); end end %%% menghitung panjang tiap segmen ray yang melewati tiap blok k = 1; for i = 1:length(sou_y) for j = 1:length(rec_y) %%% dasar pembutaan syntax memakai simulasi shooting dari source 1 tikpot_bts1 = ((y_batas(1) - sou_y(i))/tand(sudut_tembak(i,j))) + x_hole_1; pan_ray_bag(k,1) = sqrt((x_hole_1-tikpot_bts1).^2 + ... (sou_y(i)-y_batas(1)).^2); tikpot_bts2 = ((y_batas(2) - sou_y(i))/tand(sudut_tembak(i,j))) + x_hole_1; pan_ray_bag(k,2) = sqrt((tikpot_bts1-tikpot_bts2).^2 + ... (y_batas(1)-y_batas(2)).^2); pan_ray_bag(k,3) = pan_ray_total(i,j) - (pan_ray_bag(k,1)+pan_ray_bag(k,2)); %%% loop hubungan kondisi posisi source dan receiver if (sou_y(i) < y_batas(1))&&(rec_y(j) < y_batas(1)) %%% direct ray di blok 1 pan_ray_bag(k,1) = pan_ray_total(i,j); pan_ray_bag(k,2) = 0; pan_ray_bag(k,3) = 0; elseif (sou_y(i) < y_batas(1))&&(rec_y(j) > y_batas(1))&& ... (rec_y(j) < y_batas(2)) pan_ray_bag(k,2) = pan_ray_total(i,j) - pan_ray_bag(k,1); pan_ray_bag(k,3) = pan_ray_total(i,j) - (pan_ray_bag(k,1)+pan_ray_bag(k,2)); elseif (sou_y(i) > y_batas(1))&&(sou_y(i) < y_batas(2))&& ... (rec_y(j) < y_batas(1)) pan_ray_bag(k,2) = pan_ray_bag(k,1); pan_ray_bag(k,1) = pan_ray_total(i,j) - pan_ray_bag(k,1);
  • 8. pan_ray_bag(k,3) = pan_ray_total(i,j) - (pan_ray_bag(k,1)+pan_ray_bag(k,2)); elseif (sou_y(i) > y_batas(1))&&(sou_y(i) < y_batas(2))&& ... (rec_y(j) > y_batas(1))&&(rec_y(j) < y_batas(2)) %%% direct ray di blok 2 pan_ray_bag(k,1) = 0; pan_ray_bag(k,2) = pan_ray_total(i,j); pan_ray_bag(k,3) = 0; elseif (sou_y(i) > y_batas(1))&&(sou_y(i) < y_batas(2))&& ... (rec_y(j) > y_batas(2)) pan_ray_bag(k,1) = 0; pan_ray_bag(k,2) = sqrt((x_hole_1-tikpot_bts2).^2 + ... (sou_y(i)-y_batas(2)).^2); pan_ray_bag(k,3) = pan_ray_total(i,j) - (pan_ray_bag(k,1)+pan_ray_bag(k,2)); elseif (sou_y(i) > y_batas(2))&&(rec_y(j) < y_batas(1)) pan_ray_bag(k,3) = sqrt((x_hole_1-tikpot_bts2).^2 + ... (sou_y(i)-y_batas(2)).^2); pan_ray_bag(k,2) = pan_ray_bag(k,1) - pan_ray_bag(k,3); pan_ray_bag(k,1) = pan_ray_total(i,j) - abs(pan_ray_bag(k,2)+pan_ray_bag(k,3)); elseif (sou_y(i) > y_batas(2))&&(rec_y(j) > y_batas(1))&& ... (rec_y(j) < y_batas(2)) pan_ray_bag(k,1) = 0; pan_ray_bag(k,2) = sqrt((x_hole_1-tikpot_bts2).^2 + ... (sou_y(i)-y_batas(2)).^2); pan_ray_bag(k,3) = pan_ray_total(i,j) - (pan_ray_bag(k,1)+pan_ray_bag(k,2)); elseif (sou_y(i) > y_batas(2))&&(rec_y(j) > y_batas(2)) %%% direct ray di blok 3 pan_ray_bag(k,1) = 0; pan_ray_bag(k,2) = 0; pan_ray_bag(k,3) = pan_ray_total(i,j) - (pan_ray_bag(k,1)+pan_ray_bag(k,2)); end k = 1 + k; end end %%% menghitung matriks forward dt_cal = pan_ray_bag * (1./v_lap'); for l = 1:length(sou_y) d(l,:) = dt_cal((length(rec_y)*(l-1))+1:length(rec_y)*l,1); end G = pan_ray_bag; end 4. Fungsi untuk mendapatkan kecepatan lapisan dengan metoda inversi linier berbobot function [ v0_linier,dv_linier,v_linier ] = inversi_linier( ... d,n_ray,sou_y,rec_y,pan_ray_total,G ) %%% FUNGSI INVERSI KECEPATAN LINIER BERBOBOT %%% menghitung dt observasi linier %%% dari time model yang didapat sebelumnya (d) tambahkan delta yg sangat %%% kecil untuk melihat apakah bisa kembali atau tidak kecepatannya %a = max(d); %b = min(d); %dt_noise = rand(1)*(a-b)*0.1; t_obs = d; %+ dt_noise;
  • 9. %%% membuat kecepatan awal model linier vsem = zeros(length(sou_y),length(rec_y)); for i = 1:length(sou_y) for j = 1:length(rec_y) vsem(i,j) = pan_ray_total(i,j) ./ t_obs(i,j); end end v0_linier = sum(sum(vsem)) ./ n_ray; t_cal_linier = pan_ray_total ./ v0_linier; %%% menghitung delta waktu (observasi - kalkulasi) dt_linier = t_obs - t_cal_linier; for l = 1:length(sou_y) dt((length(rec_y)*(l-1))+1:length(rec_y)*l,1) = dt_linier(l,:); end %%% membuat matriks kernel G_linier = G; %%% memebuat bobot We berdasarkan misfit data misfit = dt.^2; We = (misfit).^-1; %%% melakukan inversi untuk mendapatkan delta S %m_linier = (inv(G_linier'*G_linier))*G_linier'*dt; m_linier = (inv(G_linier'*diag(We)*G_linier))*G_linier'*diag(We)*dt; %%% mencari kecepatan tiap blok dengan asumsi delta V >> dv_linier = zeros(length(m_linier),1); v_linier = zeros(length(m_linier),1); for i = 1:length(m_linier) dv_linier(i) = (-1*m_linier(i)*v0_linier^2) / (1 + m_linier(i)*v0_linier); v_linier(i) = v0_linier + dv_linier(i); end end 5. Fungsi untuk melaukan ray tracing dengan konsep Hk. Snell dengan sudut tembak yang telah didefinisikan sebelumnya sehingga menghasilkan informasi akhir selisih jarak dengan posisi receiver yang sebenarnya function [ selisih,T1x,T2x,T3x,T1y,T2y,T3y ] = ray_tracing_snell( x_hole_1, ... x_hole_2,y_batas,sou_y,rec_y,teta,v_linier,n,m ); %%% FUNGSI SHOOTING METHOD DENGAN HK. SNELL %%% mendefinisikan variabel yang dipakai untuk SHOOTING SOURCE KE-n sudut = (90 - teta); v_snell = v_linier; ray_shoot = zeros(1,3); T1x = 0; T2x = 0; T3x = 0; T1y = 0; T2y = 0; T3y = 0; while T3x == 0 %%% menghitung ray tracing pada SHOOT SOURCE ke-n (Prinsip Phytagoras) %%% menghitung panjang tiap segmen ray yang melewati tiap blok %%% menghitung ray shooting pada kotak pertama a1 = (y_batas(1) - sou_y(n)); c1 = a1 / cosd(sudut); b1 = c1 * sind(sudut); T1x = x_hole_1 + b1;
  • 10. T1y = sou_y(n) + a1; grad = (T1y - sou_y(n)) / (T1x - x_hole_1); %%% menghitung sudut pergi/sudut datang ray pada kotak 2 dengan Hk. Snell sudut2 = asind((v_snell(2) * sind(sudut)) / v_snell(1)); if abs(sudut2) > 90 sudut2 = 90; if T1x > x_hole_2 T1x = x_hole_2; T1y = sou_y(n) + (grad*T1x); end T2x = T1x; T2y = T1y; T3x = T1x; T3y = T1y; break end %%% menghitung ray shooting pada kotak kedua a2 = (y_batas(2) - T1y); c2 = abs(a2 / cosd(sudut2)); b2 = abs(c2 * sind(sudut2)); T2x = T1x + b2; T2y = T1y + a2; grad2 = (T2y - T1y) / (T2x - T1x); %%% menghitung sudut pergi/sudut datang ray pada kotak 3 dengan Hk. Snell sudut3 = asind((v_snell(3) * sind(sudut2) / v_snell(2))); if abs(sudut3) > 90 sudut3 = 90; if T2x > x_hole_2 T2x = x_hole_2; T2y = T1y + (grad2*(T2x - T1x)); end T3x = T2x; T3y = T2y; break end %%% menghitung ray shooting pada kotak ketiga b3 = (x_hole_2 - T2x); c3 = abs(b3 / sind(sudut3)); a3 = abs(c3 * cosd(sudut3)); T3x = T2x + b3; T3y = T2y + a3; ray_shoot(1,1)=(((T1x-x_hole_1).^2 + (T1y-sou_y(n)).^2).^0.5); ray_shoot(1,2)=(((T2x-T1x).^2 + (T2y-T1y).^2).^0.5); ray_shoot(1,3)=(((T3x-T2x).^2 + (T3y-T2y).^2).^0.5); %%% menghitung selisih titik akhir (jarak ke receiver) end selisih = abs(T3y - rec_y(m)); end 6. Fungsi untuk memplot ray tracing dengan berbagai sudut tembak function [ PRT ] = plot_ray_tracing( x_hole_1,sou_y,T1x,T2x,T3x,T1y,T2y,T3y,n ) %%% FUNGSI PLOT GRAFIK 2D DENGAN RAY SHOOTING %%% plot raytracing S-R dengan sudut tembak tertentu figure(2) hold all line([x_hole_1 T1x],[sou_y(n) T1y], ... 'Color','m','LineStyle','-','LineWidth',1)
  • 11. line([T1x T2x],[T1y T2y], ... 'Color','m','LineStyle','-','LineWidth',1) line([T2x T3x],[T2y T3y], ... 'Color','m','LineStyle','-','LineWidth',1) end HASIL Dari script diatas hasil atau output yang saya dapatkan adalah sebagai berikut, untuk model awal geologi output tampilan ynag dihasilkan adalah sebagaimana yang ditunjukan oleh gambar berikut, Dari model diatas dicoba dilakukan tomografi dengan menggunakan straight raypath (jalur sinar lurus) untuk nantinya digunakan dalam melakukan forward modeling. Adapun output gambar dari penembakan jalur sinar lurusnya adalah sebagai berikut,
  • 12. Dari hasil ray tracing dengan straight raypath yang ditunjukan oleh gambar diatas, saya mendapatkan panjang sinar tiap kotak kecepatan ynag kemudian saya jadikan data untuk matriks kernel lalu dengan kecepatan model yang saya punya, saya coba dapatnya waktu kalkulasinya. Dari waktu kalkulasi dan ditambah sedikit noise, dengan metoda inversi linier berbobot saya coba balikan lagi untuk mendapatkan parameter model kecepatan untuk melihat apakan dengan metoda inversi ini akan dapat memberikan hasil pencarian parameter yang mendekati atau sama dengan parameter model ynag diinisiasikan. Ternyata memang setelah dialkukan inversi, saya berhasil kembali mendapatkan kecepatan lapisan yang sangat mirip dengan model kecepatan lapisan ynag didefinisikan sebelumnya yaitu ditunjukan oleh gambar dibawah ini, Kemudian kecepatan yang saya dapatkan tersebut akan saya gunakan untuk melakukan proses ray tracing Hk. Snell dengan metoda SA. Sebagai contoh saya ambil source ke-1 dan receiver ke-3 serta sudut tembak awal 80° dalam menjalankan program SA tersebut. Adapun hasil yang diberikan dengan parameter yang telah didefinisikan sebelumnya adalah sebagaimana ynag ditunjukan oleh gambar dibawah ini, Gambar diatas menunjuka nilai selisih titik akhir ray dengan pencarian SA degan titik akhir sebenarnya (posisi receiver 3) terhadap jumalh iterasi ynag dilakukan. Terlihat dari kurva diatas
  • 13. bahwa metoda SA “menuntun” data untuk semakin memeberikan selisih yang minimum, dimana walaupun memang datanya berfluktuasi namun secara garis besar trend yang diberikan menunjukan bahwa semakin tinggi iterasinya, maka selisih yang dihasilkan semakin kecil/minimum. Hal ini sangat jelas terlihat pada iterasi 1-250. Selebihnya data bergerak terus berfluktuasi sesuai dengan fungsi penambahan parameter model sudut tembaknya sehingga hasil selisihnya pun sangat bervariasi namun trend datarnya tetap sama. Fluktuasi yang terlihat sangat terarah ini saya analisa disebabkan memang oleh algoritma dari SA sendiri dimana ada Probabilitas Boltzmann yang menyeleksi data selisih mana yang bisa ditolak dan mana yang tidak bisa ditolak. Selain itu dengan SA juga saya dapat mengetahui sudut tembak paling baik untuk menghasilkan selisih yang paling kecil. Jika kurva tersebut lebih di-zoom maka akan tampak tampilan sebagai berikut,  Ttitik biru merupaka titik dengan nilai selisih yang diterima karena nilainya lebih kecil dibandingkan dengan nilai selisih pada iterasi sebelumnya.  Titik biru dengan lingkaran hijau diluarnya merupakan titik dengan nilai selisih terbaik sejauh itu, sejauh iterasi yang sudah berjalan.  Ttitik hitam menunjukan titik dengan nilai selisih yang diterima juga namun dalam hal ini nilai selisihnya tidak lebih kecil dibandingkan dengan nilai selisih titik pada iterasi sebelumnya, tetapi dengan “keberuntungan” pada probabilitas P(∆E) yang lebih besar sehingga bilangan random akan jatuh pada posisi yang lebih kecil sehingga memungkinkan solusi ini untuk diterima.  Sedangkan tanda silang merah menunjukan titik dengan nilai selisih yang ditolak karena selisihnya tidak lebih kecil dibandingan selisih pada titik iterasi sebelumnya dan juga ia memiliki probabilitas P(∆E) yang lebih kecil sehingga memungkinkan solusi untuk ditolak. Dalam probalitas Boltzman terdapat parameter temperatur dan itu akan terus berubah seiring dengan semakin banyaknya iterasi yang dijalankan dalam melakukan penerimaan data/solusi. Adapun grafik kurva penurunan suhu hingga iterasi ke-1000 yang saya lakukan terhadap program diatas adalah sebagai berikut,
  • 14. Kemudian sebagai hasil akhir saya mendapatkan sudut tembak terbaik dan selisih yang paling kecil dari 1000 iterasi adalah sebagai berikut, Dengan output untuk penggambaran ray tracing yang dilakukan untuk berbagai sudut tembak ditunjukan oleh gambar dibawah ini, (ray tracing yang paling baik ditunjukan oleh garis sinar yang berwarna hijau)
  • 15. Kesimpulan Kesimpulan yang saya dapat adalah bahwa metoda inversi sangat membatu dalam menyelesaikan permasalahan siesmik tomografi terutama untuk permodelannya dan juga ternyata berdasarkan dari hasil percobaan, metoda Simulated Annealing berkerja dengan sangat baik dalam membantu permasalahan raytracing shooting method untuk mencari sudut tembak terbaik. Metoda SA yang saya lakukan pada kasus tomografi diatas berhasil memeberikan solusi sudut tembak terbaik yang mana memberikan selisih titik akhir-receiver terkecil pula. Dilihat dari kemampuannya dalam menentukan nilai minimum global dari sebuah fungsi, permasalahan, ataupun informasi dengan sangat baik maka saya berpendapat metoda SA ini akan dapat digunakan untuk memecahkan persoalan yang lain yang menginginkan mencari titik solusi minimum namun mempunyai bentuk fungsi yang kompleks. Ucapan Terimakasih Saya sangat berterima kasih kepada buku kuliah Pengantar Permodelan Inversi Geofisika (Dr. Hendra Grandis) dan slide kuliah Geotomografi (Dr. Andri Dian Nugraha) atas sumber puastaka dan inspirasi dalam pembuatan laporan ini. Juga kepada Dr. Hendra Grandis sebagai dosen pembimbing mata kuliah Inversi Geofisika atas bimbingan dan pengetahuan yang diberikan.