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)
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())
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 :)")