Determinación del ganador
Subasta inglesa
Introducción
En esta práctica realizaremos una subasta, esta es la forma más sencilla de llegar a un mutuo acuerdo entre el agente y el subastador.
Objetivos
Asignar bienes a los agentes, generando una subasta la cual es un mecanismo convencional a grito abierto, ascendente, con la cual el que oferte una cantidad más alta es el que se lleva el objeto subastado.
Justificación
En un inicio pensamos realizar el protocolo Contract net, en el cual tuvimos muchas dificultades, así que decidimos cambiar a Subasta Inglesa, el cual también es un tema interesante y aplicable a la vida diaria.
Justificación
En un inicio pensamos realizar el protocolo Contract net, en el cual tuvimos muchas dificultades, así que decidimos cambiar a Subasta Inglesa, el cual también es un tema interesante y aplicable a la vida diaria.
Desarrollo
Desarrollamos una subasta inglesa, consiste en comenzar con un precio a grito abierto por lo cual el agente sabe cuanto ofrecen sus contrincantes, debido a esto su estrategia dominante es incrementar un poco más la oferta, la determinación del ganador sera quien ofrece más y pagara la cantidad ofrecida.
Código Subasta Inglesa
#! usr/bin/python
import pygame
import time
from random import randint
from pygame.locals import *
pygame.init()
def subasta():
print ("\nEl artiulo en venta es: %s - Precio inicial: $%d") % (articulo[0], articulo[1])
cantidad = input("\nCuantas ofertas se van a hacer: ")
pantalla.blit(fondo2, (0, 0))
pygame.display.update()
for i in range (cantidad):
if i == 0:
nombre = raw_input("Nombre: ")
x = input("Primera oferta: ")
while x <= articulo[1]:
print "Error, ingrese una oferta mayor a $%d" % (articulo[1])
x = input("Primera oferta: ")
arr.append(x)
precios.append(x)
nombres.append(nombre)
else:
nombre = raw_input("Nombre: ")
x = input("Siguiente oferta: ")
while precios[i-1] >= x:
print "Error, ingrese una oferta mayor a $%d" % (precios[i-1])
x = input("Siguiente oferta: ")
precios.append(x)
nombres.append(nombre)
while precios[i] < precios[i-1]:
print "Error, ingrese una oferta mayor a $%d" % (precios[i-1])
x = input("Siguiente oferta: ")
arr.append(x)
precios.append(x)
x = str(x)
pantalla.blit(fondo2, (0, 0))
pantalla.blit(fuente.render(x, True, (0, 0, 0)), (190, 90))
pygame.display.update()
x = int(x)
gana = max(arr)
pos = arr.index(gana)
ganador = nombres[pos]
print "El ganador es %s, ofrecio $%d" % (ganador, gana)
time.sleep(1)
pantalla.blit(fondo, (0, 0))
pantalla.blit(fuente.render("Ganador: %s" % (ganador), True, (255, 255, 255)), (80, 20))
pantalla.blit(fuente1.render("Ofrecio $%d" % (gana), True, (255, 255, 255)), (230, 65))
pygame.display.update()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()
if __name__ == "__main__":
arr = []
nombres = []
precios = []
a1 = "Tazo de Will Smith"
p1 = 1500
a2 = "Disco de los Beatles"
p2 = 300
a3 = "Playera de los tigres"
p3 = 600
a4 = "Chevy seminuevo 2008"
p4 = 30000
a5 = "Laptop Sony"
p5 = 7000
articulo = 0
articulos = randint(0, 4)
if articulos == 0:
articulo = [a1, p1]
elif articulos == 1:
articulo = [a2, p2]
elif articulos == 2:
articulo = [a3, p3]
elif articulos == 3:
articulo = [a4, p4]
else:
articulo = [a5, p5]
pantalla = pygame.display.set_mode((576, 350))
pygame.display.set_caption("Subasta Inglesa")
fondo = pygame.image.load("subasta1.png")
fondo2 = pygame.image.load("subasta2.png")
pantalla.blit(fondo, (0, 0))
pygame.display.update()
fuente = pygame.font.Font(None, 50)
fuente1 = pygame.font.Font(None, 40)
pantalla.blit(fuente.render(articulo[0], True, (250, 250, 250)), (80, 20))
pantalla.blit(fuente1.render("Precio inicial: $%d" % (articulo[1]), True, (250, 250, 250)), (210, 65))
pygame.display.update()
subasta()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()
Resultados
Estamos satisfechos con los resultados obtenidos al realizar esta práctica, en un principio iniciamos la pŕactica con la idea de realizar el protocolo Contract Net, pero al no tener muy clara la idea, decidimos cambiarlo ya que el código no realizaba lo debido. Al cambiar a Subasta Inglesa pensamos que sería algo muy sencillo, pero al final resulto ser un poco complicado.
A continuación presentamos el video de la ejecución.
Video
Conclusiones
Con esta práctica concluimos que este mecanismo es muy utilizado en la vida diaria,podría ayudar a cualquier persona que desee realizar una subasta, en el código se mostró el objeto a subastar, posteriormente se realizaron varias ofertas, y al final se escogió la oferta con el precio mayor. Tuvimos menor dificultad en desarrollar la subasta a comparación del contract net.




