MIF_E31211891/app/Http/Controllers/RekomendasiController.php

175 lines
6.0 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\User;
use App\Models\Kriteria;
use App\Models\Penilaian;
use App\Models\Alternatif;
use App\Models\Subkriteria;
use Illuminate\Http\Request;
class RekomendasiController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
$kategori = Subkriteria::where('id_kriteria', '1')->get();
$dosen = User::where('role', 'Dosen')->get();
$no = 1;
$alternatif = Alternatif::orderBy('nama', 'ASC')->get();
$dosen = User::where('role', 'Dosen')->orderBy('name', 'ASC')->whereNotIn('name', Alternatif::pluck('nama'))->get();
$kriteria = Kriteria::select('nama_kriteria')->orderby('id')->get();
for ($i = 0; $i < count($alternatif); $i++) {
$penilaian = Penilaian::where('id_alternatif', $alternatif[$i]->id)->orderby('id_kriteria')->get();
if (count($penilaian) != 0) {
$alternatif[$i]->penilaian = $penilaian;
} else {
$alternatif[$i]->penilaian = "null";
}
}
for ($a = 0; $a < count($alternatif); $a++) {
$penilaian = Penilaian::where('id_alternatif', $alternatif[$a]->id)
->join('kriteria', 'kriteria.id', '=', 'penilaian.id_kriteria')
->join('nilai','kriteria.id','=','nilai.id_kriteria')
->select(
'penilaian.id',
'penilaian.id_alternatif',
'penilaian.id_kriteria',
'penilaian.nilai',
'kriteria.jenis',
'kriteria.nama_kriteria',
'nilai.nilai as bobot'
)
->orderby('penilaian.id_kriteria')->get();
$alternatif[$a]->penilaian = $penilaian;
}
$pembagi = array();
$matriks = $alternatif;
for ($b = 0; $b < count($kriteria); $b++) {
$temp = 0;
for ($c = 0; $c < count($matriks); $c++) {
$temp2 = $matriks[$c]->penilaian[$b]->nilai;
$temp += pow($temp2, 2);
}
array_push($pembagi, sqrt($temp));
}
for ($d = 0; $d < count($matriks); $d++) {
for ($e = 0; $e < count($pembagi); $e++) {
$matriks[$d]->penilaian[$e]->nilai_ternormalisasi = $matriks[$d]->penilaian[$e]->nilai / $pembagi[$e];
}
}
$matriks_nilai = $matriks;
for ($f = 0; $f < count($matriks_nilai); $f++) {
for ($g = 0; $g < count($matriks_nilai[$f]->penilaian); $g++) {
$matriks_nilai[$f]->penilaian[$g]->nilai_ternormalisasi_nilai = ($matriks_nilai[$f]->penilaian[$g]->nilai_ternormalisasi * $matriks_nilai[$f]->penilaian[$g]->bobot);
}
}
$nilai_optimasi_1 = $matriks_nilai;
for ($h = 0; $h < count($nilai_optimasi_1); $h++) {
$temp3 = 0;
for ($i = 0; $i < count($nilai_optimasi_1[$h]->penilaian); $i++) {
if ($nilai_optimasi_1[$h]->penilaian[$i]->jenis == 'benefit') {
$temp3 += $nilai_optimasi_1[$h]->penilaian[$i]->nilai_ternormalisasi_nilai;
} else {
$temp3 -= $nilai_optimasi_1[$h]->penilaian[$i]->nilai_ternormalisasi_nilai;
}
}
$nilai_optimasi_1[$h]->optimasi_1 = $temp3;
}
$nilai_optimasi_2 = $matriks_nilai;
for ($h = 0; $h < count($nilai_optimasi_2); $h++) {
$min = 0;
$max = 0;
for ($i = 0; $i < count($matriks_nilai[$h]->penilaian); $i++) {
if ($matriks_nilai[$h]->penilaian[$i]->jenis == 'cost') {
$min += $matriks_nilai[$h]->penilaian[$i]->nilai_ternormalisasi_nilai;
} else {
$max += $matriks_nilai[$h]->penilaian[$i]->nilai_ternormalisasi_nilai;
}
}
if ($min != 0 && $max != 0) {
$matriks_nilai[$h]->optimasi_2 = $max / $min;
} elseif ($min == 0 && $max != 0) {
$matriks_nilai[$h]->optimasi_2 = $max;
} else {
$matriks_nilai[$h]->optimasi_2 = $min;
}
}
$arr_1 = array();
$arr_2 = array();
for ($j = 0; $j < count($nilai_optimasi_2); $j++) {
array_push($arr_1, $nilai_optimasi_2[$j]->optimasi_1);
array_push($arr_2, $nilai_optimasi_2[$j]->optimasi_2);
}
$rank_1 = array();
$ordered_1 = $arr_1;
rsort($ordered_1);
foreach ($arr_1 as $key => $value) {
foreach ($ordered_1 as $ordered_key => $ordered_value) {
if ($value === $ordered_value) {
$key = $ordered_key;
break;
}
}
array_push($rank_1, $key + 1);
}
$rank_2 = array();
$ordered_2 = $arr_2;
rsort($ordered_2);
foreach ($arr_2 as $key1 => $value1) {
foreach ($ordered_2 as $ordered_key1 => $ordered_value1) {
if ($value1 === $ordered_value1) {
$key1 = $ordered_key1;
break;
}
}
array_push($rank_2, $key1 + 1);
}
return view('rekomendasi', compact('kategori', 'dosen', 'no', 'kriteria', 'alternatif', 'dosen', 'pembagi', 'matriks', 'matriks_nilai', 'nilai_optimasi_1', 'nilai_optimasi_2', 'rank_1', 'rank_2'));
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*/
public function show(String $id)
{
//
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*/
public function destroy(string $id)
{
//
}
}