2016-05-04 13 views
1

Ich bin dabei, das lineare Programm von LpSolveAPI zu lösen, und ich möchte die Variable der Objektfunktion für Variable subject zu ersetzen.So ersetzen Sie Variable bei lpSolveAPI in R

zum Beispiel i nachahmen orignal meine lp wie diese

x5 <- x1 + x2 
x6 <- x2 + x3 + x4 

object funtion 
min x5 + x6 

subject to 
x1 + x2    <= 2 
     x3 + x4  <= 5 
     x2 + x4  <= 3 
x1, x2, x3, x4 = binary 
x5, x6 = integer 

to do this by lpSolveAPI, I try it like below 


lprec <- make.lp(3, 4) # make.lp 
var_lp <- matrix(c(rep(1, 12)), nrow = 3) # variable as var_lp 

set.column(lprec, 1, var_lp[1,1], indices = 1) # s.t. 
set.column(lprec, 2, c(var_lp[1,2], var_lp[3,2], indices = c(1,3)) 
set.column(lprec, 3, var_lp[2,3], indices = 2) 
set.column(lprec, 4, c(var_lp[2,4], var_lp[3,4], indices = c(2,3)) 

ich weiß nicht mehr, wie x5, x6 bei lpSolveAPI

für führende

Vielen Dank auszudrücken. ich hoffe, jemand gibt mir eine antwort darüber

* plus, mein orignal daten hat etwa 5.000 constraint. ist es möglich, durch lpSolveAPI zu analysieren?

Antwort

0

Die set.type Funktion ermöglicht es Ihnen, integer Domänen angeben

set.type(lprec, 5, type="integer") 

Sie müssten Ihre Definition des Problems zu erhöhen, aber:

lprec <- make.lp(5,6) 

Edit: Codefragment für dieses Problem

library(lpSolveAPI) 
lprec <- make.lp(5,6) 
set.objfn(lprec, obj=c(1,1), indices=c(5,6)) # sense defaults to "min" 
set.row(lprec, 1, xt=c(1,1), indices=c(1,2)) 
set.row(lprec, 2, xt=c(1,1), indices=c(3,4)) 
set.row(lprec, 3, xt=c(1,1), indices=c(2,4)) 
set.row(lprec, 4, xt=c(1,1,-1), indices=c(1,2,5)) 
set.row(lprec, 5, xt=c(1,1,1,-1), indices=c(2,3,4,6)) 
set.type(lprec, 1, type="binary") 
set.type(lprec, 2, type="binary") 
set.type(lprec, 3, type="binary") 
set.type(lprec, 4, type="binary") 
set.type(lprec, 5, type="integer") 
set.type(lprec, 6, type="integer") 
set.constr.type(lprec, types=c(rep("<=",3), rep("=",2))) 
set.rhs(lprec, b=c(2,5,3,0,0)) 

Sie können print oderverwendenüberprüfen, dass das angegebene Programm das Programm ist, das Sie lösen möchten. Mit solve berechnen Sie die Lösung, die in diese alle gleich Null sein würde:

solve(lprec) 
get.variables(lprec) 

(Ich glaube, dass implizit nimmt lpSolve Nichtnegativität aller Variablen.)

+0

Vielen Dank für Ihre advisement. und weißt du, wie man x5, x6 bei lpSolveAPI ausdrücken kann? (x5 = x1 + x2, x6 = x2 + x3 + x4) –

+0

Sie können x5, x6 als zusätzliche Einschränkungen hinzufügen, siehe bearbeitete Antwort. –

+0

Ich bin so Danke für Ihre Hilfe. Ich löse mein LP-Problem. Haben Sie einen guten Tag :) –