1

Ich hoffe, diese Nachricht findet Sie gut.Gemischte Ganzzahl Programmierung in R - Anzeigefunktionen

Ich versuche, ein Optimierungsproblem zu lösen, das als ein Mixed Integer-Programm mit dem LpSolveAPI R-Paket formuliert wird. Es gibt jedoch Indikatorfunktionen in der Zielfunktion und in einigen Einschränkungen. Um genauer zu sein, betrachten Sie das folgende Optimierungsproblem:

min{  2.8 * x1 +  3.2 * x2 +  3.5 * x3 + 
    17.5 * delta(x1) + 2.3 * delta(x2) + 5.5 * delta(x3) } 

unterliegt:

0.4 * x1 + 8.7 * x2 + 4.5 * x3 <= 
      387 - 3 * delta(x1) - 1 * delta(x2) - 3 * delta(x3) 

    x1 <= 93 * delta(x1) 

    x2 <= 94 * delta(x2), 

    x3 <= 100 * delta(x3), and 

    x1, x2, and x3 are non-negative integers. 

In diesem Problem, die alle für i in {1, 2, 3}, delta (xi) = 1 wenn xi> 0, während delta (xi) andernfalls = 0 ist.

Der R-Code, den ich bisher habe, ist:

install.packages("lpSolveAPI") 
library(lpSolveAPI) 
a <- c(3, 1, 3) 
b <- c(0.4, 8.7, 4.5) 
q <- 387 
M <- c(93, 94, 100) 
A <- c(17.5, 2.3, 5.5) 
h <- c(2.8, 3.2, 3.5) 

Fn <- function(u1, u2, u3, u4){ 
lprec <- make.lp(0, 3) 
lp.control(lprec, "min") 
set.objfn(lprec, u1) 
add.constraint(lprec, u2, "<=", u3) 
set.bounds(lprec, lower = rep(0, 3), upper = u4) 
set.type(lprec, columns = 1:3, type = "integer") 
solve(lprec) 
return(list(Soln = get.variables(lprec), MinObj = get.objective(lprec))) 
} 

TheTest <- Fn(u1 = h, u2 = b, u3 = q, u4 = M) 

Bitte, ich frage mich, ob mir jemand sagen könnte, wie Deltafunktionen in diesen R-Code zu setzen, die oben genannte Optimierungsproblem zu lösen.

Rodrigo.

+0

Dies ist die Dirac "Delta-Funktion"? –

+0

Oder vielleicht sein Integral. –

+0

Es ist eine Indikatorfunktion I (.) Definiert als: I (x) = 1 wenn x in A, während I (x) = 0 sonst, wo A = (0, + unendlich). – Student1981

Antwort

1

Ein Zwang wie x1 <= 93 * delta(x1) sieht sehr seltsam zu mir. Ich denke, das ist nur x1 <= 93. Bei einem MIP-Solver ersetzen Sie die Funktion delta(x) durch eine binäre Variable d. Fügen Sie dann die Einschränkung d <= x <= M*d hinzu, wobei M eine obere Grenze für x ist. Um explizit zu sein, für Ihr Modell haben wir:

min 2.8*x1 + 3.2*x2 + 3.5*x3 + 17.5*d1 + 2.3*d2 + 5.5*d3 
0.4*x1 + 8.7*x2 + 4.5*x3 <= 387 - 3*d1 - d2 - 3*d3 
d1 <= x1 <= 93*d1 
d2 <= x2 <= 94*d2 
d3 <= x3 <= 100*d3 
x1 integer in [0,93] 
x2 integer in [0,94] 
x3 integer in [0,100] 
d1,d2,d3 binary 

Dies ist nun trivial mit jedem MIP-Löser zu lösen. Beachten Sie, dass eine doppelte Ungleichung wie d1 <= x1 <= 93*d1 als zwei Ungleichungen geschrieben werden kann: d1<=x1 und x1<=93*d1.

+0

Danke für den Vorschlag, Mr. Kalvelagen. Ich habe jedoch festgestellt, dass Ihr Vorschlag den Fall enthält, in dem di = 0 und xi> 0 sind, wobei i in {1, 2, 3} ist. – Student1981

+0

Nein: Sie irren sich –

+0

Zum Beispiel, die Beschränkung d1 <= x1 findet statt, wenn d1 = 0 und x1 = 30> 0. – Student1981