gestione gare pubbliche
Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
 
 
 
 
 

163 righe
5.6 KiB

<?
class tuttogareMath {
public static function inversamenteProporzionale(array $valori, $peso = 1, $decimali = 3) {
$min = min($valori);
$chiavi = array_keys($valori);
$punteggi = [];
foreach ($chiavi as $chiave) {
$punteggio_ottenuto = 0;
if ($valori[$chiave] != 0) { $punteggio_ottenuto = $min * $peso / $valori[$chiave]; }
if (isset($decimali)) {
$punteggi[$chiave] = truncate($punteggio_ottenuto,$decimali);
} else {
$punteggi[$chiave] = $punteggio_ottenuto;
}
}
if (empty($punteggi)) { $punteggi = false; }
return $punteggi;
}
public static function proporzionale(array $valori, $peso = 1, $decimali = 3) {
$max = max($valori);
$chiavi = array_keys($valori);
$punteggi = [];
foreach ($chiavi as $chiave) {
$punteggio_ottenuto = 0;
if ($max>0) { $punteggio_ottenuto = $valori[$chiave] * $peso / $max; }
if (isset($decimali)) {
$punteggi[$chiave] = truncate($punteggio_ottenuto,$decimali);
} else {
$punteggi[$chiave] = $punteggio_ottenuto;
}
}
if (empty($punteggi)) { $punteggi = false; }
return $punteggi;
}
public static function lineareSemplice(array $valori,$peso=1,$decimali=3,$options="") {
$chiavi = array_keys($valori);
$punteggi = [];
foreach ($chiavi as $chiave) {
$punteggi[$chiave] = $peso * (($options["prezzoBase"] - $valori[$chiave])/($options["prezzoBase"] - $options["prezzoSoglia"]));
if (isset($decimali)) {
$punteggi[$chiave] = truncate($punteggi[$chiave],$decimali);
} else {
$punteggi[$chiave] = $punteggi;
}
}
if (empty($punteggi)) { $punteggi = false; }
return $punteggi;
}
public static function incrementoLineare(array $valori,$peso=1,$decimali=3) {
$max = max($valori);
$min = min($valori);
$punteggio_max = $peso;
$punteggio_min = $min * $peso / $max;
$chiavi = array_keys($valori);
$punteggi = [];
foreach($chiavi AS $chiave) {
$valore = $valori[$chiave];
$punteggi[$chiave] = $punteggio_max - ((($punteggio_max - $punteggio_min) / ($max - $min)) * ($valore - $min));
$punteggi[$chiave] = ($punteggi[$chiave] > $punteggio_max) ? $punteggio_max : $punteggi[$chiave];
if (isset($decimali)) {
$punteggi[$chiave] = truncate($punteggi[$chiave],$decimali);
} else {
$punteggi[$chiave] = $punteggi;
}
}
if (empty($punteggi)) { $punteggi = false; }
return $punteggi;
}
public static function onOff(array $valori,$peso=1) {
$punteggi = [];
foreach ($valori as $chiave => $valore) {
$punteggi[$chiave] = 0;
if (!empty($valore)) { $punteggi[$chiave] = $peso; }
}
if (empty($punteggi)) { $punteggi = false; }
return $punteggi;
}
public static function tabellare(array $valori,array $options,$max = null, $decimali = null) {
$chiavi = array_keys($valori);
$ranges = $options["range"];
$punteggi = [];
if (!empty($ranges)) {
foreach ($chiavi as $chiave) {
$valore = $valori[$chiave];
$punteggi[$chiave] = 0;
foreach($ranges AS $range) {
if ($valore >= $range["min"] && ($valore <= $range["max"] || empty($range["max"]))) { $punteggi[$chiave] = $range["punteggio"]; }
}
}
}
if (empty($punteggi)) {
$punteggi = false;
} else {
if (!empty($options["riparametra"]) && $options["riparametra"] == "S" && !empty($max)) {
$punteggi = self::proporzionale($punteggi,$max ?? 1,$decimali ?? 3);
}
}
return $punteggi;
}
public static function bilineare(array $valori,$peso=1,$decimali=3,$options="") {
$max = max($valori);
$media = array_sum($valori)/count($valori);
$chiavi = array_keys($valori);
$punteggi = [];
foreach ($chiavi as $chiave) {
$punteggio_ottenuto = 0;
$valore = $valori[$chiave];
if ($max>0) {
if ($valore > $media) {
$punteggio_ottenuto = ($options + (1 - $options) * (($valore - $media) / ($max - $media))) * $peso;
} else {
$punteggio_ottenuto = ($options * ($valore / $media)) * $peso;
}
}
if (isset($decimali)) {
$punteggi[$chiave] = truncate($punteggio_ottenuto,$decimali);
} else {
$punteggi[$chiave] = $punteggio_ottenuto;
}
}
if (empty($punteggi)) { $punteggi = false; }
return $punteggi;
}
public static function quadratica(array $valori,$peso=1,$decimali=3,$options="") {
$max = max($valori);
$chiavi = array_keys($valori);
$punteggi = [];
foreach ($chiavi as $chiave) {
$punteggio_ottenuto = 0;
if ($max>0) { $punteggio_ottenuto = pow(($valori[$chiave] / $max),$options) * $peso; }
if (isset($decimali)) {
$punteggi[$chiave] = truncate($punteggio_ottenuto,$decimali);
} else {
$punteggi[$chiave] = $punteggio_ottenuto;
}
}
if (empty($punteggi)) { $punteggi = false; }
return $punteggi;
}
public static function convertInversaForScore($valori,$riferimento) {
$return = [];
foreach($valori AS $id => $valore) {
$return[$id] = 100 - (($valore * 100) / $riferimento);
}
return $return;
}
public static function getFormule() {
global $config;
return jsonToArray($config["jsonFolder"]."/math-formule.json");
}
}
?>