· 9 years ago · Jun 07, 2017, 07:04 PM
1<?php
2/*
3-- ----------------------------
4-- DSS SAW METHOD
5-- CREATED BY : CAHYA DSN
6-- CREATED ON : 2014-12-01
7-- UPDATED ON : 2015-01-28
8-- ----------------------------
9/*
10Metode Simple Additive Weighting (SAW)
11
121 Pengertian Metode Simple Additive Weighting (SAW)
13
14Metode Simple Additive Weighting (SAW) sering juga dikenal istilah metode penjum
15lahan terbobot. Konsep dasar metode SAW adalah mencari penjumlahan terbobot dari
16rating kinerja pada setiap alternatif pada semua atribut (Fishburn, 1967) (Mac
17Crimmon, 1968). Metode SAW membutuhkan proses normalisasi matriks keputusan (X)
18ke suatu skala yang dapat diperbandingkan dengan semua rating alternatif yang a
19da.Metode ini merupakan metode yang paling terkenal dan paling banyak digunakan
20dalam menghadapi situasi Multiple Attribute Decision Making (MADM). MADM itu sen
21diri merupakan suatu metode yang digunakan untuk mencari alternatif optimal dari
22sejumlah alternatif dengan kriteria tertentu. Metode SAW ini mengharuskan pembuat
23keputusan menentukan bobot bagi setiap atribut. Skor total untuk alternatif dipe
24roleh dengan menjumlahkan seluruh hasil perkalian antara rating (yang dapat diban
25dingkan lintas atribut) dan bobot tiap atribut. Rating tiap atribut haruslah be
26bas dimensi dalam arti telah melewati proses normalisasi matriks sebelumnya.
27
282 Langkah Penyelesaian Simple Additive Weighting (SAW)
29
30Langkah Penyelesaian SAW sebagai berikut :
31
32[1] Menentukan kriteria-kriteria yang akan dijadikan acuan dalam pengambilan
33keputusan, yaitu Ci.
34
35[2] Menentukan rating kecocokan setiap alternatif pada setiap kriteria.
36
37[3] Membuat matriks keputusan berdasarkan kriteria(Ci), kemudian melakukan norma
38lisasi matriks berdasarkan persamaan yang disesuaikan dengan jenis atribut (atri
39but keuntungan ataupun atribut biaya) sehingga diperoleh matriks ternormalisasi R.
40
41[4] Hasil akhir diperoleh dari proses perankingan yaitu penjumlahan dari perkalian
42matriks ternormalisasi R dengan vektor bobot sehingga diperoleh nilai terbesar
43yang dipilih sebagai alternatif terbaik (Ai)sebagai solusi.
44
45Formula untuk melakukan normalisasi tersebut adalah:
46
47 x
48 ij
49 ------ ; jika j adalah atribut keuntungan
50 max x
51 ij
52r = {
53 ij min x
54 ij
55 ------ ; jika j adalah atribut biaya
56 x
57 ij
58
59Dimana :
60r-ij = rating kinerja ternormalisasi
61Max x-ij = nilai maksimum dari setiap baris dan kolom
62Min x-ij = nilai minimum dari setiap baris dan kolom
63X-ij = baris dan kolom dari matriks
64
65Dengan r-ij adalah rating kinerja ternormalisasi dari alternatif Ai pada atribut
66Cj; dengan i = 1,2,...,m dan j = 1,2,...,n.
67
68Nilai preferensi untuk setiap alternatif (Vi) diberikan sebagai :
69
70V = sigma w r
71 i j=1 n j ij
72
73Dimana :
74V-i = Nilai akhir dari alternatif
75w-j = Bobot yang telah ditentukan
76r-ij = Normalisasi matriks
77Nilai V-i yang lebih besar mengindikasikan bahwa alternatif Ai lebih terpilih
78
79================================================================================
80CREATE DATABASE IF NOT EXISTS db_dss;
81USE db_dss;
82
83DROP TABLE IF EXISTS saw_criterias;
84CREATE TABLE IF NOT EXISTS saw_criterias(
85 id_criteria TINYINT(3) UNSIGNED NOT NULL,
86 criteria VARCHAR(100) NOT NULL,
87 weight FLOAT NOT NULL,
88 attribute SET('benefit','cost'),
89 PRIMARY KEY(id_criteria)
90)ENGINE=MyISAM;
91
92INSERT INTO saw_criterias(id_criteria,criteria,weight,attribute)
93VALUES
94(1,'Pengalaman Kerja',0.3,'benefit'),
95(2,'Pendidikan',0.2,'benefit'),
96(3,'Usia',0.2,'benefit'),
97(4,'Status Perkawinan',0.15,'cost'),
98(5,'Alamat',0.15,'cost');
99
100SELECT * FROM saw_criterias;
101+-------------+-------------------+--------+-----------+
102| id_criteria | criteria | weight | attribute |
103+-------------+-------------------+--------+-----------+
104| 1 | Pengalaman Kerja | 0.3 | benefit |
105| 2 | Pendidikan | 0.2 | benefit |
106| 3 | Usia | 0.2 | benefit |
107| 4 | Status Perkawinan | 0.15 | cost |
108| 5 | Alamat | 0.15 | cost |
109+-------------+-------------------+--------+-----------+
1105 rows in set (0.01 sec)
111
112DROP TABLE IF EXISTS saw_alternatives;
113CREATE TABLE IF NOT EXISTS saw_alternatives(
114 id_alternative SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT,
115 name VARCHAR(30) NOT NULL,
116 PRIMARY KEY(id_alternative)
117) ENGINE=MyISAM;
118
119INSERT INTO saw_alternatives(name)
120VALUES
121('Alfian'),
122('Bella'),
123('Carlie'),
124('Dewi'),
125('Enrico');
126
127SELECT * FROM saw_alternatives;
128+----------------+--------+
129| id_alternative | name |
130+----------------+--------+
131| 1 | Alfian |
132| 2 | Bella |
133| 3 | Carlie |
134| 4 | Dewi |
135| 5 | Enrico |
136+----------------+--------+
1375 rows in set (0.00 sec)
138
139DROP TABLE IF EXISTS saw_evaluations;
140CREATE TABLE IF NOT EXISTS saw_evaluations(
141 id_alternative SMALLINT(5) UNSIGNED NOT NULL,
142 id_criteria TINYINT(3) UNSIGNED NOT NULL,
143 value FLOAT NOT NULL,
144 PRIMARY KEY (id_alternative,id_criteria)
145)ENGINE=MyISAM;
146
147INSERT INTO saw_evaluations(id_alternative,id_criteria,value)
148VALUES
149(1,1,0.5),
150(1,2,1),
151(1,3,0.7),
152(1,4,0.7),
153(1,5,0.8),
154(2,1,0.8),
155(2,2,0.7),
156(2,3,1),
157(2,4,0.5),
158(2,5,1),
159(3,1,1),
160(3,2,0.3),
161(3,3,0.4),
162(3,4,0.7),
163(3,5,1),
164(4,1,0.2),
165(4,2,1),
166(4,3,0.5),
167(4,4,0.9),
168(4,5,0.7),
169(5,1,1),
170(5,2,0.7),
171(5,3,0.4),
172(5,4,0.7),
173(5,5,1);
174
175-- perangkingan:
176
177SELECT
178 b.name,
179 SUM(
180 IF(c.attribute='benefit',
181 a.value/c.normalization,
182 c.normalization/a.value)
183 * c.weight
184 ) AS value
185FROM
186 saw_evaluations a
187 JOIN saw_alternatives b USING(id_alternative)
188 JOIN
189 (
190 SELECT
191 a.id_kriteria,
192 ROUND(IF(b.atribut='benefit',MAX(a.nilai),MIN(a.nilai)),1) AS normalisasi,
193 b.atribut,
194 b.bobot
195 FROM
196 tbl_test a
197 JOIN tbl_kriteria b USING(id_kriteria)
198 GROUP BY a.id_kriteria
199 ) c USING(id_kriteria)
200GROUP BY a.id_alternative
201ORDER BY value DESC;
202
203+--------+--------------------+
204| name | value |
205+--------+--------------------+
206| Bella | 0.8350000259280206 |
207| Enrico | 0.7321428814043804 |
208| Alfian | 0.7283928751272662 |
209| Carlie | 0.6521428849806592 |
210| Dewi | 0.5933333551158353 |
211+--------+--------------------+
2125 rows in set (0.00 sec)
213*/
214//-- database configuration
215$dbhost='localhost';
216$dbuser='root';
217$dbpass='';
218$dbname='db_dss';
219//-- database connection
220$db=new mysqli($dbhost,$dbuser,$dbpass,$dbname);
221?>
222<!doctype html>
223<html>
224<head>
225 <title>DSS SAW Method</title>
226 <style>
227 * {font-family:verdana,arial,sans-serif;font-size:1em;padding:2px;}
228 h1 {font-size:1.5em}
229 h2 {font-size:1.2em}
230 td,th {min-width:100px;border:solid 1px #999;}
231 th {background-color:#99f;}
232 table {min-width:600px;}
233 .center {text-align:center}
234 </style>
235</head>
236<body>
237 <h1>DSS SAW Method</h1>
238 <h2>
239 [1] Menentukan kriteria-kriteria yang akan dijadikan acuan dalam
240 pengambilan keputusan, yaitu C<sub>i</sub>
241 </h2>
242 <p>
243 <table>
244 <caption>
245 Tabel Kriteria C<sub>i</sub>
246 </caption>
247 <tr>
248 <th>No</th>
249 <th>Symbol</th>
250 <th>Criteria</th>
251 <th>Attribute</th>
252 </tr>
253 <?php
254 $sql='SELECT criteria,weight,attribute FROM saw_criterias';
255 $result=$db->query($sql);
256 $i=0;
257 while($row=$result->fetch_object()){
258 echo "<tr>
259 <td class='right'>".(++$i)."</td>
260 <td class='center'>C{$i}</td>
261 <td>{$row->criteria}</td>
262 <td>{$row->attribute}</td>
263 </tr>\n";
264 }
265 $result->free();
266 ?>
267 </table>
268 </p>
269 <h2>[2] Menentukan rating kecocokan setiap alternatif pada setiap kriteria.</h2>
270 <p>
271 Teknik pembobotan pada criteria dapat dilakukan dengan beragai macam cara
272 dan metode. Fase ini dikenal dengan istilah pra-proses. Namun bisa juga
273 dengan cara secara sederhana dengan memberikan nilai pada masing-masing
274 secara langsung berdasarkan persentasi nilai bobotnya. Sedangkan untuk yang
275 lebih lebih baik bisa digunakan fuzzy logic. Penggunaan Fuzzy logic, sangat
276 dianjurkan bila kritieria yang dipilih mempunyai sifat yang relative, misal
277 Umur, Panas, Tinggi, Baik atau sifat lainnya
278 </p>
279 <p>
280 <table>
281 <caption>
282 Rating Kecocokan Alternatif utk setiap Kriteria
283 </caption>
284 <tr>
285 <th rowspan='2'>Alternative</th>
286 <th colspan='5'>Criteria</th>
287 </tr>
288 <tr>
289 <th>C1</th>
290 <th>C2</th>
291 <th>C3</th>
292 <th>C4</th>
293 <th>C5</th>
294 </tr>
295 <?php
296 $sql="SELECT
297 id_alternative,
298 SUM(IF(id_criteria=1,value,0)) AS C1,
299 SUM(IF(id_criteria=2,value,0)) AS C2,
300 SUM(IF(id_criteria=3,value,0)) AS C3,
301 SUM(IF(id_criteria=4,value,0)) AS C4,
302 SUM(IF(id_criteria=5,value,0)) AS C5
303 FROM
304 saw_evaluations
305 GROUP BY id_alternative
306 ORDER BY id_alternative
307 ";
308 $result=$db->query($sql);
309 while($row=$result->fetch_object()){
310 echo "<tr class='center'>
311 <th>A{$row->id_alternative}</th>
312 <td>".round($row->C1,1)."</td>
313 <td>".round($row->C2,1)."</td>
314 <td>".round($row->C3,1)."</td>
315 <td>".round($row->C4,1)."</td>
316 <td>".round($row->C5,1)."</td>
317 </tr>\n";
318 }
319 $result->free();
320 ?>
321 </table>
322 </p>
323 <h2>[3] Membuat matrik keputusan berdasarkan Kriteria C<sub>i</sub></h2>
324 <p>
325 <table>
326 <caption>
327 Pembobotan Kriteria (w)
328 </caption>
329 <tr>
330 <th>No</th>
331 <th>Alternative</th>
332 <th>Weight</th>
333 </tr>
334 <?php
335 $sql="SELECT weight FROM saw_criterias ORDER BY id_criteria";
336 $result=$db->query($sql);
337 $i=0;
338 $W=array();
339 while($row=$result->fetch_object()){
340 $W[]=$row->weight;
341 echo "<tr class='center'>
342 <td>".(++$i)."</td>
343 <td>C{$i}</td>
344 <td>{$row->weight}</td>
345 </tr>";
346 }
347 ?>
348 </table>
349 </p>
350 <p>
351 <table>
352 <caption>
353 Matrik Keputusan(X)
354 </caption>
355 <tr>
356 <th rowspan='2'>Alternative</th>
357 <th colspan='5'>Criteria</th>
358 </tr>
359 <tr>
360 <th>C1</th>
361 <th>C2</th>
362 <th>C3</th>
363 <th>C4</th>
364 <th>C5</th>
365 </tr>
366 <?php
367 $sql="SELECT
368 a.id_alternative,
369 SUM(IF(a.id_criteria=1,a.value,0)) AS C1,
370 SUM(IF(a.id_criteria=2,a.value,0)) AS C2,
371 SUM(IF(a.id_criteria=3,a.value,0)) AS C3,
372 SUM(IF(a.id_criteria=4,a.value,0)) AS C4,
373 SUM(IF(a.id_criteria=5,a.value,0)) AS C5
374 FROM
375 saw_evaluations a
376 JOIN saw_criterias b USING(id_criteria)
377 GROUP BY a.id_alternative
378 ORDER BY a.id_alternative
379 ";
380 $result=$db->query($sql);
381 $X=array(1=>array(),2=>array(),3=>array(),4=>array(),5=>array());
382 while($row=$result->fetch_object()){
383 array_push($X[1],round($row->C1,2));
384 array_push($X[2],round($row->C2,2));
385 array_push($X[3],round($row->C3,2));
386 array_push($X[4],round($row->C4,2));
387 array_push($X[5],round($row->C5,2));
388 echo "<tr class='center'>
389 <th>A{$row->id_alternative}</th>
390 <td>".round($row->C1,2)."</td>
391 <td>".round($row->C2,2)."</td>
392 <td>".round($row->C3,2)."</td>
393 <td>".round($row->C4,2)."</td>
394 <td>".round($row->C5,2)."</td>
395 </tr>\n";
396 }
397 $result->free();
398 ?>
399 </table>
400 </p>
401 <h3>Penghitungan Normalisasi</h3>
402 <p>
403 Untuk normalisai nilai, jika faktor/attribute kriteria <em>cost</em>
404 digunakan rumusan:
405 </p>
406 <p>
407 R<sub>ij</sub> = ( min{X<sub>ij</sub>} / X<sub>ij</sub>)
408 </p>
409 <p>
410 sedangkan jika faktor/attribute kriteria <em>benefit</em> digunakan rumusan:
411 </p>
412 <p>
413 R<sub>ij</sub> = ( X<sub>ij</sub>/max{X<sub>ij</sub>} )
414 </p>
415 <p>
416 Maka nilai-nilai ternormalisasi-nya menjadi:
417 </p>
418 <p>
419 <table>
420 <caption>
421 Matrik Ternormalisasi (R)
422 </caption>
423 <tr>
424 <th rowspan='2'>Alternative</th>
425 <th colspan='5'>Criteria</th>
426 </tr>
427 <tr>
428 <th>C1</th>
429 <th>C2</th>
430 <th>C3</th>
431 <th>C4</th>
432 <th>C5</th>
433 </tr>
434 <?php
435 $sql="SELECT
436 a.id_alternative,
437 SUM(
438 IF(
439 a.id_criteria=1,
440 IF(
441 b.attribute='benefit',
442 a.value/".max($X[1]).",
443 ".min($X[1])."/a.value)
444 ,0)
445 ) AS C1,
446 SUM(
447 IF(
448 a.id_criteria=2,
449 IF(
450 b.attribute='benefit',
451 a.value/".max($X[2]).",
452 ".min($X[2])."/a.value)
453 ,0)
454 ) AS C2,
455 SUM(
456 IF(
457 a.id_criteria=3,
458 IF(
459 b.attribute='benefit',
460 a.value/".max($X[3]).",
461 ".min($X[3])."/a.value)
462 ,0)
463 ) AS C3,
464 SUM(
465 IF(
466 a.id_criteria=4,
467 IF(
468 b.attribute='benefit',
469 a.value/".max($X[4]).",
470 ".min($X[4])."/a.value)
471 ,0)
472 ) AS C4,
473 SUM(
474 IF(
475 a.id_criteria=5,
476 IF(
477 b.attribute='benefit',
478 a.value/".max($X[5]).",
479 ".min($X[5])."/a.value)
480 ,0)
481 ) AS C5
482 FROM
483 saw_evaluations a
484 JOIN saw_criterias b USING(id_criteria)
485 GROUP BY a.id_alternative
486 ORDER BY a.id_alternative
487 ";
488 $result=$db->query($sql);
489 $R=array();
490 while($row=$result->fetch_object()){
491 $R[$row->id_alternative]=array($row->C1,$row->C2,$row->C3,$row->C4,$row->C5);
492 echo "<tr class='center'>
493 <th>A{$row->id_alternative}</th>
494 <td>".round($row->C1,2)."</td>
495 <td>".round($row->C2,2)."</td>
496 <td>".round($row->C3,2)."</td>
497 <td>".round($row->C4,2)."</td>
498 <td>".round($row->C5,2)."</td>
499 </tr>\n";
500 }
501 ?>
502 </table>
503 </p>
504 <h2>[4] Perangkingan</h2>
505 <p>
506 Hasil akhir diperoleh dari proses perankingan yaitu penjumlahan dari perkalian
507 matriks ternormalisasi R dengan vektor bobot W sehingga diperoleh nilai terbesar
508 yang dipilih sebagai alternatif terbaik (A<sub>i</suB.) sebagai solusi
509 </p>
510 <p>
511 <table>
512 <caption>
513 Hasil Perangkingan
514 </caption>
515 <tr>
516 <th>No</th>
517 <th>Alternative</th>
518 <th>Result</th>
519 </tr>
520 <?php
521 $V=array();
522 $m=count($W);
523 foreach($R as $i=>$r){
524 for($j=0;$j<$m;$j++){
525 $V[$i]=(isset($V[$i])?$V[$i]:0)+$r[$j]*$W[$j];
526 }
527 }
528 arsort($V);
529 $no=0;
530 foreach($V as $i=>$v){
531 echo "<tr class='center'>
532 <td>".(++$no)."</td>
533 <td>A{$i}</td>
534 <td>{$v}</td>
535 </tr>";
536 }
537 ?>
538 </table>
539 </p>
540</body>
541</html>