175 lines
6.0 KiB
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)
|
|
{
|
|
//
|
|
}
|
|
} |