TIF_E41202317/app/Http/Controllers/FuzzyController.php

182 lines
6.5 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Siswa;
use App\Models\Kategori;
class FuzzyController extends Controller
{
public function index2()
{
// Ambil data siswa dan kategori dari database
$siswa = Siswa::all();
$kategori = Kategori::all();
$max_pengetahuan = Siswa::select('pengetahuan')->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,
];
}
}
}