Advertisement
cahyadsn

DSS MDAM SAW Method

Nov 16th, 2015
795
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 15.76 KB | None | 0 0
  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. /*
  10. Metode Simple Additive Weighting (SAW)
  11.  
  12. 1  Pengertian Metode Simple Additive Weighting (SAW)
  13.  
  14. Metode Simple Additive Weighting (SAW) sering juga dikenal istilah metode penjum
  15. lahan terbobot. Konsep dasar metode SAW adalah mencari penjumlahan terbobot dari
  16. rating kinerja pada setiap alternatif pada semua atribut (Fishburn, 1967) (Mac
  17. Crimmon, 1968). Metode SAW membutuhkan proses normalisasi matriks keputusan (X)
  18. ke suatu skala yang dapat diperbandingkan dengan semua rating alternatif yang a
  19. da.Metode ini merupakan metode yang paling terkenal dan paling banyak digunakan
  20. dalam menghadapi situasi Multiple Attribute Decision Making (MADM). MADM itu sen
  21. diri merupakan suatu metode yang digunakan untuk mencari alternatif optimal dari
  22. sejumlah alternatif dengan kriteria tertentu. Metode SAW ini mengharuskan pembuat
  23. keputusan menentukan bobot bagi setiap atribut. Skor total untuk alternatif dipe
  24. roleh dengan menjumlahkan seluruh hasil perkalian antara rating (yang dapat diban
  25. dingkan lintas atribut) dan bobot tiap atribut. Rating tiap atribut haruslah be
  26. bas dimensi dalam arti telah melewati proses normalisasi matriks sebelumnya.
  27.  
  28. 2  Langkah Penyelesaian Simple Additive Weighting (SAW)
  29.  
  30. Langkah Penyelesaian SAW sebagai berikut :
  31.  
  32. [1]  Menentukan kriteria-kriteria yang akan dijadikan acuan dalam pengambilan
  33. keputusan, 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
  38. lisasi matriks berdasarkan persamaan yang disesuaikan dengan jenis atribut (atri
  39. but keuntungan ataupun atribut biaya) sehingga diperoleh matriks ternormalisasi R.
  40.  
  41. [4]  Hasil akhir diperoleh dari proses perankingan yaitu penjumlahan dari perkalian
  42. matriks ternormalisasi R dengan vektor bobot sehingga diperoleh nilai terbesar
  43. yang dipilih sebagai alternatif terbaik (Ai)sebagai solusi.
  44.  
  45. Formula untuk melakukan normalisasi tersebut adalah:
  46.  
  47.         x
  48.          ij
  49.        ------   ; jika j adalah atribut keuntungan
  50.        max x
  51.             ij
  52. r  = {
  53.  ij    min x
  54.             ij
  55.        ------   ; jika j adalah atribut biaya
  56.          x
  57.           ij
  58.  
  59. Dimana :
  60. r-ij    = rating kinerja ternormalisasi
  61. Max x-ij  = nilai maksimum dari setiap baris dan kolom
  62. Min x-ij  = nilai minimum dari setiap baris dan kolom
  63. X-ij    = baris dan kolom dari matriks
  64.  
  65. Dengan r-ij adalah rating kinerja ternormalisasi dari alternatif Ai pada atribut
  66. Cj; dengan i = 1,2,...,m dan j = 1,2,...,n.
  67.  
  68. Nilai preferensi untuk setiap alternatif (Vi) diberikan sebagai :
  69.  
  70. V = sigma  w r
  71.  i  j=1  n  j ij
  72.  
  73. Dimana :
  74. V-i  = Nilai akhir dari alternatif
  75. w-j  = Bobot yang telah ditentukan
  76. r-ij = Normalisasi matriks
  77. Nilai V-i yang lebih besar mengindikasikan bahwa alternatif Ai lebih terpilih
  78.  
  79. ================================================================================
  80. CREATE DATABASE IF NOT EXISTS db_dss;
  81. USE db_dss;
  82.  
  83. DROP TABLE IF EXISTS saw_criterias;
  84. CREATE 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.  
  92. INSERT INTO saw_criterias(id_criteria,criteria,weight,attribute)
  93. VALUES
  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.  
  100. SELECT * 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. +-------------+-------------------+--------+-----------+
  110. 5 rows in set (0.01 sec)
  111.  
  112. DROP TABLE IF EXISTS saw_alternatives;
  113. CREATE 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.  
  119. INSERT INTO saw_alternatives(name)
  120. VALUES
  121. ('Alfian'),
  122. ('Bella'),
  123. ('Carlie'),
  124. ('Dewi'),
  125. ('Enrico');
  126.  
  127. SELECT * 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. +----------------+--------+
  137. 5 rows in set (0.00 sec)
  138.  
  139. DROP TABLE IF EXISTS saw_evaluations;
  140. CREATE 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.  
  147. INSERT INTO saw_evaluations(id_alternative,id_criteria,value)
  148. VALUES
  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.  
  177. SELECT
  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
  185. FROM
  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)
  200. GROUP BY a.id_alternative
  201. ORDER 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. +--------+--------------------+
  212. 5 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>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement