Optimierungsmodell in Gurobi binäre Variablen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
blondieatwork
User
Beiträge: 10
Registriert: Donnerstag 29. November 2018, 14:51

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:

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))
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
ArtooDetoo
User
Beiträge: 60
Registriert: Dienstag 4. Dezember 2018, 16:57

Eine Lösung habe ich leider nicht, aber könntest du die Zielfunktion genauer definieren?
Es soll die Zeit t, die Schiffe benötigen, um einen Fluß zu durchqueren minimiert werden.
Ist damit die Gesamtzeit gemeint bis die Nachfrage erfüllt ist oder die durchschnittliche/worst-case/... Zeit für ein Schiff?
blondieatwork
User
Beiträge: 10
Registriert: Donnerstag 29. November 2018, 14:51

Es soll die Zeit, die alle Schiffe insgesamt benötigen, um die Nachfrage zu erfüllen minimiert werden. Also die Summe der Durchfahrtzeit aller Schiffe in einem Tag, sodass die Bedingungen erfüllt werden.
Antworten