Exemple #1
0
                  name="c10")
#

# ''' NUEVO '''
# modelo.addConstrs((quicksum(nu[e, i, t, b] for t in range(b, b + m[e] + 1)) == h[e, b] + d[e, b] for e in E for b in T if ((2 <= b) and (b <= Tb - m[e]))), name= "c7")

# # Inicialización de las Variables
modelo.addConstrs((x[e, i, 0, d] == 0 for e in E for i in P for d in T),
                  name="c11")

#
modelo.addConstrs((quicksum(k[e, i, t] for i in P) <= d[e, t] for e in E
                   for t in range(1, Tb + 1)))

# Restriccion q se deberia cumplir pero no lo esta haceindo. ACEPTAR A TODA LA URGENCIA
# modelo.addConstrs(quicksum(k[e,i,t] for i in P) == d[e,t] for e in E for t in T)
''' Función Objetivo '''
# modelo.setObjective(quicksum(l[e, t] * (d[e, t] - k[e, i , t]) for e in E for t in T for i in P) + quicksum(v[i, t] * n[i, t] for i in P for t in T) + quicksum(c[e, i, j] * z[e, i, j, t, d] for e in E for i in P for j in P2 for t in T for d in T2) + quicksum(w[e, i, t] * f[e, i] for e in E for t in T for i in P), GRB.MINIMIZE)
# modelo.setObjective(quicksum(l[e, t] * (d[e, t] - k[e, i , t]) for e in E for t in T for i in P) + quicksum(x[e, i, t, d] * f[e, i] for i in P for e in E for t in range(1, len(T)) for d in T), GRB.MINIMIZE)
modelo.setObjective(
    quicksum(l[e, t] * (d[e, t] - k[e, i, t]) for e in E for t in T
             for i in P) + quicksum(x[e, i, t, d] * f[e, i] for i in P
                                    for e in E for t in range(1, Tb + 1)
                                    for d in range(1, Tb + 1)), GRB.MINIMIZE)
''' Solucion '''
modelo.optimize()

# Mostrar los valores de las soluciones
modelo.printAttr("X")
# print(maximo_dia)
def pack_opti(qa_mod, qc_mod, cf_mod, cck_mod, pc_mod, qt_mod, iter):

	# Se crea el modelo
	m = Model()


	# Clamshells despachados de tipo k a mercado i en el turno t del dia d
	D = fn.crear_vars_clamshells(m, 'D')

	# Clamshells producidos de tipo k a mercado i el turno t del dia d
	C = fn.crear_vars_clamshells_con_t(m, 'C')

	# Clamshells producidos de tipo k a mercado i el turno t del dia d
	A = fn.crear_vars_clamshells(m, 'A')

	# Si trabajador n de tipo m trabaja en el turno t del dia d
	T = fn.crear_vars_trabajadores(m)

	# Si se enciende la camara de frio para almacenar fruta el dia d
	F = fn.crear_vars_camaras(m)

	# Se actualiza el modelo
	m.update()

	# Se satisface la demanda
	fn.satisface_demanda(m, D)

	# Almacenaje max
	fn.almacenaje_max(m, A, qa_mod)
	
	# Restricciones de inventario
	fn.inventario(m, D, A, C)

	# Maximo de turnos diarios
	fn.max_turnos_dia(m, T)

	# Cantidad de trabajadores minimos
	fn.min_trabajadores(m, T, C, qt_mod)

	# Max produccion en cada turno
	fn.max_produccion(m, C, qc_mod)

	# Estandares aceptables por mercado
	fn.acceptable(m, C)

	# No se trabaja los domingos
	fn.no_domingos(m, T)

	# Se prende el frigorifico
	fn.prende_frigorifico(m, A, F, qa_mod)

	# El primer dia no se producen clamshells
	fn.d_primer_dia(m, D)


	# Funcion Objetivo
	fn.funcion_objetivo(m, D, C, T, F, cf_mod, cck_mod, pc_mod)

	m.optimize()

	m.printAttr("X")

	# Se hacen los graficos
	plot(m, iter)
Exemple #3
0
                model.addConstr(x[t,
                                  j] == quicksum(y[t, j, k] for k in range(K)),
                                name="R8_{}{}".format(t, j))

        ## Disponibilidad de personas:
        for t in range(T):
            for j in range(m):
                model.addConstr(x[t, j] <= quicksum(a_tji[t][j][i]
                                                    for i in range(n)),
                                name="R9_{}{}".format(t, j))

        ## No negatividad
        for t in range(T):
            for j in range(m):
                model.addConstr(x[t, j] >= 0, name="R10_{}{}".format(t, j))
                for k in range(K):
                    model.addConstr(z[t, j, k] >= 0,
                                    name="R11_{}{}{}".format(t, j, k))
                    model.addConstr(y[t, j, k] >= 0,
                                    name="R12_{}{}{}".format(t, j, k))
                for r in range(R):
                    model.addConstr(s[t, r, j] >= 0,
                                    name="R13_{}{}{}".format(t, j, r))

        # SOLUCIÓN
        model.optimize()
        print("Numero de soluciones: {}".format(model.solCount))
        model.printAttr("X")
        model.write("out.sol")
        print("Valor optimo:", model.getObjective().getValue())
Exemple #4
0
m.addConstrs(
    (quicksum(A[i, j, k, h] for k in K for i in I) <= 1
     for h in H
     for j in J
     ),
    name="R25 - Para toda cama solo se permite máximo una instalación por hora"
)

m.addConstrs(
    (quicksum(A[i, j, k, h_] for k in K for h_ in range(1, h+1)) >= quicksum(B[i, j, h_] for h_ in range(1, h+1))
     for j in J
     for i in I
     for h in H),
    name="R26 - El paciente no puede desocupar la cama antes de ser instalado"
)

m.optimize()

sys.stdout = open('output-slack.txt', 'a', encoding='utf-8')
try:
    print('SOLUCIÓN')
    m.printAttr("X")

    # for c in m.getConstrs():
    #     print('%s : %g' % (c.constrName, c.slack))

except Exception as e:
    m.computeIIS()
sys.stdout = sys.__stdout__
for s in range(1, len(periodos)):
    for e in range(1, n+1):
        modelo.addConstr(
            variables_de_pymes[("Rp", e, periodos[s])] ==
            (variables_de_pymes[("Np", e, periodos[s])] + variables_de_pymes["Ft", e, periodos[s-1]]) *
            (parametros_a["T"] / (parametros_a["T"] + parametros_a["B"])),
            name = f"R16_{e}_{periodos[s]}"
        )
####### R17 #########
for s in periodos:
    for e in range(1, n+1):
        modelo.addConstr(
            variables_de_pymes[("Np", e, s)] == variables_de_a[("Nt", s)] * parametros_pymes[e]["Lt"],
            name = f"R17_{e}_{s}"
        )

modelo.update()

modelo.optimize()


modelo.printAttr("X")
modelo.write("out.sol")
#### restricciones y su holgura ####
check = input("Deseas revisar la holgura y el lado derecho de las restricciones activas\n1 -> Si\n2 -> No\n")
while not check.isdigit() or int(check) not in range(1, 3):
    check = input("Ingresa un numero valido\n")
check = int(check)
if check == 1:
    modelo.printAttr(["Sense", "Slack", "RHS"])
print("Programa terminado, gracias por tu tiempo :)")