#!/usr/bin/perl -w

use strict;

my $demanda_diaria = 200_000/240;
my $Coste_compra_A = 200_000 * 102;
my $Coste_compra_B = (200_000 + 8 * $demanda_diaria) * 95;

my ($QA, $QB, $countA, $countB, $count0);
my ($Coste_pedido_A, $Coste_pedido_B, $Coste_inventario_A, $Coste_inventario_B);
my ($Coste_total_A, $Coste_total_B);
my $CMIN = 9e99;
my $CMINA = 9e99;
my $CMINB = 9e99;
my ($unidades, $sol, $uniA, $uniB);
for my $Q (1..200_000){
    $QA = $QB = $Q;
    $Coste_pedido_A = 2500 * 200_000/$QA;
    $Coste_pedido_B = 15000 * (200_000+8*$demanda_diaria)/$QB;
    $Coste_inventario_A = 1.35 * 102 * $QA/2;
    $Coste_inventario_B = 1.35 * 95 * ($QB + 8*$demanda_diaria)/2;
    $Coste_total_A = $Coste_compra_A + $Coste_pedido_A + $Coste_inventario_A;
    $Coste_total_B = $Coste_compra_B + $Coste_pedido_B + $Coste_inventario_B;
    if ($Coste_total_A < $CMINA){
	$CMINA = $Coste_total_A;
	$uniA = $Q;
    }
    if ($Coste_total_B < $CMINB){
	$CMINB = $Coste_total_B;
	$uniB = $Q;
    }
    if ($Coste_total_A > $Coste_total_B){
#	print "B";
	$countB++;
	if ($Coste_total_B < $CMIN){
	    $CMIN = $Coste_total_B;
	    $unidades = $Q;
	    $sol = "B";
	}
    }elsif ($Coste_total_A < $Coste_total_B){
#	print "A";
	$countA++;
	if ($Coste_total_A < $CMIN){
	    $CMIN = $Coste_total_A;
	    $unidades = $Q;
	    $sol = "A";
	}
    }else{
	print "INDIFERENTE en $Q\n";
	$count0++;
    }
}

print "A = $countA\n";
print "B = $countB\n";

$QA = sqrt(2*200_000*2500/(1.35*102));
$QB = sqrt(2*(200_000+8*$demanda_diaria)*15000/(1.35*95));
print "QA = $QA\n";
print "QB = $QB\n";

print "Solución: Pídase $unidades unidades de $sol cada ",$unidades/$demanda_diaria," días\n";
print "período corto... luego si se pide B, ", int($QB+.5), " unidades, cada ", $QB/$demanda_diaria, " días\n"; 
print "... la diferencia es significativa en el pedido óptimo:\n";
print "A -> $uniA y B -> $uniB, la diferencia es de ", $CMINB-$CMINA, " a favor de A\n";
print "(Si el período es corto, se podría alargar hasta pedir $countA unidades de A)\n";

__END__

El departamento de compras de una empresa tiene que tomar decisiones
sobre la adjudicación de un pedido, teniendo en cuenta los siguientes
datos:
  
Cuentan con dos proveedores A y B. El precio ofertado por el proveedor 
A es de 102 u.m./unidad. El proveedor B se destaca por tener buenos 
precios. Durante bastante tiempo se ha trabajado con él, pero se han
enfriado las relaciones debido a su falta de fiabilidad tanto en 
calidad como en fechas de entrega. Su historial demuestra que los
incumplimientos de calidad suponen 5 días más de espera cada vez que
se detectan y que las entregas suelen presentar un retraso medio de
3 días por pedido, por lo que podríamos admitir que, para trabajar 
con este proveedor tendríamos que hacerlo con un stock de seguridad 
de 8 días. El precio ofertado por este proveedor es de 95 u.m./unidad.
  
Se tiene, además, la siguiente información: Días de trabajo anuales, 
240; Consumo anual de piezas, 200.000; Coste unitario del stock en 
términos anuales, 135% del precio ofertado en cada caso y Costes de 
pedido, 2500 u.m./pedido proveedor A y 15000 u.m./pedido para el 
proveedor B.
  
De acuerdo con estos datos y teniendo en cuenta el lote económico de 
compra, ¿cuál sería la decisión correcta de adjudicación teniendo en
cuenta el coste integral que se genera en cada caso?
  

