#!/usr/bin/perl

use 5.038;

my $DEBUG = 1;

my $iter = 1000;  # si hay tiempo

my $Ln = 1000;  # Número de lotes completos

my $N = 1000;  # items en un solo lote

my $minM = 5;
my $M; # tamaño de la muestra ??? -> rango aleatorio [ $N/2 , 0 ]
my $MACUM = 0;

my $C = 1;     #  coste unitario de hacer una unidad de bien o servicio

my $C2 = 2;    #  coste de inspeccionar destructivamente la calidad de 1 unidad

my $gamma;  # en tanto por uno, probabilidad de que una unidad sea chunga ???  -> rango aleatorio [ 0.01, 0.0001 ]  centésima, diezmilésima
my $threshold = 0.002;                # tasa de corte de calidad. Se supone que mejor es menos que eso

##################### EL CRITERIO DE DECISION SERA QUE SI 2 UNIDADES DE LA MUESTRA SON CHUNGAS, EL LOTE SE DESECHA ##########################################  

my $K = 2;    # Hay empresas que PASS or NOT QC pero aquí vamos a poner dos precios K=0 y K=1

my @Lna = (0,0);   # Lotes aceptados y vendidos 

my @p;
$p[0]= 5;  # precio de cada unidad vendida sin tacha en muestra
$p[1]= 4.5;  # con tacha (el equivalente al i5)
@p[2 .. 500] = (0) x (500-2+1);

my $Quality_score;   #  Lna / Ln
my $Quality_score2;   # Overall 

my $Quality_bonus = 0.75;   # 50% cosa más bien tradicional

my $Income;  #  Income = Ibase * (1 + Quality_score * Quality_bonus)

my $TCosts;  # Costes totales

my ($Profit, $MAX) = (-9e99, -9e99);  # Beneficio y máximo beneficio por calidades

my $counter = 0;  # número de Profit positivo

#####################################################################

my $c =0;
while (++$c < $iter){

#    @Lna = (0,0);
    
    for my $i ( 1 .. $Ln ){
	
	$M = $minM + int (rand() * $N / 2);                 # M estrictamente mayor o igual a $minM, por sanidad
	$MACUM += $M; 
	
	$K = 0;
	
	for my $j ( 1 .. $M ) {
	
	    $gamma = 0.001 + rand()*$threshold;
	
	    if ($gamma > $threshold) {
	    
		$K++;
		
		last if $K > 1;
		
	    }
	}
	
	$TCosts = ($N-$M) * $C + $M * ($C2 + $C);
    
	if ($K >= 2) {
	
	    $Income = 0;
	
	}elsif ($K == 1){
	    
	    $Lna[$K]++;
	    $Income = ($N-$M) * $p[1];
	    
	}elsif ($K == 0){
	
	    $Lna[$K]++;
	    $Income = $p[0] * ($N-$M);
	    
	}else{
	    
	    die "ERROR";	
    
	}
	
	$Quality_score = ($Lna[0] + $Lna[1]) / $i;
	$Quality_score2 = ($Lna[0] + $Lna[1]) / $c;
#    $Quality_bonus_coef = 1+$Quality_score * $quality_bonus;
 
    ####################################
    
	$Profit = $Income * (1+$Quality_bonus*$Quality_score2) - $TCosts;

	if ($Profit >= $MAX && $Profit > 0){
	    $MAX = $Profit;
	    $counter++;
	    say "$c $i) MAX   Profit = $Profit   Lna1 = $Lna[1]   Lna0 = $Lna[0]   Income = $Income  TCosts = $TCosts  M = $M";
	}elsif ($Profit > 0){
	    $counter++;
	    say "$c $i)   Profit = $Profit   Lna1 = $Lna[1]   Lna0 = $Lna[0]   Income = $Income  TCosts = $TCosts  M = $M";
	}
    }
}

say "$0: De $c hay $counter casos positivos";

exit 2;


