get(); $data['kriteria'] = DB::table('kriteria')->orderByDesc('bobot')->get(); return view('backend.kriteria.index', $data); } public function tambah() { return view('backend.kriteria.tambah'); } function create(Request $request) { $request->validate([ 'nama_kriteria' => 'required|unique:kriteria', 'keterangan_upload' => 'required' ], [ 'nama_kriteria.required' => 'Nama wajib diisi', 'nama_kriteria.unique' => 'Nama kriteria sudah ada, harap menggunakan nama lain', 'keterangan_upload.required' => 'Keterangan Upload wajib diisi', ]); $save = new Criteria(); $save->nama_kriteria = trim($request->nama_kriteria); $save->keterangan_upload = trim($request->keterangan_upload); $save->save(); return redirect()->route('kriteria')->with(['success' => 'Tambah Kriteria Berhasil!']); } function edit($id) { $data = Criteria::where('id', $id)->get(); return view('backend.kriteria.edit', ['kt' => $data]); } function update(Request $request) { $request->validate([ 'nama_kriteria' => 'required', 'keterangan_upload' => 'required' ], [ 'nama_kriteria.required' => 'Nama wajib diisi', 'keterangan_upload.required' => 'Keterangan Upload wajib diisi', ]); $kriteria = Criteria::find($request->id); $kriteria->nama_kriteria = $request->nama_kriteria; $kriteria->keterangan_upload = $request->keterangan_upload; $kriteria->save(); return redirect()->route('kriteria')->with(['success' => 'Edit Kriteria Berhasil!']); } function hapus($id) { DB::table('kriteria')->where('id', $id)->delete(); return redirect()->route('kriteria')->with(['success' => 'Hapus Berhasil!']); } function preferensi() { $data['kriteria'] = Criteria::all(); $result = array(); $i = 0; foreach ($data['kriteria'] as $row1) { $ii = 0; foreach ($data['kriteria'] as $row2) { if ($i < $ii) { // $kriteria_ahp = $this->Kriteria_ahp_model->get_kriteria_ahp($row1->id_kriteria, $row2->id_kriteria)->row(); $kriteria_ahp = DB::table('kriteria_ahps') // KriteriaAhp:: ->where('id_kriteria1', '=', $row1->id) ->where('id_kriteria2', '=', $row2->id) ->first(); if (empty($kriteria_ahp)) { $ahp = new KriteriaAhp(); $ahp->id_kriteria1 = $row1->id; $ahp->id_kriteria2 = $row2->id; $ahp->nilai1 = 1; $ahp->nilai2 = 1; $ahp->save(); // $params = array([]); // $this->Kriteria_ahp_model->add_kriteria_ahp($params); $nilai_1 = 1; $nilai_2 = 1; } else { $nilai_1 = $kriteria_ahp->nilai1; $nilai_2 = $kriteria_ahp->nilai2; } $nilai = 0; if ($nilai_1 < 1) { $nilai = $nilai_2; } elseif ($nilai_1 > 1) { $nilai = -$nilai_1; } elseif ($nilai_1 == 1) { $nilai = 1; } $result[$row1->id][$row2->id] = $nilai; } $ii++; } $i++; } $data['kepentingan'] = [ '1' => "Sama pentingnya (Equal Importance)", '2' => "Sama hingga sedikit lebih penting", '3' => "Sedikit lebih penting (Slightly more importance)", '4' => "Sedikit lebih hingga jelas lebih penting", '5' => "Jelas lebih penting (Materially more importance)", '6' => "Jelas hingga sangat jelas lebih penting", '7' => "Sangat jelas lebih penting (Significantly more importance)", '8' => "Sangat jelas hingga mutlak lebih penting", '9' => "Mutlak lebih penting (Absolutely more importance)", ]; $data['kriteria_ahp'] = $result; return view('backend.kriteria.prioritas', $data); } function bobot(Request $request) { $data['kriteria'] = Criteria::all(); if (isset($_POST['save'])) { KriteriaAhp::truncate(); $i = 0; foreach ($data['kriteria'] as $row1) { $ii = 0; foreach ($data['kriteria'] as $row2) { if ($i < $ii) { $nilai_input = $request->post('nilai_' . $row1->id . '_' . $row2->id); $nilai_1 = 0; $nilai_2 = 0; if ($nilai_input < 1) { $nilai_1 = abs($nilai_input); $nilai_2 = number_format(1 / abs($nilai_input), 5); } elseif ($nilai_input > 1) { $nilai_1 = number_format(1 / abs($nilai_input), 5); $nilai_2 = abs($nilai_input); } elseif ($nilai_input == 1) { $nilai_1 = 1; $nilai_2 = 1; } KriteriaAhp::insert([ 'id_kriteria1' => $row1->id, 'id_kriteria2' => $row2->id, 'nilai1' => $nilai_1, 'nilai2' => $nilai_2, ]); } $ii++; } $i++; } return redirect()->back()->with(['success' => 'Nilai perbandingan kriteria berhasil disimpan!']); } if (isset($_POST['check'])) { if (count($data['kriteria']) < 3) { return redirect()->back()->with(['error' => 'Jumlah kriteria kurang, minimal 3!']); } else { $id_kriteria = array(); foreach ($data['kriteria'] as $row) $id_kriteria[] = $row->id; } // perhitungan metode AHP $matrik_kriteria = $this->ahp_get_matrik_kriteria($id_kriteria); $jumlah_kolom = $this->ahp_get_jumlah_kolom($matrik_kriteria); $matrik_normalisasi = $this->ahp_get_normalisasi($matrik_kriteria, $jumlah_kolom); $prioritas = $this->ahp_get_prioritas($matrik_normalisasi); $matrik_baris = $this->ahp_get_matrik_baris($prioritas, $matrik_kriteria); $jumlah_matrik_baris = $this->ahp_get_jumlah_matrik_baris($matrik_baris); $hasil_tabel_konsistensi = $this->ahp_get_tabel_konsistensi($jumlah_matrik_baris, $prioritas); $n = count($jumlah_matrik_baris); $lambda_maks = array_sum($jumlah_matrik_baris); $ci = ($lambda_maks - $n) / ($n - 1); $ir = array(0, 0, 0.58, 0.9, 1.12, 1.24, 1.32, 1.41, 1.45, 1.49, 1.51, 1.48, 1.56, 1.57, 1.59); if ($n <= 15) { $ir = $ir[$n - 1]; } else { $ir = $ir[14]; } $cr = number_format($ci / $ir, 5); $i = 0; foreach ($data['kriteria'] as $row) { $kriteria = Criteria::find($row->id); $kriteria->bobot = $prioritas[$i++]; $kriteria->save(); } $data['list_data'] = $this->tampil_data_1($matrik_kriteria, $jumlah_kolom); $data['list_data2'] = $this->tampil_data_2($matrik_normalisasi, $prioritas, $jumlah_kolom); $data['list_data3'] = $this->tampil_data_3($matrik_baris, $jumlah_matrik_baris); $list_data = $this->tampil_data_4($jumlah_matrik_baris, $prioritas, $hasil_tabel_konsistensi); $data['list_data4'] = $list_data[0]; $data['list_data5'] = $list_data[1]; if ($cr <= 0.1) { Session::flash('success', 'Nilai perbandingan: KONSISTEN!'); } else { Session::flash('error', "Nilai perbandingan: $cr atau TIDAK KONSISTEN! "); } } $result = array(); $i = 0; foreach ($data['kriteria'] as $row1) { $ii = 0; foreach ($data['kriteria'] as $row2) { if ($i < $ii) { $kriteria_ahp = DB::table('kriteria_ahps') ->where('id_kriteria1', '=', $row1->id) ->where('id_kriteria2', '=', $row2->id) ->first(); if (empty($kriteria_ahp)) { $ahp = new KriteriaAhp(); $ahp->id_kriteria1 = $row1->id; $ahp->id_kriteria2 = $row2->id; $ahp->nilai1 = 1; $ahp->nilai2 = 1; $ahp->save(); $nilai_1 = 1; $nilai_2 = 1; } else { $nilai_1 = $kriteria_ahp->nilai1; $nilai_2 = $kriteria_ahp->nilai2; } $nilai = 0; if ($nilai_1 < 1) { $nilai = $nilai_2; } elseif ($nilai_1 > 1) { $nilai = -$nilai_1; } elseif ($nilai_1 == 1) { $nilai = 1; } $result[$row1->id][$row2->id] = $nilai; } $ii++; } $i++; } $data['kepentingan'] = [ '1' => "Sama pentingnya (Equal Importance)", '2' => "Sama hingga sedikit lebih penting", '3' => "Sedikit lebih penting (Slightly more importance)", '4' => "Sedikit lebih hingga jelas lebih penting", '5' => "Jelas lebih penting (Materially more importance)", '6' => "Jelas hingga sangat jelas lebih penting", '7' => "Sangat jelas lebih penting (Significantly more importance)", '8' => "Sangat jelas hingga mutlak lebih penting", '9' => "Mutlak lebih penting (Absolutely more importance)", ]; $data['kriteria_ahp'] = $result; return view('backend.kriteria.prioritas', $data); } // --- metode AHP --- START public function ahp_get_matrik_kriteria($kriteria) { $matrik = array(); $i = 0; foreach ($kriteria as $row1) { $ii = 0; foreach ($kriteria as $row2) { if ($i == $ii) { $matrik[$i][$ii] = 1; } else { if ($i < $ii) { $kriteria_ahp = DB::table('kriteria_ahps') ->where('id_kriteria1', '=', $row1) ->where('id_kriteria2', '=', $row2) ->first(); if (empty($kriteria_ahp)) { $matrik[$i][$ii] = 1; $matrik[$ii][$i] = 1; } else { $matrik[$i][$ii] = $kriteria_ahp->nilai1; $matrik[$ii][$i] = $kriteria_ahp->nilai2; } } } $ii++; } $i++; } return $matrik; } public function ahp_get_jumlah_kolom($matrik) { $jumlah_kolom = array(); for ($i = 0; $i < count($matrik); $i++) { $jumlah_kolom[$i] = 0; for ($ii = 0; $ii < count($matrik); $ii++) { $jumlah_kolom[$i] = $jumlah_kolom[$i] + $matrik[$ii][$i]; } } return $jumlah_kolom; } public function ahp_get_normalisasi($matrik, $jumlah_kolom) { $matrik_normalisasi = array(); for ($i = 0; $i < count($matrik); $i++) { for ($ii = 0; $ii < count($matrik); $ii++) { $matrik_normalisasi[$i][$ii] = $matrik[$i][$ii] / $jumlah_kolom[$ii]; // $matrik_normalisasi[$i][$ii] = $matrik[$i][$ii] / $jumlah_kolom[$ii]; } } return $matrik_normalisasi; } public function ahp_get_prioritas($matrik_normalisasi) { $prioritas = array(); for ($i = 0; $i < count($matrik_normalisasi); $i++) { $prioritas[$i] = 0; for ($ii = 0; $ii < count($matrik_normalisasi); $ii++) { $prioritas[$i] = $prioritas[$i] + $matrik_normalisasi[$i][$ii]; } $prioritas[$i] = $prioritas[$i] / count($matrik_normalisasi); // $prioritas[$i] = $prioritas[$i] / count($matrik_normalisasi); } return $prioritas; } public function ahp_get_matrik_baris($prioritas, $matrik_kriteria) { $matrik_baris = array(); for ($i = 0; $i < count($matrik_kriteria); $i++) { for ($ii = 0; $ii < count($matrik_kriteria); $ii++) { $matrik_baris[$i][$ii] = $prioritas[$ii] * $matrik_kriteria[$i][$ii]; } } return $matrik_baris; } public function ahp_get_jumlah_matrik_baris($matrik_baris) { $jumlah_baris = array(); for ($i = 0; $i < count($matrik_baris); $i++) { $jumlah_baris[$i] = 0; for ($ii = 0; $ii < count($matrik_baris); $ii++) { $jumlah_baris[$i] = $jumlah_baris[$i] + $matrik_baris[$i][$ii]; } } return $jumlah_baris; } public function ahp_get_tabel_konsistensi($jumlah_matrik_baris, $prioritas) { $jumlah = array(); for ($i = 0; $i < count($jumlah_matrik_baris); $i++) { $jumlah[$i] = $jumlah_matrik_baris[$i] + $prioritas[$i]; } return $jumlah; } public function ahp_uji_konsistensi($tabel_konsistensi) { $jumlah = array_sum($tabel_konsistensi); $n = count($tabel_konsistensi); $lambda_maks = $jumlah / $n; $ci = ($lambda_maks - $n) / ($n - 1); $ir = array(0, 0, 0.58, 0.9, 1.12, 1.24, 1.32, 1.41, 1.45, 1.49, 1.51, 1.48, 1.56, 1.57, 1.59); if ($n <= 15) { $ir = $ir[$n - 1]; } else { $ir = $ir[14]; } $cr = number_format($ci / $ir, 5); if ($cr <= 0.1) { // return true; Session::flash('success', 'Nilai perbandingan: KONSISTEN!'); } else { Session::flash('error', "Nilai perbandingan: $cr atau TIDAK KONSISTEN!"); // return false; } return $cr; } // --- metode AHP --- END // --- untuk menampilkan langkah perhitungan --- public function tampil_data_1($matrik_kriteria, $jumlah_kolom) { $kriteria = Criteria::all(); // --- tabel matriks perbandingan berpasangan $list_data = ''; $list_data .= '
n | = ' . $n . ' | |
λ maks | = ' . number_format($lambda_maks, 5) . ' | |
CI | = ' . number_format($ci, 5) . ' | |
CR | = ' . $cr . ' | |
CR <= 0.1 | '; if ($cr <= 0.1) { $list_data5 .= 'Konsisten | '; } else { $list_data5 .= 'Tidak Konsisten | '; } $list_data5 .= '