182 lines
6.5 KiB
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,
|
|
];
|
|
}
|
|
}
|
|
|
|
} |