jueves, 15 de noviembre de 2012

4° Entrega - Subasta Inglesa

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. 

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.