Vous êtes sur la page 1sur 15

1.

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)

Estado del Sistema


El sistema tiene el estado de inicio, el cual contiene todas las variables y los contadores
estadsticos en 0, el siguiente estado del sistema es simulando donde lo distintos
eventos van modificando las variables de estado y los contadores estadsticos para
representar la situacin problema del mundo real, por ltimo se tiene el estado de
finalizado al cual se llega luego de cumplir una condicin de finalizacin, 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 estn por suceder en la simulacin.

b)

Entidades y sus atributos


Autos = representados en la variable de estado auto, no posee atributos para esta
simulacin en particular ya que solo nos interesa la cantidad.

c)

Eventos, Actividades y Procesos


Eventos
Inicio: inicia la simulacin.
Renta: este evento representa el alquiler de un auto.
Devolucin: este evento representa la devolucin de un auto.
Fin simulacin: luego de cumplir una condicin se finaliza la simulacin.
Actividades
Restar una cantidad n de autos al da.
Sumar una cantidad m de autos al da.
Actualizar cantidad de autos disponible.

Actualizar contadores estadsticos.


Procesos
Generar la cantidad de autos rentados diariamente.
Generar el tiempo de renta para cada auto rentado en un da.
Demorar la devolucin de un auto el tiempo que fue rentado.
Actualizar los contadores estadsticos.
d)

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

public Evento(int to, int tip){


tiempoOcurrencia = to;
tipo = tip;
}
}
static int autos, sim_time, aos;
static float autosRentados, perdidasDiaPorNoTener,
perdidaPorOcioso, ganaciasDia;
static ArrayList<Evento> listaEventos;
static
static
static
static

float
float
float
float

costoAnualAuto= 35000;
rentaDiariaAuto= 50;
costoNotenerDisp= 30;
costoDiarioAutoOcioso= 10;

public static void main(String[] args) {


System.out.println("ingrese el numero de aos a
simular: ");
Scanner sc = new Scanner(System.in);
aos= sc.nextInt();
sc.nextLine();
System.out.println("ingrese el numero de autos
comprados: ");
autos= sc.nextInt();
int auxaut = autos;
inicializar();
for (int i = 1; i<=aos*365 ; i++){
sim_time = i;
System.out.println("numero autos en dia:
"+i+", " +autos);
generarRentaDiariayDev(sim_time);
ArrayList<Evento> eventos = timing(i);
if (!eventos.isEmpty())
if (eventos.get(0).tiempoOcurrencia== i)
for (int k = 0; k< eventos.size(); k++){
switch (eventos.get(k).tipo){
case 1: if (autos>0){
renta();
System.out.println("renta");
}
break;
case 2: devolucion();

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

Implementacin para 4 autos

Implementacin para 4 a 8 autos


h)
resultados
Los resultados en la simulacin en java y Anylogic son congruentes. La simulacin se corre a 1 ao
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

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

Se recomienda comprar 6 automviles ya que la mejor relacin costo/ ganancia se presenta en el


caso de 6 autos.

Vous aimerez peut-être aussi