Carregando WebR...
# ============================================ # Leiloes: Vickrey vs. Primeiro Preco # Exercicios Resolvidos 19.6 e 19.7 # ============================================ cat("====== LEILOES: VICKREY vs. PRIMEIRO PRECO ======\n\n") # --- Caso concreto (ER 19.6) --- v <- c(100, 80, 60) n_concreto <- length(v) cat("--- ER 19.6: Leilao de obra de arte ---\n") cat(sprintf("Valoracoes: v1=%.0f, v2=%.0f, v3=%.0f\n\n", v[1], v[2], v[3])) cat("VICKREY (2o preco):\n") cat(sprintf(" Lances otimos: b_i = v_i => %s\n", paste(v, collapse=", "))) cat(sprintf(" Vencedor: Licitante 1 (lance=%.0f)\n", v[1])) cat(sprintf(" Preco pago: 2o maior lance = %.0f\n", sort(v, decreasing=TRUE)[2])) cat(sprintf(" Excedente do vencedor: %.0f - %.0f = %.0f\n\n", v[1], sort(v, decreasing=TRUE)[2], v[1] - sort(v, decreasing=TRUE)[2])) cat("PRIMEIRO PRECO (com n=3, U[0,120]):\n") cat(sprintf(" Estrategia: beta(v) = (n-1)/n * v = %.2f * v\n", (n_concreto-1)/n_concreto)) lances_fp <- v * (n_concreto-1)/n_concreto cat(sprintf(" Lances: %s\n", paste(round(lances_fp, 1), collapse=", "))) cat(sprintf(" Vencedor: Licitante 1 (lance=%.1f)\n", lances_fp[1])) cat(sprintf(" Preco pago: %.1f\n", lances_fp[1])) cat(sprintf(" Excedente do vencedor: %.0f - %.1f = %.1f\n\n", v[1], lances_fp[1], v[1] - lances_fp[1])) # --- Equivalencia de receita (ER 19.7) --- cat("--- ER 19.7: Equivalencia de receita (n=2, U[0,1]) ---\n") n <- 2 # Primeiro preco # beta(v) = (n-1)/n * v = v/2 # E[receita] = E[max lance] = (n-1)/n * E[max(v)] = 1/2 * 2/3 = 1/3 E_max_v <- n / (n + 1) E_receita_fp <- ((n-1)/n) * E_max_v cat(sprintf("PRIMEIRO PRECO:\n")) cat(sprintf(" beta(v) = v/%.0f\n", n)) cat(sprintf(" E[max(v)] = n/(n+1) = %.4f\n", E_max_v)) cat(sprintf(" E[receita] = (n-1)/n * E[max(v)] = %.4f\n\n", E_receita_fp)) # Segundo preco (Vickrey) # E[receita] = E[2o maior valor] = E[min(v1,v2)] = 1/(n+1) = 1/3 E_receita_vk <- 1 / (n + 1) cat(sprintf("VICKREY (2o preco):\n")) cat(sprintf(" E[receita] = E[min(v1,v2)] = 1/(n+1) = %.4f\n\n", E_receita_vk)) cat(sprintf("Equivalencia: %.4f = %.4f? %s\n\n", E_receita_fp, E_receita_vk, ifelse(abs(E_receita_fp - E_receita_vk) < 0.001, "SIM!", "NAO"))) # --- Variando n --- cat("--- Receita esperada vs. numero de licitantes ---\n") cat(sprintf("%-5s %-12s %-12s %-12s\n", "n", "E[R] 1o P", "E[R] Vickrey", "Bid shading")) cat(strrep("-", 45), "\n") n_vals <- 2:10 Er_vec <- numeric(length(n_vals)) for (k in seq_along(n_vals)) { ni <- n_vals[k] Er <- (ni - 1) / (ni + 1) # mesma para ambos Er_vec[k] <- Er shading <- 1/ni # quanto "esconde" no 1o preco cat(sprintf("%-5d %-12.4f %-12.4f %-12.2f%%\n", ni, Er, Er, shading*100)) } cat("\nMais licitantes => mais competicao => mais receita\n") cat("Mais licitantes => menos bid shading no 1o preco\n\n") # --- Simulacao Monte Carlo --- set.seed(42) N_sim <- 10000 n_sim <- 5 # 5 licitantes receita_vk <- numeric(N_sim) receita_fp <- numeric(N_sim) for (i in 1:N_sim) { vals <- runif(n_sim) sorted <- sort(vals, decreasing = TRUE) receita_vk[i] <- sorted[2] # 2o maior receita_fp[i] <- ((n_sim-1)/n_sim) * sorted[1] # lance do vencedor } cat(sprintf("--- Simulacao Monte Carlo (n=%d, %s rodadas) ---\n", n_sim, format(N_sim, big.mark="."))) cat(sprintf("Receita media Vickrey: %.4f\n", mean(receita_vk))) cat(sprintf("Receita media 1o Preco: %.4f\n", mean(receita_fp))) cat(sprintf("Teorico: (n-1)/(n+1) = %.4f\n", (n_sim-1)/(n_sim+1))) # --- Grafico --- par(mfrow = c(1, 2), mar = c(4.5, 4.5, 3, 1), bg = "#f8f9fa") # Painel 1: Estrategia de lance no 1o preco v_seq <- seq(0, 1, length = 200) n_plot <- c(2, 3, 5, 10) cols <- c("#0d6efd", "#198754", "#fd7e14", "#dc3545") plot(NULL, xlim = c(0, 1), ylim = c(0, 1), xlab = "Valoracao (v)", ylab = "Lance b(v)", main = "Estrategia 1o preco: bid shading") abline(0, 1, col = "#adb5bd", lty = 3, lwd = 1) text(0.85, 0.95, "b=v\n(Vickrey)", col = "#adb5bd", cex = 0.6) for (k in seq_along(n_plot)) { ni <- n_plot[k] lines(v_seq, v_seq * (ni-1)/ni, lwd = 2.5, col = cols[k]) } legend("topleft", legend = c(paste0("n=", n_plot), "b=v (Vickrey)"), col = c(cols, "#adb5bd"), lwd = c(rep(2.5, 4), 1), lty = c(rep(1, 4), 3), cex = 0.55, bg = "white") # Painel 2: Receita esperada vs n n_fine <- 2:20 Er_fine <- (n_fine - 1) / (n_fine + 1) plot(n_fine, Er_fine, type = "b", lwd = 3, col = "#0d6efd", pch = 19, cex = 1.2, xlab = "Numero de licitantes (n)", ylab = "Receita esperada E[R]", main = "Receita vs. competicao", ylim = c(0, 1)) abline(h = 1, col = "#dc3545", lty = 3, lwd = 1.5) text(15, 0.95, "Lim = 1 (extracao total)", col = "#dc3545", cex = 0.6) text(5, 0.5, "E[R] = (n-1)/(n+1)\n(ambos os formatos)", col = "#0d6efd", cex = 0.7, font = 2)
▶ Executar
↻ Resetar
(Aguardando WebR...)