2016-12-07 2 views
1

Ich habe folgendes lineares Ziel Programmierung Problem, dass ich R zu lösen bin versucht, mit:lineare Ziel Programmierung in R nicht in der Lage, Lösungen zu finden

ich versuchte, mit R in dem folgende Matrix-Format zu formulieren:

enter image description here

Unten ist die reproduzierbare Beispiel:

library("lpSolve") 
a <- matrix(c(1,2,5, 
       1/2,1,3, 
       1/5,1/3,1),nrow=3,byrow=T) 

f.obj <- c(rep(1,6),rep(0,3)) 

f.cons <- matrix(c(c(1,-1,0,0,0,0,1,-1,0, 
        0,0,1,-1,0,0,1,0,-1, 
        0,0,0,0,1,-1,0,1,-1, 
        1,0,0,0,0,0,0,0,0, 
        0,1,0,0,0,0,0,0,0, 
        0,0,1,0,0,0,0,0,0, 
        0,0,0,1,0,0,0,0,0, 
        0,0,0,0,1,0,0,0,0, 
        0,0,0,0,0,1,0,0,0, 
        0,0,0,0,0,0,1,0,0, 
        0,0,0,0,0,0,0,1,0, 
        0,0,0,0,0,0,0,0,1) 
),nrow=12,byrow=T) 

f.dir <- c(rep("=",3),rep(">",9)) 

f.rhs <- c(c(log(a[1,2]),log(a[1,3]),log(a[2,3])),rep(0,9)) 

g <- lp ("min", f.obj, f.cons, f.dir, f.rhs) 
g$solution 

> g$solution 
[1] 0.1823216 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 1.6094379 1.0986123 0.0000000 

Hier sind meine Fragen:

  1. Die Lösung ist falsch? Gibt es irgendetwas, was ich falsch formuliert habe?
    1. Wie kann ich für eine nxn Matrix mit R für die obige Zielprogrammierung zu formulieren.
+0

Gibt es eine Definition für die 'wi'? –

Antwort

1

Hier ist eine Lösung, die das lpSolveAPI-Paket verwendet. Es ergibt das gleiche Ergebnis für n = 3. Der Code sollte auch für ein größeres n (und eine Matrix A) funktionieren:

library(lpSolveAPI) 
n <- 3 
a <- matrix(c(1,2,5,1/2,1,3,1/5,1/3,1),nrow=n,byrow=T) 
num_entries <- n*(n-1)/2 

# set up lp  
lprec <- make.lp(0, ncol=2*num_entries+n) 
set.objfn(lprec, obj=c(rep(1,2*num_entries), rep(0,n))) 

# add constraints 
dim2idx <- function(xy, i, j, n=3) ifelse(xy=="x", 0, n*(n-1)/2) + n*(n-1)/2 - (n-i)*(n+1-i)/2 + (j-i)  
for (i in seq(1,n-1)) 
    for (j in seq(i+1,n)) 
     add.constraint(lprec, xt=c(1,-1,1,-1), indices=c(dim2idx("x", i,j), dim2idx("y", i,j), 2*num_entries+c(i,j)), type="=", rhs=log(a[i,j])) 

# solve 
solve(lprec) 
exp(get.variables(lprec)) # solved for log x, so exp here 
Verwandte Themen