Documentos de Académico
Documentos de Profesional
Documentos de Cultura
#TEORÍA DE COLAS
#EJERCICIO 1
#M/M/1
Library(queueing)
lambda<-10 #(peticiones/segundo)
mu<- 12 #(1/0.083)
servidor<- NewInput.MM1(lambda,mu,0)
CheckInput(servidor) #No muestra ningún error, se procede a construir el modelo
summary(QueueingModel(servidor))
#EJERCICIO 2
#https://rpubs.com/map0logo/sim02beta
#El Security & Trust Bank tiene 4 cajeros para atender a sus clientes, los cuales
#llegan según un proceso de Poisson con tasa media de 2 por minuto.El tiempo de
#transacciones entre el cajero y el cliente tiene distribución exponencial con
#media de 1 minuto.
#La gerencia ha establecido las siguientes políticas para lograr un nivel de
servicio
#satisfactorio. El número promedio de clientes que esperan en la cola para iniciar
su
#servicio no debe exceder de 1 (L<1). Al menos 95% del tiempo, el número de
clientes
#en la cola no debe exceder de 5 (Lq<5). En el caso de al menos 95% de los
clientes,
#el tiempo de espera para iniciar el servicio no debe exceder de 5 minutos (W<5).
#Determine si se cumplen estas políticas.
library(simmer)
library(simmer.plot)
library(parallel)
library(knitr)
library(dplyr)
set.seed(12345678)
lambda <- 2
mu <- 1
#EJERCICIO 3
#Libro: Investigación de Operaciones Hillier-Liberman (pág. 760)
#El Midtown Bank siempre tiene dos cajeras en servicio. Los
#clientes llegan a las cajas a una tasa media de 40 por hora. Una cajera
#requiere en promedio 2 minutos para servir a un cliente. Cuando
#ambas cajeras están ocupadas, el cliente que llega se une a una cola
#y espera a que lo atiendan. Por experiencia se sabe que los clientes
#esperan en la cola un promedio de 1 minuto antes de pasar a la caja.
#Determine las medidas de desempeño básicas: Wq, W, L y Lq de
#este sistema. Use distribuciones exponenciales.
set.seed(12345)
l<-40 #(clientes/hr)
m<-30 #(por hora)
Wq<-1/60
nombre<-trajectory() %>%
seize("cajera", amount=1) %>%
timeout(function() rexp(1,m)) %>%
release("cajera",amount = 1)
simul.env<-simmer() %>%
add_resource("cajera", capacity=2, queue_size=Inf) %>%
add_generator("nombre",nombre, function() rexp(1, l)) %>%
run(until = 8)
recursos<-get_mon_resources(simul.env)
llegadas<-get_mon_arrivals(simul.env)
kable(get_mon_resources(simul.env))
kable(get_mon_arrivals(simul.env))
#EJERCICIO 3
#En un servidor de la universidad se mandan programas de ordenador para ser
ejecutados.
#Los programas llegan al servidor con una tasa de 10 por minuto. El tiempo medio de
Lambda<-10
Mu<-(60/5)
#FORMA 1
servidor<- NewInput.MM1(Lambda,Mu,0)
CheckInput(servidor)
summary(QueueingModel(servidor))
#FORMA 2
set.seed(123456789)
programa<-trajectory() %>%
seize("servidor",amount = 1) %>%
timeout(function() rexp(1,Mu)) %>%
release("servidor",amount = 1)
senv<-simmer() %>%
add_resource("servidor", capacity=1,queue_size=Inf) %>%
add_generator("programa",programa, function() rexp(1, Lambda)) %>%
run(until = 70)
rec<-get_mon_resources(envs)
lleg<-get_mon_arrivals(envs)
kable(rec)
kable(lleg)
#----------------------------------------------------------------------------------
---
#Integración manual
h<-function(x){exp(exp(x))}
int.m<-integrate(h,0,1)
#Con MC
set.seed(0)
nsim<-10^6
x1<-h(runif(nsim))
theta1<-mean(x1)
#Respuesta: 6.342009
#IC
par(mar=c(2,2,2,1),mfrow=c(2,1))
curve(h,xlab="Función",ylab="",lwd=2)
estint<-cumsum(x1)/(1:nsim)
esterr<-sqrt(cumsum((x1-estint)^2))/(1:nsim)
data.frame(l_inf,theta1,l_sup)
data.frame(int.m$value, theta1)
#EJERCICIO 5
#Use simulación para obtener el valor de la integral de [0,1] con fx=(1-x^2)^3/2
h<-function(x){sqrt((1-x^2)^3)}
int<-integrate(h,0,1)
set.seed(0)
Y<-h(runif(nsim))
theta<-mean(Y)
estint<-cumsum(Y)/(1:nsim)
esterr<-sqrt(cumsum((Y-estint)^2))/(1:nsim)
data.frame(l_inf,theta,l_sup)
data.frame(int$value, theta)
#EJERCICIO 6
#Use simulación para obtener el valor de la integral de [-2,2] con fx=exp(x+x^2)
h<-function(x){4*exp(16*x^2 -12*x + 2)}
int.m<-integrate(h1,0,1)
set.seed(0)
X<-h(runif(nsim))
theta<-mean(X)
#IC
curve(h,xlab="Función",ylab="",lwd=2)
estint<-cumsum(X)/(1:nsim)
esterr<-sqrt(cumsum((X-estint)^2))/(1:nsim)
data.frame(int.m$value, theta)
data.frame(l_inf,int.m$value,l_sup)
#EJERCICIO 7
#Use simulación para obtener el valor de la integral de [0,Inf] con fx=x(1+x^2)^-2
h<-function(x){x*(1+x^2)^-2}
int.M<-integrate(h,0,Inf)
set.seed(0)
Y<-h1(runif(nsim))
theta<-mean(Y)
estint<-cumsum(Y)/(1:nsim)
esterr<-sqrt(cumsum((Y-estint)^2))/(1:nsim)
data.frame(l_inf,theta,l_sup)
data.frame(int.M1$value, theta)
#EJERCICIO 8
#Use simulación para obtener el valor de la integral de [-Inf,Inf] con fx=exp(-x^2)
h<-function(x)(2*exp(-x^2))
integrate(h,0,Inf)
#EJERCICIO 9
#Supongamos que se pretende aproximar P (2 < X < 6) siendo X~Cauchy(0, 1) empleando
#muestreo por importancia y considerando como densidad auxiliar Y~N(0, 1).
#Se trata de aproximar pcauchy(6) - pcauchy(2), i.e.
#f(y) = dcauchy(y) y h(y) = (y > 2) * (y < 6), empleando muestreo por importancia
con
#g(y) = dnorm(y).
nsim<-10^5
set.seed(4321)
y <- rnorm(nsim)
w <- dcauchy(y)/dnorm(y)
mean(w* (y > 2) * (y < 6))
pcauchy(6) - pcauchy(2)
#Convergencia:
plot(cumsum(w * (y > 2) * (y < 6))/1:nsim, type = "l", ylab = "Aproximación", xlab
= "Iteraciones")
abline(h = pcauchy(6) - pcauchy(2), lty = 2)
#Conclusión: Lo que indica es una mala elección de la densidad auxiliar. La
distribución
#de los pesos debería ser homogénea
#EJERICIO 10
#Generar 1000 simulaciones de una N(0,1) con una Cauchy(0,1)
nsim<-1000
nsim2<-10^5
set.seed(1234)
y<-rcauchy(nsim2)
w<-dnorm(y)/dcauchy(y)
mean(w)
#Convergencia
hist(rx, freq = FALSE, breaks = "FD", ylim = c(0, 0.5))
lines(density(rx), lwd=2)
curve(dnorm, col = "blue", add = TRUE)
#IC al 95%
estint<-cumsum(rx)/(1:nsim)
esterr<-sqrt(cumsum((rx-estint)^2))/(1:nsim)
#EJERCICIO 11
#Consideramos una v.a. con densidad:
# f(x) = exp(-x)*cos^2(x) con x>0
nsim<-10^4
set.seed(1234)
x<-function(x){exp(-x)*(cos(x))^2}
h<-function(y){y}
y<-rexp(nsim)
w<-x(y)/dexp(y)
sum(w * h(y))/sum(w)
mean(w*h(y))
#EJERCICIO 12
#Usando el método de Monte Carlo aproximar el valor de: f(x,y)= exp(-x-y) con x,y
=(0,1)
h<-function(x,y)exp(-(x+y))
x.llim<-0; x.ulim<-1
y.llim<-0; y.ulim<-1
INT<-integrate(function(y){
sapply(y, function(y){
integrate(function(x)h(x,y),x.llim,x.ulim)$value
})
},y.llim,y.ulim)
#CON MC
nsim<-10^5
ux<-runif(nsim)
uy<-runif(nsim)
theta<-mean(h(ux,uy))
data.frame(INT$value,theta)
#EJERCICIO 13
#Calcule Ef[h(X)] cuando f es una funciÓn de densidad normal estándar y
#h(x) = exp(-(x-3)^2 + exp(-(x-6)^2/2)
# (a) Muestre que Ef[h(X)] puede ser calculado de forma cerrada y obtenga su
resultado.
# "sacar la esperanza de la función h con la normal"
# (b) Empleando el método de integración Monte Carlo hallar el valor aproximado de
# Ef [h(X)], use 1000 simulaciones, compare el resultado con su valor real.
# (c) Compare el resultado anterior con la aproximación obtenida por muestreo por
impor-
# tancia basándose en una función por importancia g correspondiente a una
U(0,1),
# use 1000 simulaciones.
Int.2(1000)
data.frame(Int.1$value, Int.2(1000))
# 0.02883184 0.02845214
h<-function(x){(exp(-(x-3)^2) + exp(-(x-6)^2/2))}
y <- rnorm(nsim)
w <- dnorm(y)/dnorm(y)
Int.3<-mean(w*h(y))
data.frame(Int.1$value, Int.3)
#EJERCICIO 14
##Simular valores de una normal estándar usando como distribución
#propuesta una uniforme (-4,4).
delta <- 4
N <- 1000
X <- numeric(N)
X[1] <- 0
set.seed(0)
for(i in 2:N) {
eps <- runif(1, -delta, delta)
y <- X[i-1] + eps
alpha <- min(dnorm(y, log = TRUE) - dnorm(X[i-1], log = TRUE), 0)
u <- runif(1, 0, 1)
if(log(u) <= alpha)
X[i] <- y
else
X[i] <- X[i-1]
}
summary(X)
X
hist(X)
library(ggplot2)
qplot(1:N, X, geom = "line", xlab = "Iteration")
#EJERCICIO 15
#Crear una función que implemente la técnica de variables antitéticas
#para aproximar la integral con fx= 0.5*exp(x) para 0<x<2
f<-function(x){0.5*exp(x)}
integrate(f,0,2)
curve(f, ylim=c(0,4))
abline(h=0,lty=2)
abline(v=c(0,2),lty=2)
a<-0
b<-2
#Con MC
mc.integral <- function(f, a, b, n, plot=TRUE) {
fx <- sapply(runif(n, a, b), f)*(b-a)
if (plot) {
estint <- cumsum(fx)/(1:n)
esterr <- sqrt(cumsum((fx-estint)^2))/(1:n)
plot(estint, ylab="Media y rango de error", type="l", lwd= 2,
ylim=mean(fx)+2*c(-esterr[1],esterr[1]), xlab="Iteraciones")
abline(h = estint[n], lty=2)
lines(estint+1.96*esterr, lty = 3)
lines(estint-1.96*esterr, lty = 3)
return(list(valor=estint[n], error=2*esterr[n]))
} else return(list(valor=mean(fx), error=2*sd(fx)/sqrt(n)))
}
set.seed(54321)
res <- mc.integral(f, a, b, 1000)
abline(h = integrate(f,0,2)$value)
data.frame(res, integrate(f,0,2)$value)
#EJERCICIO 16
#Simulamos una distribución de Bernoulli de parámetro p = 0.5.
#La aproximación por simulación de p será Xmedia
p <- 0.5
set.seed(1)
nsim <- 10000
rx <- runif(nsim) <= p
mean(rx)
#EJERCICIO 17
set.seed(1)
nsim <- 10000
rx <- rcauchy(nsim)
plot(cumsum(rx)/1:nsim, type="l", lwd=2,
xlab="Número de simulaciones", ylab="Media muestral")
#EJERCICIO 18
xsd <- 1
xmed <- 0
set.seed(1)
nsim <- 1000
rx <- rnorm(nsim, xmed, xsd)
#Intervalos
n <- 1:nsim
est <- cumsum(rx)/n
esterr <- sqrt(cumsum((rx-est)^2))/(n - 1) # Error estandar
plot(est, type = "l", lwd = 2, xlab = "Número de simulaciones",
ylab = "Media y rango de error", ylim = c(-1, 1))
abline(h = est[nsim], lty=2)
lines(est + 1.96*esterr, lty=3)
lines(est - 1.96*esterr, lty=3)
abline(h = xmed)
#EJERCICIO 19
#Sean U1,U2 variables aleatorias i.i.d. uniformes (0,1).
#Sea U3 = 1-U1 una variable aleatoria uniforme (0,1).
#Sea g(x) = exp(x^2), theta = integral de 0 a 1 de g(x).
#Quiero mostrar que:
#theta2= (exp(U1^2) + exp(U3^2)) /2 = (exp(U1^2) + exp((1-U1)^2)) /2 = exp(U1^2)[1
+ exp(1-2U1)] /2
#es mejor estimador que
#theta1 = (exp(U1^2) + exp(U2^2)) /2
n1<-10; n2<-10000
U1<-c(); U2<-c(); U3<-c()
X1<-c(); X2<-c(); X3<-c()
esp1<-c(); esp2<-c(); esp3<-c()
theta1<-c(); theta2<-c()
cov1<-c(); cov2<-c()
I<-c()
for(j in 1:n1){
U1<-runif(n2);
U2<-runif(n2);
U3<-1-U1;
for(i in 1:n2){
X1[i]<-exp((U1[i])^2)
X2[i]<-exp((U2[i])^2)
X3[i]<-exp((U3[i])^2)
}
esp1[j]<-mean(X1)
esp2[j]<-mean(X2)
esp3[j]<-mean(X3)
theta1[j]<-(esp1[j]+esp2[j])/2
theta2[j]<-(esp1[j]+esp3[j])/2
cov1[j]<-cov(X1,X2)
cov2[j]<-cov(X1,X3)
}
data.frame(cov1[j],cov2[j])
#como cov2<0, es mejor estimador
#EJERCICIO 20
#Se desea estimar la integral de theta = g(X) = exp((X)^2) con 0<x<1
U<-runif(1000,0,1)
x<-vector(length=1000)
for (i in 1:1000){
x[i]<-exp(U[i]^2)
}
teta<-mean(x)
theta[j]<-teta
}
var<-sd(theta)^2
mean(theta)
data.frame(Integral$value,mean(theta))
set.seed(7)
miu<-1.5
theta_cont<-vector()
for(j in 1:100){
f<-c()
g<-c()
u<-runif(1000,0,1)
for (i in 1:1000){
f[i]<-exp(u[i]^2)
g[i]<-1.5*(u[i]^2)+1
var_g<-sd(g)^2
cov<-cov(f,g)
c<-cov/var_g
teta_cont<-mean(f-c*g)+c*miu
theta_cont[j]<-teta_cont
}
mean(theta_cont)
var_control<-sd(theta_cont)^2
data.frame(Integral$value,mean(theta), mean(theta_cont),c)
red_varC<-(var-var_control)/var
teta1<-mean(Y)
teta2<-mean(W)
theta1[j]<-teta1
theta2[j]<-teta2
}
thata3<-(theta1+theta2)/2
mean(thata3)
data.frame(Integral$value,mean(theta), mean(theta_cont),mean(thata3))
var_min<-sd(thata3)^2
red_varA<-(var-var_min)/var
#EJERCICIO 21
#Aproximar mediante MC la media de una distribución exponencial de parámetro
lambda=2.
#EJERCICIO 22
#Suponer Y∼N(mean=μ,Var=1/τ).Sobre la base de una muestra, obtenga las
distribuciones
#posteriores de μ y τ usando la muestra de Gibbs.
n <- 30
ybar <- 15
s2 <- 3
sim<-10^5
#Valores de calentamiento
#mu <- mu[-(1:T)]
#tau <- tau[-(1:T)]
par(mfrow=c(1,2))
hist(mu,freq=F,xlab="mu", ylab="Densidad marginal", col = "pink", main = "")
hist(tau,freq=F,xlab="tau", ylab="Densidad marginal", col = "gray", main = "")
#EJERCICIO 23
#Use simulación con variables antiteticas para calcular:
#f(X,Y)= sin(x+y)*exp(-x^2+4*x-y) con -Inf<y<Inf & 0<x<Inf
g <- function(u, v) {
x <- qnorm(u, 2, sqrt(1/2))
y <- qexp(v)
exp(4) * sqrt(pi) * sin(x + y)
}
N <- 500
Antitetica<-system.time(sim1 <- replicate(10^4, {u <- runif(N); v <- runif(N);
mean(g(c(u, 1-u), c(v, 1-v))) }))
MC<-system.time(sim2 <- replicate(10^4, {u <- runif(2*N); v <- runif(2*N);
mean(g(u,v)) }))
#EJERCICIO 24
#Sea X~t con 8 grados de libertad, con función de densidad con f(x)=x^5*t8 con
2.1<x<Inf.
#Obtener una aproximación de la integral utilizando:
#Simulaciones directas de la v.a. t8 Student.
#Muestreo por importancia con
# Cauchy(0,1)
# Normal(0,1)
# Uniforme (0,1/2.1)
#Realice 100 simulaciones, obtenidas mediante muestreo por importancia
#con 1000 observaciones de cada una de las distribuciones alrededor
#del valor verdadero de la integral, identifique cuál es la mejor distribución
#para llevar a cabo la simulación.
t<-function(x){x^5*dt(x,8)}
Integral.M<-integrate(t,2.1,Inf)
#Con t-Student con k=8
mues.t<-matrix(nrow=1000, ncol=100)
for(j in 1:100) mues.t[,j]<-rt(1000,8)
for (j in 1:100) {
for(i in 1:1000){
if(mues.t[i,j]>2.1) h.muest.t[i,j]<-(mues.t[i,j])^5 else h.muest.t[i,j]<-0
}
}
I.mues<-apply(h.muest.t,2,mean)
plot(I.mues, type = 'l')
abline(h=valor)
mean(I.mues)
sd(I.mues)
#Con Cauchy(0,1)
mues.c<-matrix(nrow=1000, ncol=100)
for(j in 1:100) mues.c[,j]<-rcauchy(1000)
for (j in 1:100) {
for(i in 1:1000){
if(mues.c[i,j]>2.1)
h.muest.c[i,j]<-(mues.c[i,j])^5*(dt(mues.c[i,j],8))/(dcauchy(mues.c[i,j]))
else h.muest.c[i,j]<-0
}
}
I.mues.c<-apply(h.muest.c,2,mean)
plot(I.mues.c, type = 'l')
abline(h=valor)
mean(I.mues)
sd(I.mues)
#Con Normal(0,1)
mues.n<-matrix(nrow=1000, ncol=100)
for(j in 1:100) mues.c[,j]<-rnorm(1000)
for (j in 1:100) {
for(i in 1:1000){
if(mues.n[i,j]>2.1)
h.muest.n[i,j]<-(mues.n[i,j])^5*(dt(mues.n[i,j],8))/(dcauchy(mues.n[i,j]))
else h.muest.n[i,j]<-0
}
}
I.mues.n<-apply(h.muest.n,2,mean)
plot(I.mues.n, type = 'l')
abline(h=valor)
mean(I.mues)
sd(I.mues)
#Transformación y=x/2,1
#EJERCICIO 25
#Evaluar E(x) una distribución objetivo f(x)=2*x*exp(-x^2), x>0
#Al usar el muestreo de importancia, tomo una distribución de propuesta
#g(x)=exp(-x) ~Exp(1)
set.seed(0)
x <- rexp(1000)
f <- function(x) {2*x*exp(-x^2)}
w <- f(x) / dexp(x)
mean(w * x)
fx<-function(x){2*x*exp(-x^2)}
I<-integrate(fx,0,Inf)
data.frame(I$value,mean(w*x))
#EJERCICIO 26
#Calcular g(x) = 4*sqrt(1-x) con 0 < x < 1. Use Monte Carlo
MC<-function(n){
y<-4*sqrt(1-runif(n)^2)
theta<-mean(y)
Z<-1.96*sqrt(var(y)/n)
L.Inf<-theta-Z
L.Sup<-theta+Z
c(L.Inf,theta,L.Sup)
}
E<-MC(10000)