0.00, 2 => 0.00, 3 => 0.58, 4 => 0.90, 5 => 1.12, 6 => 1.24, 7 => 1.32, 8 => 1.41, 9 => 1.45, 10 => 1.49, 11 => 1.51, 12 => 1.48, 13 => 1.56, 14 => 1.57, 15 => 1.59 ]; public function showPerbandingan() { $kriterias = Kriteria::all(); return view('admin.proses.perbandingan', compact('kriterias')); } public function prosesSementara(Request $request) { $request->validate([ 'nilai' => 'required|array', 'waktu_makan_id' => 'required|exists:waktu_makans,id' ]); // Simpan waktu_makan_id ke session Session::put('waktu_makan_id', $request->waktu_makan_id); $waktuMakanId = $request->waktu_makan_id; $kriterias = Kriteria::all(); $nilai = []; // Hapus data perbandingan lama untuk waktu makan ini foreach ($kriterias as $baris) { foreach ($kriterias as $kolom) { if ($baris->id != $kolom->id) { PerbandinganKriteria::where([ ['kriteria_id_1', $baris->id], ['kriteria_id_2', $kolom->id], ['waktu_makan_id', $waktuMakanId] ])->delete(); } } } foreach ($kriterias as $baris) { foreach ($kriterias as $kolom) { if ($baris->id == $kolom->id) { $nilai[$baris->id][$kolom->id] = 1; } elseif (isset($request->nilai[$baris->id][$kolom->id])) { $val = floatval($request->nilai[$baris->id][$kolom->id]); $nilai[$baris->id][$kolom->id] = $val; $nilai[$kolom->id][$baris->id] = 1 / $val; // Simpan ke database dengan waktu_makan_id PerbandinganKriteria::updateOrCreate( [ 'kriteria_id_1' => $baris->id, 'kriteria_id_2' => $kolom->id, 'waktu_makan_id' => $waktuMakanId ], [ 'nilai' => $val ] ); } } } Session::put('matriks', $nilai); return redirect()->route('perbandingan') ->with('success', 'Perbandingan kriteria berhasil disimpan.'); } public function simpanPerbandingan(Request $request) { $matriks = Session::get('matriks'); $waktuMakanId = Session::get('waktu_makan_id'); if (!$matriks) { return redirect()->route('perbandingan') ->with('error', 'Belum ada data untuk disimpan.'); } if (!$waktuMakanId) { return redirect()->route('perbandingan') ->with('error', 'Waktu makan belum dipilih.'); } // Simpan matriks dan waktu makan ke session Session::put('matriks_perbandingan', $matriks); Session::put('waktu_makan_id', $waktuMakanId); return redirect()->route('hasil.normalisasi') ->with('success', 'Data perbandingan berhasil disimpan!'); } public function normalisasi() { $matriks = Session::get('matriks_perbandingan'); $waktuMakanId = Session::get('waktu_makan_id'); if (!$matriks || !$waktuMakanId) { return redirect()->route('perbandingan') ->with('error', 'Belum ada data untuk dinormalisasi.'); } $kriterias = Kriteria::all(); $normalisasi = []; $jumlahKolom = []; $bobot = []; $totalBobot = 0; // Hitung jumlah kolom foreach ($kriterias as $kolom) { $jumlahKolom[$kolom->id] = 0; foreach ($kriterias as $baris) { $jumlahKolom[$kolom->id] += $matriks[$baris->id][$kolom->id]; } } // Normalisasi foreach ($kriterias as $baris) { foreach ($kriterias as $kolom) { $normalisasi[$baris->id][$kolom->id] = $matriks[$baris->id][$kolom->id] / $jumlahKolom[$kolom->id]; } } // Hitung bobot foreach ($kriterias as $kriteria) { $bobot[$kriteria->id] = array_sum($normalisasi[$kriteria->id]) / count($kriterias); $totalBobot += $bobot[$kriteria->id]; } // Normalisasi bobot foreach ($bobot as $key => $value) { $bobot[$key] = $value / $totalBobot; } // Hitung CI dan CR $lambdaMax = 0; foreach ($kriterias as $kriteria) { $sum = 0; foreach ($kriterias as $k) { $sum += $matriks[$kriteria->id][$k->id] * $bobot[$k->id]; } $lambdaMax += $sum / $bobot[$kriteria->id]; } $lambdaMax = $lambdaMax / count($kriterias); $CI = ($lambdaMax - count($kriterias)) / (count($kriterias) - 1); $CR = $CI / $this->RI[count($kriterias)]; // Simpan bobot ke database foreach ($bobot as $kriteriaId => $value) { BobotKriteria::updateOrCreate( [ 'kriteria_id' => $kriteriaId, 'waktu_makan_id' => $waktuMakanId ], ['bobot' => $value] ); } // Simpan CR ke database ConsistencyRatioCriteria::updateOrCreate( [ 'waktu_makan_id' => $waktuMakanId ], [ 'ci' => $CI, 'cr' => $CR, 'is_consistent' => $CR <= 0.1 ] ); Session::put('bobot_kriteria', $bobot); Session::put('tahap_kriteria_selesai', true); // Ambil data waktu makan $waktuMakan = \App\Models\WaktuMakan::findOrFail($waktuMakanId); return view('admin.proses.normalisasi', [ 'kriterias' => $kriterias, 'normalisasi' => $normalisasi, 'bobot' => $bobot, 'ci' => $CI, 'cr' => $CR, 'is_consistent' => $CR <= 0.1, 'waktu_makan_id' => $waktuMakanId, 'waktu_makan' => $waktuMakan // Tambahkan ini untuk menghindari query di view ]); } }