139 lines
5.0 KiB
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)
|
|
{
|
|
|
|
}
|
|
|
|
|
|
}
|