Especificando un modelo

Los modelos se especificarán en Python. El profesor nos dió un ejemplo pero no tenemos que seguirlo al pié de la letra.

Ejemplo del profesor

class factory (la-super-clase-de-las-chicas):
    cantidad-de-objetos =
    productos =
    costo-unitario =
    ganancia-unitaria =
    def funcionobjetivo():
        codigo que genera el string de la funcion objetivo



ipython...

ejemplo = factory()

ejemplo.cantidad-de-objetos = 4;
ejemplo.costo-unitario = [1 2 3 1]
ejemplo.ganancia-unitaria = [2 3 4 5]
ejemplo.productos = [lapiz, goma, zapato, media]
ejemplo.variables-enteras = [l, g, z]
ejemplo.variables-continuas = [media]
ejemplo.restriccion.add('3*lapiz + 5*goma <= media + zapato') #esto estaria en base.
ejemplo.implicaciones.add('lapiz > 5', implica, 'medias < 4')
ejemplo.almenos(3, zapato < 4, media > 5, lapiz + goma = 4)
ejemplo.objetivo = [max, funcionobjetivo()]
ejemplo.costo_fijo(45, zapato > 16)

ejemplo.construyeelmodelo()


modelo:
 integer l g z
 var     media
 binary d1, d2, d3, d4, d5

objfun:
 max 2*l + 3*g + ... - 1*l + ... - d5*45
restrictions:
 3*l + 5*g <= media + z

Otra forma:

class ProductionPlanification(Model):

    variables = (
        'products',
    )

    data = (
        'unitary_cost',
        'unitary_gain'
    )

    @objective_function(goal='max')
    def z(self):
        "Gain - Cost"
        obj_func = ""
        for i in xrange(len(self.products)):
            p = self.products[i]
            obj_func += "%s * %s - %s * %s + "%(self.unitary_gain[i], p, self.unitary_cost[i], p)
        else:
            obj_func = obj_func[:-3]
        return obj_func

class SchoolMaterialsFactory(ProductionPlanification):

    variables = {
        'products':['pencil', 'notebook'],
    }

    data = {
        'unitary_cost':['0', '0'],
        'unitary_gain':['1', '2'],
    }

    r1 = ComparissonRestriction('notebook', ge, '600')
    r2 = ComparissonRestriction('notebook', le, '2 * pencil')
    r3 = ComparissonRestriction('pencil', gt, '0')

    restrictions = (
        ComparissonRestriction('pencil',le,'600'),
        ImplicationRestriction(r1, r2),
        FixedCostRestriction(r3, '200'),
    )
Tags