max('pengetahuan'); $max_keterampilan = Siswa::select('keterampilan')->max('keterampilan'); $max_sikap = Siswa::select('sikap')->max('sikap'); $max_kehadiran = Siswa::select('kehadiran')->max('kehadiran'); $sum_kategori = $kategori->sum('interest'); $c_pengetahuan = number_format((Kategori::where('kode', '01')->first()->interest / $sum_kategori) * 100, 2, '.', ','); $c_keterampilan = number_format((Kategori::where('kode', '02')->first()->interest / $sum_kategori) * 100, 2, '.', ','); $c_sikap = number_format((Kategori::where('kode', '03')->first()->interest / $sum_kategori) * 100, 2, '.', ','); $c_kehadiran = number_format((Kategori::where('kode', '04')->first()->interest / $sum_kategori) * 100, 2, '.', ','); foreach ($siswa as $s) { // Normalisasi Matriks Keputusan $s->pengetahuan = $s->pengetahuan / $max_pengetahuan; $s->keterampilan = $s->keterampilan / $max_keterampilan; $s->sikap = $s->sikap / $max_sikap; $s->kehadiran = $s->kehadiran / $max_kehadiran; // Pembentukan Matriks Keputusan Ternormalisasi Tertimbang $s->pengetahuan_ternormalisasi = $s->pengetahuan * $c_pengetahuan; $s->keterampilan_ternormalisasi = $s->keterampilan * $c_keterampilan; $s->sikap_ternormalisasi = $s->sikap * $c_sikap; $s->kehadiran_ternormalisasi = $s->kehadiran * $c_kehadiran; // Hitung nilai FMCDM $totalNilai = $s->pengetahuan_ternormalisasi + $s->keterampilan_ternormalisasi + $s->sikap_ternormalisasi + $s->kehadiran_ternormalisasi; $s->fmcdm = $totalNilai; } // Normalisasi nilai FMCDM $sum_fmcdm = $siswa->sum('fmcdm'); foreach ($siswa as $s) { $s->fmcdm = $s->fmcdm / $sum_fmcdm; } // Urutkan siswa berdasarkan nilai FMCDM $siswa = $siswa->sortByDesc('fmcdm')->values(); // Tambahkan ranking $siswa->each(function ($s, $index) { $s->ranking = $index + 1; }); // Assign hasil siswa ke variabel $hasilSiswa untuk dikirim ke view $hasilSiswa = $siswa; return view('fuzzy.index', compact('hasilSiswa', 'kategori')); } public function index() { // Ambil data siswa dan kategori dari database $siswa = Siswa::all(); $kategori = Kategori::all(); $pengetahuan = Kategori::where('kode', '01')->first(); $keterampilan = Kategori::where('kode', '02')->first(); $sikap = Kategori::where('kode', '03')->first(); $kehadiran = Kategori::where('kode', '04')->first(); // Fuzzy $x_pengetahuan = $pengetahuan->x; $y_pengetahuan = $pengetahuan->y; $z_pengetahuan = $pengetahuan->z; $x_keterampilan = $keterampilan->x; $y_keterampilan = $keterampilan->y; $z_keterampilan = $keterampilan->z; $x_sikap = $sikap->x; $y_sikap = $sikap->y; $z_sikap = $sikap->z; $x_kehadiran = $kehadiran->x; $y_kehadiran = $kehadiran->y; $z_kehadiran = $kehadiran->z; foreach ($siswa as $s) { $s->bobot_pengetahuan = $this->getBobot($s->pengetahuan); $s->bobot_keterampilan = $this->getBobot($s->keterampilan); $s->bobot_sikap = $this->getBobot($s->sikap); $s->bobot_kehadiran = $this->getBobot($s->kehadiran); // Hitung Indeks Kecocokan Fuzzy $fuzzy_pengetahuan = $this->getBobotFuzzy($s->pengetahuan); $fuzzy_keterampilan = $this->getBobotFuzzy($s->keterampilan); $fuzzy_sikap = $this->getBobotFuzzy($s->sikap); $fuzzy_kehadiran = $this->getBobotFuzzy($s->kehadiran); $s->x = (($x_pengetahuan * $fuzzy_pengetahuan['x']) + ($x_keterampilan * $fuzzy_keterampilan['x']) + ($x_sikap * $fuzzy_sikap['x']) + ($x_kehadiran * $fuzzy_kehadiran['x']))/4; $s->y = (($y_pengetahuan * $fuzzy_pengetahuan['y']) + ($y_keterampilan * $fuzzy_keterampilan['y']) + ($y_sikap * $fuzzy_sikap['y']) + ($y_kehadiran * $fuzzy_kehadiran['y']))/4; $s->z = (($z_pengetahuan * $fuzzy_pengetahuan['z']) + ($z_keterampilan * $fuzzy_keterampilan['z']) + ($z_sikap * $fuzzy_sikap['z']) + ($z_kehadiran * $fuzzy_kehadiran['z']))/4; } // Assign hasil siswa ke variabel $hasilSiswa untuk dikirim ke view $hasilSiswa = $siswa; return view('fuzzy.index', compact('hasilSiswa', 'kategori')); } function getBobot($nilai) { if ($nilai < 60) { return 'SK'; } else if ($nilai >= 61 && $nilai <= 74) { return 'K'; } else if ($nilai >= 75 && $nilai <= 80) { return 'C'; } else if ($nilai >= 81 && $nilai <= 90) { return 'B'; } else if ($nilai >= 91 && $nilai <= 100) { return 'SB'; } else { return 'SK'; } } function getBobotFuzzy($nilai) { if ($nilai < 60) { return [ 'x' => 0, 'y' => 0, 'z' => 0.25, ]; } else if ($nilai >= 61 && $nilai <= 74) { return [ 'x' => 0, 'y' => 0.25, 'z' => 0.5, ]; } else if ($nilai >= 75 && $nilai <= 80) { return [ 'x' => 0.25, 'y' => 0.5, 'z' => 0.75, ]; } else if ($nilai >= 81 && $nilai <= 90) { return [ 'x' => 0.5, 'y' => 0.75, 'z' => 1, ]; } else if ($nilai >= 91 && $nilai <= 100) { return [ 'x' => 0.75, 'y' => 1, 'z' => 1, ]; } else { return [ 'x' => 0, 'y' => 0, 'z' => 0.25, ]; } } }