You are on page 1of 15

1.

3 Una compañía de renta de autos, está tratando de determinar el número óptimo de autos a
comprar. El costo promedio anual de un auto es de 35.000 USD. Además, esta compañía ha
recopilado las siguientes probabilidades de operación:
Número de autos rentados por día
0
Probabilidad
0.10
Número de días 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 día es de 10 USD. ¿Cuál
es la cantidad de autos que debería comprar la compañía? (Suponga que un auto que se renta por
un día está disponible al día siguiente.)
a)

Estado del Sistema
El sistema tiene el estado de inicio, el cual contiene todas las variables y los contadores
estadísticos en 0, el siguiente estado del sistema es “simulando” donde lo distintos
eventos van modificando las variables de estado y los contadores estadísticos para
representar la situación problema del mundo real, por último se tiene el estado de
finalizado al cual se llega luego de cumplir una condición de finalización, las variables de
estado son:
 Autos: contiene un valor entero el cual representa la cantidad de autos que se tienen
disponibles en cualquier instante de tiempo.
 autos rentados: contiene el valor total de autos rentados en el instante t.
 lista de eventos: contiene los eventos que están por suceder en la simulación.

b)

Entidades y sus atributos
Autos = representados en la variable de estado auto, no posee atributos para esta
simulación en particular ya que solo nos interesa la cantidad.

c)

Eventos, Actividades y Procesos
 Eventos
Inicio: inicia la simulación.
Renta: este evento representa el alquiler de un auto.
Devolución: este evento representa la devolución de un auto.
Fin simulación: luego de cumplir una condición se finaliza la simulación.
 Actividades
Restar una cantidad n de autos al día.
Sumar una cantidad m de autos al día.
Actualizar cantidad de autos disponible.

es decir que no fue alquilado. d) Contadores estadísticos  autosRentados: en esta variable se va a acumular el número de autos rentados al día. Actualizar los contadores estadísticos. f) Diagramas de flujo Clase Evento: Variables globales:  Función principal .  perdidaPorOcioso: en esta variable se va a acumular la cantidad perdida por mantener un auto sin usar al día.  perdidasDiaPorNoTener: en esta variable se va a acumular la cantidad perdida por no tener disponible un auto cuando este es solicitado.  Procesos Generar la cantidad de autos rentados diariamente. e) Medidas de desempeño Las medidas de desempeño son el promedio de los contadores estadísticos:  perdida promedio diaria por no tener: perdidasDiaPorNoTener/Dias.  perdida promedio diaria por ocioso: perdidaPorOcioso/Dias.  ganaciasDia: en esta variable vamos a acumular la cantidad ganada diariamente por concepto de la renta de autos.Actualizar contadores estadísticos.  ganancia promedio diaria: ganaciasDia/Dia. Generar el tiempo de renta para cada auto rentado en un día. Demorar la devolución de un auto el tiempo que fue rentado.

d .

 Función costoAutoOcioso  Función renta  Función devolución  Función generarRentaDiariayDev .

 Función timing .

 Función inicializar .

 Función report  Función numeroAutosRentadosPorDia .

 Función numeroDiasRentadosPorAuto .

// 1 renta. import java.util.Scanner. import java. public class Simulacion { static class Evento { int tiempoOcurrencia.Random. 2 devolucion .ArrayList.util.util. int tipo. import java.g) simulación java  código: package punto3src.

int tip){ tiempoOcurrencia = to.out. generarRentaDiariayDev(sim_time). años= sc.public Evento(int to. costoDiarioAutoOcioso= 10. int auxaut = autos. " +autos).size(). perdidasDiaPorNoTener. . k< eventos. System.println("numero autos en dia: "+i+".println("ingrese el numero de autos comprados: "). ArrayList<Evento> eventos = timing(i). k++){ switch (eventos. inicializar(). for (int i = 1.println("ingrese el numero de años a simular: "). static float autosRentados.tipo){ case 1: if (autos>0){ renta().get(k). if (!eventos.out. sc. costoNotenerDisp= 30. System.isEmpty()) if (eventos. } } static int autos. perdidaPorOcioso.out. ganaciasDia. tipo = tip. i<=años*365 . static ArrayList<Evento> listaEventos.out.nextInt(). i++){ sim_time = i. rentaDiariaAuto= 50. System.nextLine().nextInt(). } break. sim_time. autos= sc.in). case 2: devolucion(). Scanner sc = new Scanner(System.get(0). años.println("renta"). public static void main(String[] args) { System. static static static static float float float float costoAnualAuto= 35000.tiempoOcurrencia== i) for (int k = 0.

} static void renta(){ autos = autos . } static void costoAutoOcioso(float autoOci){ perdidaPorOcioso += autoOci*costoDiarioAutoOcioso. . Evento devl = new Evento(simt+diasRentado.System. int aut = autos. i++){ Evento rent = new Evento(simt.println("auto: "+(i+1)+" dias rentado: "+diasRentado). } static void devolucion(){ autos = autos +1. } }else{ int noAtend= a-autos. } static void generarRentaDiariayDev(int simt){ Random rnd = new Random(). if (a<=autos){ costoAutoOcioso(aut-a).add(rent).out.out. ganaciasDia+=rentaDiariaAuto.nextFloat()).1. for (int i=0.out. listaEventos. int diasRentado = numeroDiasRentadosPorAuto(rnd. } } } report(auxaut). System.println("numero autos solicitados: "+a).println("devolucion"). break. default: break.1). autosRentados ++.add(devl).2). System. listaEventos.nextFloat()). int a = numeroAutosRentadosPorDia(rnd. i<a. //ganaciasDia = ganaciasDia + (diasRentado*rentaDiariaAuto).

i<listaEventos.get(i). return eventos.out.perdidasDiaPorNoTener += costoNotenerDisp * noAtend.get(0). i<listaEventos.removeAll(eventos).isEmpty()){ Evento next = listaEventos. if (!listaEventos. i<autos.add(listaEventos. for (int i = 1.} } static void inicializar(){ //tiempo de simulacion sim_time = 0. i++){ Evento rent = new Evento(simt.tiempoOcurrencia == next. } if ( dia == next. int diasRentado = numeroDiasRentadosPorAuto(rnd.tiempoOcurrencia) listaEventos. //variable de estado // contadores estadisticos . i++){ if (listaEventos.tiempoOcurrencia) next = listaEventos. }else{return eventos.nextFloat()). i++){ if (listaEventos.1).println("auto: "+(i+1)+" dias rentado: "+diasRentado).get(i).tiempoOcurrencia) eventos. listaEventos. } for (int i=0.add(devl). for (int i=0. //ganaciasDia = ganaciasDia + (diasRentado*rentaDiariaAuto).size(). } } } static ArrayList<Evento> timing(int dia){ // determinar los eventos en el dia ArrayList<Evento> eventos = new ArrayList<Evento>().get(i)).size(). Evento devl = new Evento(simt+diasRentado. System.2). listaEventos.get(i).add(rent).tiempoOcurrencia < next.

90 && prob<=1.70 && prob<=0.out.out.} else if (prob> 0.40 && prob<=0.25 && prob<=0.} else if(prob> 0.55){return 2.out.} else if (prob> 0. System.println("ganancia neta diaria: " + ganancia).25){return 1. System. System.println("inversion en: "+autos+" autos"+" costo anual: "+ (autos*costoAnualAuto)).0 && prob<=0.out.} else if (prob> 0. perdidaPorOcioso = 0.out.80 && prob<=1. perdidasDiaPorNoTener=0.} else if (prob> 0.} } static int numeroDiasRentadosPorAuto(float prob){ if (prob>= 0.40){return 1.println("autos rentados: "+ autosRentados).80){return 3.70){return 2.out.10){return 0.0 && prob<=0.println("ganancias promedio dia: " + ganaciasDia/(365*años)).0){return 4.} else {return -1. } static int numeroAutosRentadosPorDia(float prob){ if (prob>= 0. System.println("perdidas promedio dia por ocioso : "+ perdidaPorOcioso/(365*años)).0){return 4. //inicializar lista de eventos listaEventos = new ArrayList<Evento>().} } } g) simulación AnyLogic .90){return 3. } static void report(int autos){ System.} else {return -1. float ganancia = (ganaciasDia/(365*años)) (perdidasDiaPorNoTener/(365*años))(perdidaPorOcioso/(365*años)).10 && prob<=0. System.} else if (prob> 0.} else if (prob> 0.55 && prob<=0.println("perdidas promedio dia por no tener : " + perdidasDiaPorNoTener/(365*años)). ganaciasDia=0.autosRentados=0.

La simulación se corre a 1 año con distintas cantidades de autos. se pretende ver la ganancia neta diaria para escoger la cantidad de autos a comprar que maximice esta medida.  Entrada .Implementación para 4 autos Implementación para 4 a 8 autos h) resultados Los resultados en la simulación en java y Anylogic son congruentes.

000 Ganancia neta promedio día 85 118 143 166 184 Ganancia al año 31.000 280.500 61.000 67.000 175.100 52.06 4 4. Salida  Análisis c.01 4. autos 4 5 6 7 8 Costo compra autos 140. .000 245.000 43.17 Se recomienda comprar 6 automóviles ya que la mejor relación costo/ ganancia se presenta en el caso de 6 autos.100 Costo compra / Ganancia al año 4.000 210.5 4.