NIM
NAMA
Nilai
Makalah
30%
0810940069
SYAHYANGKA
ARDIAN
0810943027
AJENG
PAMBUKO A
0810943013
PRIMA
MAHENDRA B.
P.
0810943001
ADHI
PRASETYO R
0810943039
FIRDAUS
RISKIAN
0810940053
M. MAHMUDI
0810943029
ANDY HADI S.
0810943053
NURRAHMAH
S. YUNIAR
Presentasi
70%
NA
DAFTAR ISI
Halaman
LEMBAR PENILAIAN ....................................... 1
DAFTAR ISI ......................................................... 2
ABSTRAK............................................................. 3
BAB I PENDAHULUAN ....................................
1.1. Latar Belakang .......................................
1.2. Rumusan Masalah .................................
1.3. Tujuan ....................................................
1.4. Batasan Masalah ....................................
4
4
5
5
5
8
8
10
20
20
30
ABSTRAK
Dalam kehidupan nyata, sering terjadi adanya bentrokan
penyusunan jadwal. Jika dilihat secara individu, penyusunan
jadwal secara manual bukanlah hal yang sulit karena adanya
toleransi waktu dan jadwal perseorangan yang berbeda-beda.
Namun jika masalah penjadwalan tersebut menyangkut banyak
orang, maka hal tersebut menjadi sulit. Salah satu solusinya
adalah dengan teknik pewarnaan graf (Graph Coloring). Makalah
ini akan membahas mengenai solusi untuk masalah penyusunan
jadwal tersebut. Yaitu dengan teknik pewarnaan graf dan
algoritma-algoritma yang dapat digunakan dalam teknik
pewarnaan graf ini dengan menggunakan algoritma Welch
powell.
BAB I
PENDAHULUAN
1.1. Latar Belakang
Teori graf merupakan sebuah pokok bahasan yang
sudah tua usianya namun memiliki banyak terapan sampai
saat ini. Graf digunakan untuk merepresentasikan objek-objek
diskrit dan hubungan antara objek-objek tersebut. Graf pertama
kali digunakan untuk memecahkan masalah jembatan
Knigsberg pada tahun 1736. Pada tahun tersebut, seorang
matematikawan Swiss bernama L. Euler berhasil memecahkan
masalah jembatan Knigsberg tersebut. Ia memodelkan
masalah ini ke dalam bentuk graf dengan daratan (titik-titik
yang dihubungkan oleh jembatan) dimodelkan sebagai noktah
atau vertex dan jembatan dinyatakan sebagai garis atau edge.
Definisi sebuah graf itu sendiri
adalah sebagai pasangan
himpunan (V, E) yang dalam hal ini: V = himpunan tidak
kosong dari simpul-simpul (vertices atau node) dan E =
himpunan sisi (edges atau arcs) yang menghubungkan sepasang
simpul. Dalam notasi matematika, graf dapat ditulis dengan:
G = (V, E)
Sebuah graf dimungkinkan tidak mempunyai sisi satu buah pun
namun setiap simpulnya harus ada (minimal satu).
Dalam metode pewarnaan graf, terdapat beberapa
algortma-algoritma yang telah diterapkan. Algoritma-algoritma
ini
telah
banyak
digunakan
dalam pengembangan
berbagaimacam software penyusunan jadwal. Karena banyaknya
persoalan
penyusunan jadwal
yang
kompleks,
tidak
memungkinkan untuk melakukan pewarnaan graf secara
manual. Semakin banyak jumlah komponen-komponen yang
harus diperhitungkan dalam penyusunan sebuah jadwal, maka
semakin sulit penyusunan sebuah jadwal tesebut. Berikut ini
merupakan beberapa algoritma yang dapat digunakan dalam
metode pewarnaan graf. Algoritma
Welch-Powell
dapat
1.3 Tujuan
Mahasiswa dapat mengenal Delphi dan dapat
mengimplementasikan
Algoritma
Welch-Powell
untuk
Pewaranaan Titik Pada Graph serta mampu memanfaatkannya
dalam kehidupan sehari-hari dengan menggunakan program
Delphi.
1.4 Batasan Masalah
Dalam makalah ini kami membahas materi tentang
Algoritma Welch-Powel untuk pewarnaan titik pada Graph, oleh
karena itu kami tidak membahas tentang pembuatan matrik. Jadi
yang kami bahas hanyalah sebatas tentang pewarnaan titik pada
Graph
BAB II
KAJIAN PUSTAKA
Teori graf merupakan pokok bahasan yang sudah tua
usianya namun memiliki banyak terapan. Sampai saat ini graf
digunakan untuk merepresentasikan objek objek diskrit dan
hubungan antara objek objek tersebut. Representasi visual dari
graf adalah dengan menyatakan objek dengan simpul, noktah,
bulatan, titik, atau vertex, sedangkan hubungan antara objek
dinyatakan dengan garis atau edge. Salah satu aplikasi yang
berkaitan dengan graf adalah pewarnaan graf (graph colouring).
Pengertian pewarnaan graf adalah pemberian warna, yang
biasanya direpresentasikan sebagai bilangan terurut mulai dari 1,
pada objek tertentu pada graf. Objek tersebut dapat berupa
simpul, sisi, wilayah ataupun kombinasi ketiganya.
Ada tiga macam pewarnaan graf, yaitu :
1. Pewarnaan simpul (vertex colouring), merupakan pemberian
warna atau label pada setiap
simpul sehingga tidak ada 2
simpul bertetangga yang memiliki warna sama.
2. Pewarnaan sisi (edge coloring), merupakan pemberian warna
pada setiap sisi pada graf sehingga sisi-sisi yang berhubungan
tidak memiliki warna yang sama.
3. Pewarnaan wilayah (region colouring), merupakan pemberian
warna pada setiap wilayah pada graf sehingga tidak ada
wilayah yang bersebelahan yang memiliki warna yang sama.
Suatu graph G adalah suatu himpunan berhingga tak kosong
dari objek-objek yang disebut verteks (minimal tunggal) bersamasama dengan suatu himpunan yang anggotanya adalah pasangan
yang tak berurut dari verteks yang berbeda pada G yang disebut
edge (mungkin kosong), dan dinotasikan dengan G{V (G),E(G)}.
Jumlah warna minimum yang dapat digunakan untuk
mewarnai graf dinyatakan dengan bilangan kromatik, yang
disimbolkan dengan (G). Graf yang memiliki bilangan kromatik
1 adalah graf kosong, yaitu graf yang hanya terdiri dari sebuah
BAB III
PEMBAHASAN
3.1. Contoh Kasus / Hitungan Manual
Misal pada suatu tempat terdapat desa A,B,C,D,F dan G
di mana ke-6 desa tersebut supaya menarik akan diadakan sebuah
hiburan. Desa A terhubung dengan desa B,C,D,E dan F. karena A
merupakan desa yang mempunyai hubungan dengan desa lain
yang lebih banyak maka A ditentukan pilihan hiburannya terlebih
dahulu yaitu Band. Dan pada desa yang tidak bisa menjangkau
desa A secara langsung diberi hiburan yang sama pula.
Kemudian dari sisa desa yang ada yaitu desa B,C,D,E dan
F dicari desa yang mempunyai daerah jangkauan yang lebih
banyak dan lebih mudah dijangkau oleh desa lain yaitu desa E
dan diberi hiburan Campur Sari, kemudian dicari desa yang tidak
bisa menjangkau desa E secara langsung yaitu desa B dan C
sehingga diberi hiburan yang sama pula. Dan desa yang masih
tersisa yaitu desa D dan F dan kedua desa tersebut tidak bisa
menjangkau secara langsung satu sama lain maka sama yaitu
diadakan hiburan wayang kulit.
Dari beberapa uraian singkat di atas bisa digambarkan
denah tempatnya yaitu sbb.:
E
G
F
8
Banyak jalan
5
2
3
3
4
3
2
Hiburan
Band
Campur sari
Wayang kulit
Campur sari
Wayang kulit
Band
3.2. Flowchart
Start
W: Array [0..4] of Tcolor
i,j,k,z,f,d,p,wrn : integer
dg,dk,ik,ft,wr:array[1..20]of integer
b,c,A:array[1..20,1..20]of integer
W[1]:=Red
W[2]:=Blue
W[3]:=Green
W[4]:=Yellow
W[5]:=Fuchsia
Jvertex=jumlah vertex t
For i:= to Jvertex-1
do
For j:=1 to Jvertex -1 do
A[i,j]:=0
next
next
10
Cgaris=lingkaran vertex
Cgaris:record
x,y:integer
A[(garis [i].x,Cgaris[i].y]:=1
A[(garis [i].y,Cgaris[i].x]:=1
next
k:=1
11
A[i,j]=
1
dg[k]:=dg[k]+1
lk[k]:=dg[k]
next
k=k+1
next
12
k:=k-1
For i:=1 to k do
For j:=1 to 2 do
B[i,j]=i
J:=1
B[i,j]:=lk[i]
next
next
13
For j:=(i+1) to k do
dg[i]<d
g[j]
dk[i]:=dg[j]
dg[j]:=dg[i]
dg[i]:=dk[i]
next
next
14
For i:=1 to k do
z:=1
For j:=1 to k do
C[i,1]=B[j,i]
dg[i]=b[
j,i]
C[i,2]:=B[j,2]
Z:=z+1
B[j,1]:=0
z=z+1
next
next
15
Fz[1]:=0
P:=1
For z:=1 to k do
F:=1
For i:= 1 to k do
C[z,2]=
i
For j:=1 to k do
A[j,1]=
1
tidak
Ya
Cetak lingkaran
vertek [f] dengan
warna w[z mod 5]
16
Cetak f,menggunakan
warna,[z mod 5]
For d:=1 to k do
A[j,d]:=1
Next
F:= F+1
Next
Next
Next
End
17
Pseudocode
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Input vertex
W[1]clRed
W[2] clBlue
W[3] clGreen
W[4] clYellow
W[0] clFuchsia
for i1 to jVertex-1 do
a. for j1 to jVertex-1 do
1. A[i,j] 0
for i1 to jGaris-1 do
a. A[CGaris[i].x,CGaris[i].y] 1
b. A[CGaris[i].y,CGaris[i].x] 1
for i1 to jVertex-1 do
a. dg[k] 0
b. for j1 to jVertex-1 do
1. if A[i,j] 1 then
a. dg[k] dg[k]+1
b. lk[k] dg[k]
2. else
a. A[i,j] 0
b. kk+1
kk-1;
For i1 to k do
a. For j1 to 2 do
1. if j1 then
a. b[i,j] lk[i]
2. else
a. b[i,j] i
For i 1 to (k-1) do
a. For j (i+1) to k do
1. if dg[i]<dg[j] then
a. dk[i] dg[j]
b. dg[j] dg[i]
c. dg[i] dk[i]
For i 1 to k do
18
14.
15.
16.
17.
a. ZI
b. for j1 to k do
1. if (dg[i])=(b[j,1]) then
a. if z>I then
1. Zz+1
2. else
a. C[i,1] B[J,1]
b. C[i,2] B[J,2]
c. B[j,1] 0
d. ZZ+1
fz[1] 0
p1
wrn0
for z1 to k do
a. f1
b. for i1 to k do
1. if C[z,2]= i then
a. for j1 to k do
1. if A[j,i]=1 then
a. ff+1
2. else
a. Lingkaran[f]W[z mod 5])
b. Cetak lingkaran
c. for d1 to k do
1. A[j,d] 1
d. ff+1
19
Variants,
type
TGaris = record
x,y,data1 : integer;
end;
TVertext = record
x,y,NoVertex : integer;
20
end;
TForm1 = class(TForm)
Panel3: TPanel;
Panel1: TPanel;
Image1: TImage;
Panel2: TPanel;
Button1: TButton;
Rb1: TRadioButton;
Rb2: TRadioButton;
Panel4: TPanel;
Panel7: TPanel;
Label3: TLabel;
Label4: TLabel;
Grid: TStringGrid;
Button3: TButton;
StringGrid1: TStringGrid;
ListBox1: TListBox;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var
Action: TCloseAction);
procedure Image1MouseDown(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
Bdg : TBitmap;
jVertex, L1, L2, jGaris : integer;
PVertex : Array[1..20] of TRect;
PGaris, CGaris : Array[1..20] of TGaris;
PVertexH: Array[1..20] of TVertext;
W : array[1..20] of integer;
JmlData : Integer;
Procedure
lingkaran(bidang:TBitmap;x,y:integer;
hrf:string; warna:TColor);
Procedure
BuatGaris(bidang:TBitmap;x1,y1,x2,y2:integer;
warna:TColor);
21
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
A:Array[1..20,1..20] of integer;
implementation
{$R *.dfm}
Procedure
TForm1.lingkaran(bidang:TBitmap;x,y:integer;
hrf:string; warna:TColor);
var
lb, tg : integer;
begin
//
Bidang.Canvas.Brush.Style := bsclear;
Bidang.Canvas.Pen.Color := warna;
Bidang.Canvas.Font.Color := warna;
lb := Bidang.Canvas.TextWidth(hrf);
tg := Bidang.Canvas.TextHeight(hrf);
Bidang.Canvas.Ellipse(x-10,y-10,x+10,y+10);
Bidang.Canvas.TextOut(x-(lb div 2),y-(tg
div 2),hrf);
end;
Procedure
TForm1.BuatGaris(bidang:TBitmap;x1,y1,x2,y2:inte
ger; warna:TColor);
var j:TPenMode;
begin
j := Bidang.Canvas.Pen.Mode;
Bidang.Canvas.Pen.Mode := pmXor;
Bidang.Canvas.Pen.Color := Warna;
Bidang.Canvas.MoveTo(x1,y1);
Bidang.Canvas.LineTo(x2,y2);
Bidang.Canvas.Pen.Mode := j;
end;
22
23
Image1.Canvas.Draw(0,0,Bdg);
inc(jVertex);
end
else
//Mendeteksi
Posisi
Kursor
ditekan
For i := 1 to jVertex do
begin
pada
saat
rgn:=
CreateEllipticRgn(PVertex[i].Left,PVertex[i].Top
,PVertex[i].Right,PVertex[i].Bottom);
If (PtInRegion(rgn,x,y)) then
begin
if L1<>0 then
begin
L2 := i;
If L2=L1 then exit;
PGaris[jGaris].x := L1;
PGaris[jGaris].y := L2;
//Gambar Garis
if L1<L2 then
BuatGaris(Bdg,PVertex[L1].Left+10,PVertex[L1].To
p+10,
PVertex[L2].Left+10,PVertex[L2].Top+10,clLime)
else
BuatGaris(Bdg,PVertex[L1].Left+10,PVertex[L1].To
p+10,
PVertex[L2].Left+10,PVertex[L2].Top+10,clYellow)
;
//Gambar Ulang Lingkaran
Lingkaran(Bdg,PVertex[L1].left+10,PVer
tex[L1].Top+10,IntToStr(L1),clWhite);
Lingkaran(Bdg,PVertex[L2].left+10,PVer
tex[L2].Top+10,IntToStr(L2),clWhite);
Image1.Canvas.Draw(0,0,Bdg);
24
begin
//Mengurutkan data
k := 1;
For j := 1 to jVertex-1 do
For l := 1 to jGaris do
if PGaris[l].y=j then
begin
CGaris[k].x := PGaris[l].x;
CGaris[k].y := PGaris[l].y;
inc(k);
end;
PGaris := CGaris;
k := 1;
For j := 1 to jVertex-1 do
For l := 1 to jGaris do
if PGaris[l].x=j then
begin
CGaris[k].x := PGaris[l].x;
CGaris[k].y := PGaris[l].y;
inc(k);
end;
PGaris := CGaris;
//Tampilkan data di StringGrid
For j := 1 to jGaris do
begin
Grid.Cells[0,j]
IntToStr(PGaris[j].x);
Grid.Cells[1,j]
IntToStr(PGaris[j].y);
:=
:=
end;
end;
L1 := 0;
inc(jGaris);
end
else
begin
L1 := i;
25
Lingkaran(Bdg,PVertex[i].left+10,PVe
rtex[i].Top+10,IntToStr(i),clYellow);
Image1.Canvas.Draw(0,0,Bdg);
end;
break;
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Kotak : TRect;
i : integer;
begin
Bdg.canvas.Brush.COlor := clBlack;
Kotak.TopLeft := Point(0,0);
Kotak.BottomRight
:=
Point(Image1.Width,Image1.Height);
Bdg.Canvas.FillRect(Kotak);
Image1.Canvas.Draw(0,0,Bdg);
for i := 1 to jGaris-1 do Grid.Rows[i].Clear;
jVertex := 1;
jGaris := 1;
StringGrid1.Visible:=false;
ListBox1.Visible:=False;
end;
procedure TForm1.Button3Click(Sender: TObject);
var i,j,k,z,f,d,p,wrn:integer;
dg:array[1..20]of integer;
dk:array[1..20]of integer;
lk,fz,wr:array[1..20]of integer;
b,c:array[1..20,1..20]of integer;
W:array[0..4]of TColor;
begin
W[1]:=clRed;
W[2]:=clBlue;
W[3]:=clGreen;
W[4]:=clYellow;
W[0]:=clFuchsia;
StringGrid1.Visible:=True;
26
ListBox1.Visible:=True;
StringGrid1.RowCount:=jVertex ;
StringGrid1.Cells[0,0]:='Degre';
StringGrid1.Cells[1,0]:='Vertex';
ListBox1.Clear;
ListBox1.Items.Add('Identifikasi
Vertext');
ListBox1.Items.Add('');
warna
pada
27
k:=k-1;
For i := 1 to k do
For j :=1 to 2 do
begin
if j=1 then
b[i,j]:=lk[i]
else
b[i,j]:=i;
end;
//mengurutkan degre
For i := 1 to (k-1) do
For j :=(i+1) to k do
if dg[i]<dg[j] then
begin
dk[i]:=dg[j];
dg[j]:=dg[i];
dg[i]:=dk[i];
end;
// penguutan antara degre dengan vertex
For i := 1 to k do
begin
Z:=I;
for j:=1 to k do
if (dg[i])=(b[j,1]) then
if z>I then
Z:=z+1
else
begin
C[i,1]:=B[J,1];
C[i,2]:=B[J,2];
B[j,1]:=0;
Z:=Z+1;
end;
end;
for i:=1 to k do
for j:=0 to 1 do
StringGrid1.Cells[j,i]:=IntToStr(C[i,j+1]);
28
fz[1]:=0;
p:=1;
wrn:=0;
for z:=1 to k do
begin
f:=1;
for i:=1 to k do
if C[z,2]= i then
for j:=1 to k do
if A[j,i]=1 then
f:=f+1
else
begin
Lingkaran(Bdg,PVertex[f].left+10,PVerte
x[f].Top+10,IntToStr(f),W[z mod 5]);
Image1.Canvas.Draw(0,0,Bdg);
ListBox1.Items.Add(IntToStr(f)+'
menggunakan warna '+IntToStr(z mod 5));
for d:=1 to k do
A[j,d]:=1;
f:=f+1;
end;
end;
end;
end.
29
30
BAB IV
KESIMPULAN
Dari uraian diatas, maka dapat disimpulkan bahwa :
31
Daftar Pustaka
[1] Munir,Rinaldi. 2004. Diktat Kuliah Matematik
Diskrit. Departemen Teknik Informatika ITB
32
33