Optimierungsmodell in Gurobi binäre Variablen
Verfasst: Samstag 5. Januar 2019, 17:40
Hallo zusammen:)
Ich möchte mit Gurobi ein Optimierungsproblem lösen und komme gerade nicht weiter damit mein mathematisches Modell entsprechend umzusetzen.
Mein Modell lautet folgendermaßen:
Es soll die Zeit t, die Schiffe benötigen, um einen Fluß zu durchqueren minimiert werden. Begrenzt ist das Problem durch eine gewisse Nachfrage, die erfüllt werden muss und durch die Breite des Flusses, sodass nur bestimmt viele Schiffe nebeneinander fahren können. Es wird in 5 Schifftypen unterschieden, die unterschiedliche Kapazitäten und Breiten haben.
Um zu simulieren, welches Schiff wann und wo ist, habe ich überlegt den Fluss in verschiedene Abschnitte der Länge der Schiffe zu teilen (zunächst unter der Annahme sie wären alle gleich lang) und dann eine Variable y_i zu definieren, die 1 ist, wenn ein Schiff des jeweiligen Typen in dem Moment in dem Abschnitt ist und 0, wenn nicht. Für jeden Abschnitt muss dann die Breiten-Einschränkung berücksichtigt werden. Die Zielfunktion soll dann die Zeit einen Abschnitt zu durchqueren, wenn dieser von dem Schiff befahren wird, minimieren.
Mein Versuch sieht bisher so aus:
Nun weiß ich nicht, wie ich die binäre Variable y einbringen kann und wie ich dann die Zielfunktion definieren muss. Kann mir an der Stelle jemand weiter helfen? Wenn jemand eine andere Idee oder Ansatz zu dem Problem hat, bin ich da auch immer dankbar für!
Ganz lieben Dank und liebe Grüße
Kristina
Ich möchte mit Gurobi ein Optimierungsproblem lösen und komme gerade nicht weiter damit mein mathematisches Modell entsprechend umzusetzen.
Mein Modell lautet folgendermaßen:
Es soll die Zeit t, die Schiffe benötigen, um einen Fluß zu durchqueren minimiert werden. Begrenzt ist das Problem durch eine gewisse Nachfrage, die erfüllt werden muss und durch die Breite des Flusses, sodass nur bestimmt viele Schiffe nebeneinander fahren können. Es wird in 5 Schifftypen unterschieden, die unterschiedliche Kapazitäten und Breiten haben.
Um zu simulieren, welches Schiff wann und wo ist, habe ich überlegt den Fluss in verschiedene Abschnitte der Länge der Schiffe zu teilen (zunächst unter der Annahme sie wären alle gleich lang) und dann eine Variable y_i zu definieren, die 1 ist, wenn ein Schiff des jeweiligen Typen in dem Moment in dem Abschnitt ist und 0, wenn nicht. Für jeden Abschnitt muss dann die Breiten-Einschränkung berücksichtigt werden. Die Zielfunktion soll dann die Zeit einen Abschnitt zu durchqueren, wenn dieser von dem Schiff befahren wird, minimieren.
Mein Versuch sieht bisher so aus:
Code: Alles auswählen
from gurobipy import *
m = Model('Model 1')
#definition of the 5 ship types
c1 = m.addVar(vtype=GRB.INTEGER, name="c1")
c2 = m.addVar(vtype=GRB.INTEGER, name="c2")
c3 = m.addVar(vtype=GRB.INTEGER, name="c3")
c4 = m.addVar(vtype=GRB.INTEGER, name="c4")
c5 = m.addVar(vtype=GRB.INTEGER, name="c5")
m.setObjective(????, GRB.MINIMIZE)
#Constraint 1: meet forecasted demand
con1=m.addConstr(2500*c1+4500*c2+8000*c3+13000*c4+50000*c5>=15000)
#Constraint 2: width of the waterways in the canal must be smaller than the ships
con2=m.addConstr(20*c1+32*c2+43*c3+49*c4+74*c5<=152)
m.optimize()
v: object
for v in m.getVars():
#if v.X != 0:
print("%s %f" % (v.Varname, v.X))
Ganz lieben Dank und liebe Grüße
Kristina