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