Anda di halaman 1dari 5

%===================================================== %Solusi water Glass problem menggunakan %algoritma BFS %===================================================== clc; clear all; x=input('Keadaan awal : gelas

A (4 liter) berisi = ...'); y=input('Keadaan awal : gelas B (3 liter) berisi = ...'); a=input(' goal : gelas A (4 liter) berisi = ...'); b=input(' goal : gelas B (3 liter) berisi = ...'); level=input('jumlah Level maksimum = ...'); data_sementara=[]; % queue=[1;-1], maksudnya 1= node ke-1, -1 = tanda ganti level queue=[1;-1]; %node awal pohon.nama_orang_tua=0; pohon.nama=1; pohon.data=[x y]; pohon.rule=''; %tanda node belum pernah di proses tanda(1:5,1:4)=0; tanda(x+1,y+1)=1; nama=1; selesai=0; counter_level=0; data_setiap_level=[]; goal=[]; while selesai==0 %jika ditemukan tanda ganti level if queue(1) == -1 if length(data_setiap_level)==0 break end %check data_setiap_level, ada goal atau tidak for i=1:length(data_setiap_level); j=data_setiap_level(i); x=pohon(j).data(1); y=pohon(j).data(2); %jika sudah ditemukan Goal if x==a & y==b %tampung nama node sebagai goal goal=[goal;pohon(j).nama]; selesai=1; %jika sudah ditekukan Goal level=counter_level; end

end %karena ganti level, node diperbarui queue(1)=[]; %pemberian tanda ganti level berikutnya queue=[queue;-1]; %data setiap level dihapus data_setiap_level=[]; %counter level bertambah counter_level=counter_level+1; if counter_level==level+1 selesai=1; end end nama_orang_tua=queue(1); %queue teratas telah diambil, maka dikosongkan queue(1)=[]; x=pohon(nama_orang_tua).data(1); y=pohon(nama_orang_tua).data(2); %aturan-aturan if y<3 %R1='gelas B diisi penuh'; x1=x;y1=3; %data node anak if tanda(x1+1,y1+1)==0 tanda(x1+1,y1+1)=1; data=[x1 y1]; %nama anak nama=nama+1; rule='gelas B diisi penuh '; %mengisi data anak pada struktur pohon pohon(nama)= struct('nama_orang_tua',nama_orang_tua,'nama',nama,'data',data,'rule',rule); %anak dimasukkan ke queue queue=[queue;nama]; %berisi data anak disetiap level data_setiap_level=[data_setiap_level; nama]; end end if x<4 %R2='gelas A diisi penuh'; x1=4;y1=y;%data node anak if tanda(x1+1,y1+1)==0 tanda(x1+1,y1+1)=1; data=[x1 y1]; %nama anak nama=nama+1; rule='gelas A diisi penuh '; pohon(nama)= struct('nama_orang_tua',nama_orang_tua,'nama',nama,'data',data,'rule',rule);

queue=[queue;nama]; data_setiap_level=[data_setiap_level; nama]; end end if x>0 %R3='kosongkan isi gelas A'; x1=0;y1=y;%data node anak if tanda(x1+1,y1+1)==0 tanda(x1+1,y1+1)=1; data=[x1 y1]; %nama anak nama=nama+1; rule='kosongkan isi gelas A '; pohon(nama)= struct('nama_orang_tua',nama_orang_tua,'nama',nama,'data',data,'rule',rule); queue=[queue;nama]; data_setiap_level=[data_setiap_level; nama]; end end if y>0 %R4='kosongkan isi gelas B'; x1=x;y1=0;%data node anak if tanda(x1+1,y1+1)==0 tanda(x1+1,y1+1)=1; data=[x1 y1]; %nama anak nama=nama+1; rule='kosongkan isi gelas B '; pohon(nama)= struct('nama_orang_tua',nama_orang_tua,'nama',nama,'data',data,'rule',rule); queue=[queue;nama]; data_setiap_level=[data_setiap_level; nama]; end end if (x+y>=4)& (y>0) %R5='tuangkan isi gelas B ke gelas A hingga gelas A penuh'; x1=4;y1=x+y-4;%data node anak if tanda(x1+1,y1+1)==0 tanda(x1+1,y1+1)=1; data=[x1 y1]; %nama anak nama=nama+1; rule='tuang isi gelas B ke gelas A hingga gelas A penuh '; pohon(nama)= struct('nama_orang_tua',nama_orang_tua,'nama',nama,'data',data,'rule',rule); queue=[queue;nama]; data_setiap_level=[data_setiap_level; nama]; end end if (x+y>=3)& (x>0) %R6='tuangkan isi gelas A ke gelas B hingga gelas B penuh'; x1=x+y-3;y1=3;%data node anak if tanda(x1+1,y1+1)==0

tanda(x1+1,y1+1)=1; data=[x1 y1]; %nama anak nama=nama+1; rule='tuang isi gelas A ke gelas B hingga gelas B penuh '; pohon(nama)= struct('nama_orang_tua',nama_orang_tua,'nama',nama,'data',data,'rule',rule); queue=[queue;nama]; data_setiap_level=[data_setiap_level; nama]; end end if (x+y<=4)& (y>0) %R7='tuangkan seluruh air dari gelas B ke gelas A'; x1=x+y;y1=0; %data node anak if tanda(x1+1,y1+1)==0 tanda(x1+1,y1+1)=1; data=[x1 y1]; %nama anak nama=nama+1; rule='tuang semua air dari gelas B ke gelas A '; pohon(nama)= struct('nama_orang_tua',nama_orang_tua,'nama',nama,'data',data,'rule',rule); queue=[queue;nama]; data_setiap_level=[data_setiap_level; nama]; end end if (x+y<=3)& (x>0) %R8='tuangkan seluruh air dari gelas A ke gelas B'; x1=0;y1=x+y;%data node anak if tanda(x1+1,y1+1)==0 tanda(x1+1,y1+1)=1; data=[x1 y1]; %nama anak nama=nama+1; rule='tuang semua air dari gelas A ke gelas B '; pohon(nama)= struct('nama_orang_tua',nama_orang_tua,'nama',nama,'data',data,'rule',rule); queue=[queue;nama]; data_setiap_level=[data_setiap_level; nama]; end end end %===Proses pencarian Solusi (dari Node awal sampai Goal)================ %jika ada Goal yang ditemukan if ~isempty(goal) clc; disp(['Goal ditemukan pada Level ke: ', num2str(level)]);pause data=[]; rule=[]; nama=pohon(goal(end)).nama; while nama_orang_tua ~=0

data=[pohon(nama).data ; data]; rule=[pohon(nama).rule; rule]; nama_orang_tua=pohon(nama).nama_orang_tua; nama=nama_orang_tua; end clc; disp('Keadaan awal : '); data(1,:) for k=2:length(data) rule(k-1,:) data(k,:) pause end data %jika tidak ada goal yang ditemukan else clc disp('Goal tidak pernah ditemukan'); end

Anda mungkin juga menyukai