MIF_E31212322/app/Http/Controllers/PerbandinganKController.php

139 lines
5.0 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\datakriteria;
use App\Models\CriteriaComparison;
use App\Models\perbandingank;
use App\Models\PrioritasKriteria;
class PerbandinganKController extends Controller
{
public function index()
{
return view('pages.dataKriteria');
}
public function showkriteria()
{
$datakriterias = datakriteria::all();
return view('pages.dataKriteria', compact('data'));
}
public function nkriteria()
{
$datakriterias = datakriteria::all();
return view('pages.nkriteria', compact('data'));
}
public function store(Request $request)
{
$request->validate([
'kriteria1' => 'required',
'nilai_bobot' => 'required',
'kriteria2' => 'required',
]);
$datakriterias = [
'kriteria1' => $request->kriteria1,
'kriteria2' => $request->kriteria2,
];
$perbandinganK = perbandingank::where($datakriterias)->first();
if ($perbandinganK) {
$perbandinganK->update([
'nilai_bobot' => $request->nilai_bobot,
]);
} else {
perbandingank::create($datakriterias + ['nilai_bobot' => $request->nilai_bobot]);
}
return redirect()->back()->with('success', 'Data berhasil disimpan');
}
public function calculateNormalization()
{
$datakriterias = datakriteria::all();
$columnTotals = [];
$nilaiBobotMatrix = [];
$priorities = [];
// Hitung nilai bobot dan total per kolom
foreach ($datakriterias as $row) {
$rowTotal = 0;
foreach ($datakriterias as $column) {
if ($row->kode_kriteria === $column->kode_kriteria) {
$nilai_bobot = 1; // Isi otomatis dengan nilai 1 jika xkriteria dan ykriteria sama
} else {
$nilai_bobot = PerbandinganK::where('kriteria1', $row->kode_kriteria)
->where('kriteria2', $column->kode_kriteria)
->value('nilai_bobot');
if (!$nilai_bobot) {
$nilai_bobot = PerbandinganK::where('kriteria1', $column->kode_kriteria)
->where('kriteria2', $row->kode_kriteria)
->value('nilai_bobot');
if (!$nilai_bobot) {
$nilai_bobot = 0; // Set nilai_bobot menjadi 0 jika tidak ada data yang ditemukan
} else {
$nilai_bobot = 1 / floatval($nilai_bobot); // Menghitung nilai kebalikan setelah mengubah ke tipe float
}
}
}
$rowTotal += floatval($nilai_bobot);
$columnTotals[$column->id] = isset($columnTotals[$column->id]) ? $columnTotals[$column->id] + floatval($nilai_bobot) : floatval($nilai_bobot);
$nilaiBobotMatrix[$row->id][$column->id] = floatval($nilai_bobot);
}
}
// Hitung nilai normalisasi dan prioritas
foreach ($datakriterias as $rowIndex => $row) {
$rowSum = 0;
foreach ($datakriterias as $columnIndex => $column) {
$normalizedValue = 0;
if (isset($columnTotals[$column->id]) && $columnTotals[$column->id] != 0) {
$normalizedValue = $nilaiBobotMatrix[$row->id][$column->id] / $columnTotals[$column->id];
}
$rowSum += $normalizedValue;
}
$priority = $rowSum / count($datakriterias);
$priorities[$row->id] = $priority;
// Simpan nilai prioritas ke database
$kriteria = datakriteria::find($row->id);
$kriteria->priority = $priority;
$kriteria->save();
}
foreach ($datakriterias as $rowIndex => $row) {
// Hitung prioritas
$priority = $rowSum / count($datakriterias);
// Simpan hasil prioritas ke database
PrioritasKriteria::create([
'kriteria_id' => $row->id, // Sesuaikan dengan kolom yang sesuai di database
'nilai_prioritas' => $priority,
// Jika ada kolom lain yang perlu disimpan, tambahkan di sini
]);
}
// Hitung Lambda Max
$lambdaMax = array_sum(array_map(function ($priority, $columnId) use ($columnTotals) {
return $priority * $columnTotals[$columnId];
}, $priorities, array_keys($priorities)));
// Hitung CI dan CR
$CI = ($lambdaMax - count($datakriterias)) / (count($datakriterias) - 1);
$RI = 1.12; // Nilai Random Index untuk jumlah kriteria tertentu, sesuaikan dengan tabel RI
$CR = $CI / $RI;
// Kirim data ke view
return view('pages.dataKriteria', compact('data', 'columnTotals', 'nilaiBobotMatrix', 'priorities', 'lambdaMax', 'CI', 'CR'));
}
public function simpanPrioritasKriteria($datakriterias)
{
}
}