123 lines
3.8 KiB
PHP
123 lines
3.8 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\Siswa;
|
|
use App\Models\Kategori;
|
|
use Illuminate\Http\Request;
|
|
use App\Http\Controllers\Controller;
|
|
|
|
class MainController extends Controller
|
|
{
|
|
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) {
|
|
// 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 = (($fuzzy_pengetahuan['x'] * $x_pengetahuan) +
|
|
($fuzzy_keterampilan['x'] * $x_keterampilan) +
|
|
($fuzzy_sikap['x'] * $x_sikap) +
|
|
($fuzzy_kehadiran['x'] * $x_kehadiran))/4;
|
|
|
|
$s->y = (($fuzzy_pengetahuan['y'] * $y_pengetahuan) +
|
|
($fuzzy_keterampilan['y'] * $y_keterampilan) +
|
|
($fuzzy_sikap['y'] * $y_sikap) +
|
|
($fuzzy_kehadiran['y'] * $y_kehadiran))/4;
|
|
|
|
$s->z = (($fuzzy_pengetahuan['z'] * $z_pengetahuan) +
|
|
($fuzzy_keterampilan['z'] * $z_keterampilan) +
|
|
($fuzzy_sikap['z'] * $z_sikap) +
|
|
($fuzzy_kehadiran['z'] * $z_kehadiran))/4;
|
|
// Alpha = 0
|
|
$s->fmcdm_a = 1/2 * ((0 * $s->z) + $s->y + (1 - 0) * $s->x);
|
|
|
|
// Alpha = 0.5
|
|
$s->fmcdm_b = 1/2 * ((0.5 * $s->z) + $s->y + (1 - 0.5) * $s->x);
|
|
|
|
// Alpha = 1
|
|
$s->fmcdm_c = 1/2 * ((1 * $s->z) + $s->y + (1 - 1) * $s->x);
|
|
}
|
|
|
|
$siswa = $siswa->sortByDesc('fmcdm_c')->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('main', compact('hasilSiswa', 'kategori'));
|
|
}
|
|
|
|
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,
|
|
];
|
|
}
|
|
}
|
|
}
|
|
|