all(), [ 'kriteria' => 'required' ]); if($validator->fails()) { return redirect()->back()->with('error', 'Kriteria tidak boleh kosong'); } $data = [ 'subtitle' => 'Analisa Alternatif', ]; $id_kriteria = $request->input('kriteria'); if($request->input('delete')) { return $this->deleteAnalisaAlternatif($id_kriteria); } else { return view('admin.app.content.analisa.alternatif', compact('data', 'id_kriteria')); } } public function kriteria() { $data = [ 'subtitle' => 'Analisa Kriteria', ]; return view('admin.app.content.analisa.kriteria', compact('data')); } public function kriteriaTabel(Request $request) { if($request->isMethod('post')) { // Jumlah Kriteria $n = Kriteria::count(); $matrik = array(); $urut = 0; // Memetakan nilai dalam bentuk matrik // x = baris // y = kolom for ($x = 0; $x <= ($n - 2); $x++) { for ($y = ($x + 1); $y <= ($n - 1); $y++) { $urut++; $pilih = "pilih" . $urut; $bobot = "bobot" . $urut; // memilih input radio button yang dipilih apakah yang kiri atau kanan // jika kiri maka otomatis nilai matrix 1 dibagi bobot nilai tersebut dengan format x dan y if ($request->input($pilih) == 1) { $matrik[$x][$y] = $request->input($bobot); $matrik[$y][$x] = 1 / $request->input($bobot); } else { $matrik[$x][$y] = 1 / $request->input($bobot); $matrik[$y][$x] = $request->input($bobot); } $id_kriteria1 = getKriteriaId($x); $id_kriteria2 = getKriteriaId($y); $jumlahPerbandingan = AnalisaKriteria::where('kriteria_pertama', $id_kriteria1)->where('kriteria_kedua', $id_kriteria2)->count(); if ($jumlahPerbandingan == 0) { $insert = new AnalisaKriteria([ 'kriteria_pertama' => $id_kriteria1, 'kriteria_kedua' => $id_kriteria2, 'nilai_analisa_kriteria' => $matrik[$x][$y] ]); $insert->save(); } else { $nilaiMatrixKriteria = $matrik[$x][$y]; $update = DB::statement("UPDATE tbl_analisa_kriteria SET nilai_analisa_kriteria = '$nilaiMatrixKriteria' WHERE kriteria_pertama = '$id_kriteria1' AND kriteria_kedua = '$id_kriteria2'"); } } } // Diagonal -> bernilai 1 for ($i = 0; $i <= ($n - 1); $i++) { $matrik[$i][$i] = 1; } // Inisialisasi jumlah tiap kolom dan baris kriteria $jmlmpb = array(); $jmlmnk = array(); for ($i = 0; $i <= ($n - 1); $i++) { $jmlmpb[$i] = 0; $jmlmnk[$i] = 0; } // Menghitung jumlah pada kolom kriteria tabel perbandingan berpasangan for ($x = 0; $x <= ($n - 1); $x++) { for ($y = 0; $y <= ($n - 1); $y++) { $value = $matrik[$x][$y]; $jmlmpb[$y] += $value; } } // Menghitung jumlah pada baris kriteria tabel nilai kriteria // Matrikb merupakan matrik yang telah dinormalisasi for ($x = 0; $x <= ($n - 1); $x++) { for ($y = 0; $y <= ($n - 1); $y++) { $matrikb[$x][$y] = $matrik[$x][$y] / $jmlmpb[$y]; $value = $matrikb[$x][$y]; $jmlmnk[$x] += $value; } // Nilai Priority Vektor $pv[$x] = $jmlmnk[$x] / $n; // Memasukan nilai priority vektor ke dalam tabel tb_pv_kriteria $id_kriteria = getKriteriaId($x); $jumlahPV = BobotKriteria::where('id_kriteria', $id_kriteria)->count(); if ($jumlahPV == 0) { $insert = new BobotKriteria([ 'id_kriteria' => $id_kriteria, 'nilai' => $pv[$x] ]); $insert->save(); } else { $nilaiPV = $pv[$x]; $update = DB::statement("UPDATE tb_bobot_alternatif SET nilai = '$nilaiPV' WHERE id_kriteria = '$id_kriteria'"); } } $eigenVektor = getEigenVector($jmlmpb, $jmlmnk, $n); $consIndex = getConsIndex($jmlmpb, $jmlmnk, $n); $consRatio = getConsRatio($jmlmpb, $jmlmnk, $n); $data['n'] = $n; $data['matrik'] = $matrik; $data['jmlmpb'] = $jmlmpb; $data['jmlmnk'] = $jmlmnk; $data['matrikb'] = $matrikb; $data['pv'] = $pv; $data['eigenVektor'] = $eigenVektor; $data['consIndex'] = $consIndex; $data['consRatio'] = $consRatio; } $data['subtitle'] = 'Analisa Kriteria Tabel'; return view('admin.app.content.analisa.kriteria-tabel', compact('data')); } public function deleteKriteria($id_kriteria) { if(AnalisaKriteria::delete() && BobotKriteria::delete()) { return redirect()->to(app_url('analisa-kriteria'))->with('success', 'Data kriteria berhasil di hapus'); } else { return redirect()->back()->with('error', 'Data alternatif tidak ditemukan'); } } public function alternatifForm() { $data = [ 'subtitle' => 'Alternatif Form' ]; return view('admin.app.content.analisa.alternatif-form', compact('data')); } public function alternatifTabel(Request $request, $id_kriteria) { if($request->isMethod('post')) { // Jumlah Alternatif $n = Alternatif::count(); $matrik = array(); $urut = 0; // Memetakan nilai dalam bentuk matrik // x = baris // y = kolom for ($x = 0; $x <= ($n - 2); $x++) { for ($y = ($x + 1); $y <= ($n - 1); $y++) { $urut++; $pilih = "pilih" . $urut; $bobot = "bobot" . $urut; // Ambil nilai bobot dari request, jika tidak ada, set nilai default 0 $nilaiBobot = $request->input($bobot) ?? 0; // memilih input radio button yang dipilih apakah yang kiri atau kanan // jika kiri maka otomatis nilai matrix 1 dibagi bobot nilai tersebut dengan format x dan y if ($request->input($pilih) == 1) { $matrik[$x][$y] = $nilaiBobot; $matrik[$y][$x] = $nilaiBobot != 0 ? 1 / $nilaiBobot : 0; } else { $matrik[$x][$y] = $nilaiBobot != 0 ? 1 / $nilaiBobot : 0; $matrik[$y][$x] = $nilaiBobot; } $id_alternatif1 = getAlternatifId($x); $id_alternatif2 = getAlternatifId($y); $jumlahPerbandingan = AnalisaAlternatif::where('alternatif_pertama', $id_alternatif1)->where('alternatif_kedua', $id_alternatif2)->where('id_kriteria', $id_kriteria)->count(); if ($jumlahPerbandingan == 0) { $insert = new AnalisaAlternatif([ 'alternatif_pertama' => $id_alternatif1, 'alternatif_kedua' => $id_alternatif2, 'id_kriteria' => $id_kriteria, 'nilai_analisa_alternatif' => $matrik[$x][$y] ]); $insert->save(); } else { $nilaiMatrixAlternatif = $matrik[$x][$y]; $update = DB::statement("UPDATE tbl_analisa_alternatif SET nilai_analisa_alternatif = '$nilaiMatrixAlternatif' WHERE id_kriteria = '$id_kriteria' AND alternatif_pertama = '$id_alternatif1' AND alternatif_kedua = '$id_alternatif2'"); } } } // Diagonal -> bernilai 1 for ($i = 0; $i <= ($n - 1); $i++) { $matrik[$i][$i] = 1; } // Inisialisasi jumlah tiap kolom dan baris kriteria $jmlmpb = array(); $jmlmnk = array(); for ($i = 0; $i <= ($n - 1); $i++) { $jmlmpb[$i] = 0; $jmlmnk[$i] = 0; } // Menghitung jumlah pada kolom kriteria tabel perbandingan berpasangan for ($x = 0; $x <= ($n - 1); $x++) { for ($y = 0; $y <= ($n - 1); $y++) { $value = $matrik[$x][$y]; $jmlmpb[$y] += $value; } } // Menghitung jumlah pada baris kriteria tabel nilai kriteria // Matrikb merupakan matrik yang telah dinormalisasi for ($x = 0; $x <= ($n - 1); $x++) { for ($y = 0; $y <= ($n - 1); $y++) { $matrikb[$x][$y] = $matrik[$x][$y] / $jmlmpb[$y]; $value = $matrikb[$x][$y]; $jmlmnk[$x] += $value; } // Nilai Priority Vektor $pv[$x] = $jmlmnk[$x] / $n; // Memasukan nilai priority vektor ke dalam tabel tb_pv_kriteria $id_alternatif = getAlternatifId($x); $jumlahPV = BobotAlternatif::where('id_kriteria', $id_kriteria)->where('id_alternatif', $id_alternatif)->count(); if ($jumlahPV == 0) { $insert = new BobotAlternatif([ 'id_alternatif' => $id_alternatif, 'id_kriteria' => $id_kriteria, 'nilai' => $pv[$x] ]); $insert->save(); } else { $nilaiPV = $pv[$x]; $update = DB::statement("UPDATE tb_bobot_alternatif SET nilai = '$nilaiPV' WHERE id_kriteria = '$id_kriteria' AND id_alternatif = '$id_alternatif'"); } } $eigenVektor = getEigenVector($jmlmpb, $jmlmnk, $n); $consIndex = getConsIndex($jmlmpb, $jmlmnk, $n); $consRatio = getConsRatio($jmlmpb, $jmlmnk, $n); $data['n'] = $n; $data['matrik'] = $matrik; $data['jmlmpb'] = $jmlmpb; $data['jmlmnk'] = $jmlmnk; $data['matrikb'] = $matrikb; $data['pv'] = $pv; $data['eigenVektor'] = $eigenVektor; $data['consIndex'] = $consIndex; $data['consRatio'] = $consRatio; } $data['subtitle'] = 'Analisa Alternatif Tabel'; return view('admin.app.content.analisa.alternatif-tabel', compact('data')); } public function deleteAnalisaAlternatif($id_kriteria) { $data_alternatif = AnalisaAlternatif::where('id_kriteria', $id_kriteria); $bobot_alternatif = BobotAlternatif::where('id_kriteria', $id_kriteria); if($data_alternatif->delete() && $bobot_alternatif->delete()) { return redirect()->to(app_url('analisa-alternatif-form'))->with('success', 'Data alternatif berhasil di hapus'); } else { return redirect()->back()->with('error', 'Data alternatif tidak ditemukan'); } } }