# -*- coding: utf-8 -*-
"""
Created on Wed Jun 14 15:38:10 2017

@author: Bucs
"""

from gurobipy import *

def fixture(Equipos):

    mod = Model('Fixture')
    Fechas = list(range(1,len(Equipos),1))
    
    #######################
    #Variables de Decisión
    #######################

    x= {}
    for i in Equipos:
        for j in Equipos:
            if j!=i:
                for k in Fechas:
                    x[i,j,k] = mod.addVar(vtype = 'B', name = 'x[%s,%s,%s]' %(i,j,k))

    mod.update()


    ################
    # Restricciones
    ################
    
    for i in Equipos:
        for j in Equipos:
            if i!=j:
                mod.addConstr(quicksum(x[i,j,k]+ x[j,i,k] for k in Fechas)==1)
    
    for i in Equipos:
        for k in Fechas:
            mod.addConstr(quicksum(x[i,j,k] + x[j,i,k] for j in Equipos if i!=j)==1)
                    

    ##########################
    # Optimizamos
    ############################
    mod.optimize()


    ###########################################################
    # Aveces cuando el problema sale infactible, es bueno ver
    #que restricciones están haciendo nuestro modelo fallar
    #y asi escribir estas de manera correcta.
    ###########################################################


    if mod.status == GRB.status.INFEASIBLE:
        mod.computeIIS()
        mod.write("fixture.ilp")
    
    ################
    # Generamos documento del fixture
    ###############    
    
    f = open('Fixture.txt', 'w')
    
    for k in Fechas:
        f.write('Fecha '+str(k)+'\n')
        partidos = [(i,j) for i in Equipos for j in Equipos if i!=j and x[i,j,k].X ==1]
        for (i,j) in partidos:
            f.write(str(i)+'\t vs. \t'+str(j)+'\n')
    
    return 'ok'

Equipos = ['UE', 'CC', 'UCH', 'SW','Iqui', 'Ant', 'Hua', 'UdeC']

fixture(Equipos)
