# -*- coding: utf-8 -*- """ Case Study Implementierung """ from gurobipy import Model, GRB, quicksum """ Parameter """ # Fixkosten der Eröffnung der Standorte i f = [1093500,534600,607500] # Kapazitäten der Standorte i a = [500, 200, 250] # Nachfrage der Kunden j b = [50, 150, 60, 80, 50, 300] # Kosten für die Lieferung einer Einheit von Standort i zu Kunde j c = [[118,175, 51,247,219,372], [167,217, 80,137, 95,253], [350,399,359,217,167, 89]] """ Definition Modell """ model_general = Model("Case Study") m = 3 # Mögliche Standorte i n = 6 # Kunden j M = range(m) N = range(n) ## Variablen ################################################################## # Transportmenge von Standort i zu Kunde j x = model_general.addVars(M, N, lb=0, vtype=GRB.CONTINUOUS, name="x") # Eröffnung Standort i y = model_general.addVars(M, vtype=GRB.BINARY, name="y") model_general.update() # Variablen werden System bekannt gemacht ## Nebenbedingungen ########################################################## # Kapatzitätsbegrenzung der Standorte i model_general.addConstrs(quicksum(x[i, j] for j in N) <= y[i] * a[i] for i in M) # Erfüllung der Nachfrage für Kunden j model_general.addConstrs(quicksum(x[i, j] for i in M) == b[j] for j in N) model_general.addConstr(x[2,5] == 0) ## Zielfunktion ############################################################## model_general.setObjective(quicksum(c[i][j] * x[i, j] for i in M for j in N) + quicksum(y[i] * f[i] for i in M), GRB.MINIMIZE) # Definition Ende ############################################################# model_general.optimize() model_general.write("case study.lp") """ Ausgabe Lösung """ model_general.getVars() opening_cost = 0 transport_cost = 0 print(" ") for i in M: if (y[i].x == 1): opening_cost += f[i] print("Eroeffne Standort %s" % i) print(" ") print("Transportmenge von Standort i zu Kunde j:") print(" ") for i in M: if (y[i].x == 1): print(" ") for j in N: if (x[i, j].x > 0): transport_cost += c[i][j] * x[i, j].x print("Von Standort %s Kunde %s: %s" % (i, j, x[i, j].x)) print(" ") print("Optimale Loesung gibt Gesamtkosten von: %.2f" % model_general.objVal) percentage_transport = transport_cost / model_general.objVal * 100 percentage_opening = opening_cost / model_general.objVal * 100; print("Transportkosten: %.2f (%.2f%%) und Fixkosten: %.2f (%.2f%%)" % (transport_cost, percentage_transport, opening_cost, percentage_opening))