2016-06-01 16 views
1

Ich arbeite in der virtuellen Netzwerkeinbettung, und ich erstelle ein Modell mit glpk, um die Netzwerke einzubetten. Ich habe diese folgende Zielfunktion:GLPK - Minimiere einen Variablenwert

minimize cost: sum{(i,j) in VEdges} sum{u in SNodes, v in SNodes} weight[u,v] * fw[i,j,u,v] * secSupEdge[u,v] + sum{u in SNodes, v in SNodes} r[u,v] * secSupEdge[u,v]; 

Dann habe ich die folgenden zwei Einschränkungen (ua)

s.t. relConst2{(i,j) in VEdges, u in AllNodes, v in AllNodes}: bwDem[i,j] * phiw[i,j,u,v] >= fw[i,j,u,v]; 

s.t. linkSecConst0{(i,j) in VEdges, u in SNodes, v in SNodes}: phiw[i,j,u,v] * secDemEdge[i,j] <= secSupEdge[u,v]; 

"phiw" eine binäre Variable ist

"fw "und" r "sind Variablen, die einen beliebigen Wert annehmen können> = 0

alle anderen ("Gewicht", "bwDem", "secDemEdges", "secSupEdge") sind params nur

Ich möchte phiw mit fw beziehen. Wenn fw> 0, phiw 1. den Wert nehmen sollte, wenn fw == 0, phiw den Wert nehmen sollte 0

Normalerweise tut es das, was ich will, aber manchmal phiw nimmt der Wert 1, wenn fw den Wert 0 hat, was ich nicht will. Dies geschieht, weil die Einschränkungen erfüllt sind:

Beispiel 1:

S. T. relConst2: 4 * 1> = 0

s.t. linkSecConst0: 1 * 2 = 2

Gibt es eine Möglichkeit, den Wert phiw Variable zu minimieren, aber nicht in die Zielfunktion setzen? Oder setzen Sie es in die Zielfunktion, aber ändern Sie den Wert des Ergebnisses weder den Wert aller anderen Variablen?

Antwort

0

Die Frage phiw zu minimieren, besteht darin, die Beschreibung des Problems schlägt jedoch vor, dass Sie wollen, was Link die Werte von phiw und fw und insbesondere phiw = 1 wenn fw > 0 und phiw = 0 sonst (dh zu tun haben ist, fw = 0).

Ich würde vorschlagen, dass Sie Einschränkung hinzufügen, die direkt die bedingten Karten auf fw auf den Wert von phiw, wie zum Beispiel:

s.t. LinkConstraint { (i,j) in VEdges, u in AllNodes, v in AllNodes }: if fw[i,j,u,v] > 0 then 1 else 0 = phiw[i,j,u,v] ;