#!/usr/local/bin/perl -w

use feature ":5.10";
# use bignum;

$N //= 10; # capacidad limitada a 10
$lambda = 3; # 3 llegadas por hora
$mu = 2;     # 2 servicios por hora
$ratio = $lambda/$mu;


for $s (1..$N-1){
    say "Servidores: $s";
    say "Probabilidad 0 clientes: ",pi0();
    for (1..$N){
	say "$_ clientes: ", pi($_);
    }
    say "Lq = ",Lq(),"  ","Wq = ",Wq();
    say "L  = ", L(),"  ","W  = ", W();
    say "-"x70;
    sleep 1;
}



sub pi0 {
    my ($pi_1,$pi_2);
    for my $n (0..$s){
	$pi_1 += (1/fact($n))*($ratio**$n);
    }
    for my $n ($s+1..$N){
	$pi_2 += ($lambda/($mu*$s))**($n-$s);
    }
    return 1/($pi_1 + (1/fact($s))*($ratio**$s)*$pi_2);
}

sub pi {
    my $i = shift;
    if ($i <= $s){
	return (1/fact($i))*($ratio**$i)*pi0();
    }else{
	return (1/(fact($s)*($s**($i-$s))))*($ratio**$i)*pi0();
    }
}

sub Lq {
    my $lq;
    for my $n ($s+1..$N){
	$lq += ($n-$s)*($lambda/($mu*$s))**($n-$s);
    }
    return (pi0()*($ratio**$s)/fact($s))*$lq;
}

sub Wq {
    return Lq()/($lambda*(1-pi($N)));
}

sub L {
    my ($L1,$L2);
    for my $i (0..$s-1){
	$L1 += $i*pi($i);
    }
    $L1 += Lq();
    for my $i (0..$s-1){
	$L2+= pi($i);
    }
    return $L1+$s*(1-$L2);
}

sub W {
    return L()/($lambda*(1-pi($N)));
}


sub fact{
    my $i = shift ;
    my $f = 1;
    for my $j (1..$i){
	$f *= $j;
    }
    return $f;
}

__END__

