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'),
)