Sinulacion
Sinulacion
Sinulacion
3 Una compaa de renta de autos, est tratando de determinar el nmero ptimo de autos a
comprar. El costo promedio anual de un auto es de 35.000 USD. Adems, esta compaa ha
recopilado las siguientes probabilidades de operacin:
Nmero de autos rentados por da
0
Probabilidad
0.10
Nmero de das rentados por auto
1
Probabilidad
0.40
1
0.15
2
0.30
2
0.30
3
0.20
3
0.25
4
0.20
4
0.10
Si la renta diaria por auto es de 50 USD, el costo de no tener un auto disponible cuando se est
solicitando es de 30 USD, y el costo de tener un carro ocioso durante un da es de 10 USD. Cul
es la cantidad de autos que debera comprar la compaa? (Suponga que un auto que se renta por
un da est disponible al da siguiente.)
a)
b)
c)
Contadores estadsticos
autosRentados: en esta variable se va a acumular el nmero de autos rentados al da.
perdidasDiaPorNoTener: en esta variable se va a acumular la cantidad perdida por no
tener disponible un auto cuando este es solicitado.
perdidaPorOcioso: en esta variable se va a acumular la cantidad perdida por mantener
un auto sin usar al da, es decir que no fue alquilado.
ganaciasDia: en esta variable vamos a acumular la cantidad ganada diariamente por
concepto de la renta de autos.
e)
Medidas de desempeo
Las medidas de desempeo son el promedio de los contadores estadsticos:
perdida promedio diaria por no tener: perdidasDiaPorNoTener/Dias.
perdida promedio diaria por ocioso: perdidaPorOcioso/Dias.
ganancia promedio diaria: ganaciasDia/Dia.
f)
Diagramas de flujo
Clase Evento:
Variables globales:
Funcin principal
Funcin costoAutoOcioso
Funcin renta
Funcin devolucin
Funcin generarRentaDiariayDev
Funcin timing
Funcin inicializar
Funcin report
Funcin numeroAutosRentadosPorDia
Funcin numeroDiasRentadosPorAuto
g)
simulacin java
cdigo:
package punto3src;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class Simulacion {
static class Evento {
int tiempoOcurrencia;
int tipo; // 1 renta, 2 devolucion
float
float
float
float
costoAnualAuto= 35000;
rentaDiariaAuto= 50;
costoNotenerDisp= 30;
costoDiarioAutoOcioso= 10;
System.out.println("devolucion");
break;
default: break;
}
}
}
report(auxaut);
}
static void costoAutoOcioso(float autoOci){
perdidaPorOcioso += autoOci*costoDiarioAutoOcioso;
}
static void renta(){
autos = autos - 1;
ganaciasDia+=rentaDiariaAuto;
autosRentados ++;
}
static void devolucion(){
autos = autos +1;
}
static void generarRentaDiariayDev(int simt){
Random rnd = new Random();
int a =
numeroAutosRentadosPorDia(rnd.nextFloat());
System.out.println("numero autos solicitados:
"+a);
int aut = autos;
if (a<=autos){
costoAutoOcioso(aut-a);
for (int i=0; i<a; i++){
Evento rent = new Evento(simt,1);
listaEventos.add(rent);
int diasRentado =
numeroDiasRentadosPorAuto(rnd.nextFloat());
System.out.println("auto: "+(i+1)+" dias
rentado: "+diasRentado);
//ganaciasDia = ganaciasDia +
(diasRentado*rentaDiariaAuto);
Evento devl = new Evento(simt+diasRentado,2);
listaEventos.add(devl);
}
}else{
int noAtend= a-autos;
perdidasDiaPorNoTener += costoNotenerDisp *
noAtend;
for (int i=0; i<autos; i++){
Evento rent = new Evento(simt,1);
listaEventos.add(rent);
int diasRentado =
numeroDiasRentadosPorAuto(rnd.nextFloat());
System.out.println("auto: "+(i+1)+" dias
rentado: "+diasRentado);
//ganaciasDia = ganaciasDia +
(diasRentado*rentaDiariaAuto);
Evento devl = new
Evento(simt+diasRentado,2);
listaEventos.add(devl);
}
}
}
static ArrayList<Evento> timing(int dia){
// determinar los eventos en el dia
ArrayList<Evento> eventos = new
ArrayList<Evento>();
if (!listaEventos.isEmpty()){
Evento next = listaEventos.get(0);
for (int i = 1; i<listaEventos.size(); i++){
if (listaEventos.get(i).tiempoOcurrencia <
next.tiempoOcurrencia)
next = listaEventos.get(i);
}
for (int i=0; i<listaEventos.size(); i++){
if (listaEventos.get(i).tiempoOcurrencia ==
next.tiempoOcurrencia)
eventos.add(listaEventos.get(i));
}
if ( dia == next.tiempoOcurrencia)
listaEventos.removeAll(eventos);
return eventos;
}else{return eventos;}
}
static void inicializar(){
//tiempo de simulacion
sim_time = 0;
//variable de estado
// contadores estadisticos
autosRentados=0;
perdidasDiaPorNoTener=0;
perdidaPorOcioso = 0;
ganaciasDia=0;
//inicializar lista de eventos
listaEventos = new ArrayList<Evento>();
}
static void report(int autos){
System.out.println("inversion en: "+autos+"
autos"+" costo anual: "+ (autos*costoAnualAuto));
System.out.println("ganancias promedio dia: " +
ganaciasDia/(365*aos));
System.out.println("perdidas promedio dia por no
tener : " + perdidasDiaPorNoTener/(365*aos));
System.out.println("perdidas promedio dia por
ocioso : "+ perdidaPorOcioso/(365*aos));
System.out.println("autos rentados: "+
autosRentados);
float ganancia = (ganaciasDia/(365*aos)) (perdidasDiaPorNoTener/(365*aos))(perdidaPorOcioso/(365*aos));
System.out.println("ganancia neta diaria: " +
ganancia);
}
static int numeroAutosRentadosPorDia(float prob){
if (prob>= 0.0 && prob<=0.10){return 0;}
else if (prob> 0.10 && prob<=0.25){return 1;}
else if (prob> 0.25 && prob<=0.55){return 2;}
else if (prob> 0.55 && prob<=0.80){return 3;}
else if(prob> 0.80 && prob<=1.0){return 4;}
else {return -1;}
}
static int numeroDiasRentadosPorAuto(float prob){
if (prob>= 0.0 && prob<=0.40){return 1;}
else if (prob> 0.40 && prob<=0.70){return 2;}
else if (prob> 0.70 && prob<=0.90){return 3;}
else if (prob> 0.90 && prob<=1.0){return 4;}
else {return -1;}
}
}
g)
simulacin AnyLogic
Entrada
Salida
Anlisis
c. autos
4
5
6
7
8
Costo compra
autos
140.000
175.000
210.000
245.000
280.000
Ganancia neta
promedio da
85
118
143
166
184
Ganancia al ao
31.000
43.100
52.500
61.000
67.100
Costo compra /
Ganancia al ao
4,5
4,06
4
4,01
4,17