Hi All Apologies if this is not the correct list for this question. The Rglpk package offers the following example in its documentation library(Rglpk) ## Simple mixed integer linear program. ## maximize: 3 x_1 + 1 x_2 + 3 x_3 ## subject to: -1 x_1 + 2 x_2 + x_3 <= 4 ## 4 x_2 - 3 x_3 <= 2 ## x_1 - 3 x_2 + 2 x_3 <= 3 ## x_1, x_3 are non-negative integers ## x_2 is a non-negative real number obj <- c(3, 1, 3) mat <- matrix(c(-1, 0, 1, 2, 4, -3, 1, -3, 2), nrow = 3) dir <- c("<=", "<=", "<=") rhs <- c(4, 2, 3) types <- c("I", "C", "I") max <- TRUE Rglpk_solve_LP(obj, mat, dir, rhs, types, max) ## Same as before but with bounds replaced by ## -Inf < x_1 <= 4 ## 0 <= x_2 <= 100 ## 2 <= x_3 < Inf bounds <- list(lower = list(ind = c(1L, 3L), val = c(-Inf, 2)), upper = list(ind = c(1L, 2L), val = c(4, 100))) Rglpk_solve_LP(obj, mat, dir, rhs, types, max, bounds) I have 2 questions 1. What is the purpose of the L in the bounds statement (e.g. 1L, 3L etc)? 2. Is it possible to further constrain a variable such that in the optimal solution to the objective function it will be a specific integer or an integer multiple of that integer. For example, x_3 must be 2 or 4,6,8,10 etc Thanks Pete This e-mail may contain confidential or proprietary information belonging to the BP group and is intended only for the use of the recipients named above. If you are not the intended recipient, please immediately notify the sender and either delete this email or return to the sender immediately. You may not review, copy or distribute this email. Within the bounds of law, this part of BP retains all emails and IMs and may monitor them to ensure compliance with BP's internal policies and for other legitimate business purposes. [[alternative HTML version deleted]]
On Thu, Jun 11, 2009 at 9:56 PM, Brecknock, Peter<Peter.Brecknock at bp.com> wrote:> Apologies if this is not the correct list for this question. > > The Rglpk package offers the following example in its documentation > > library(Rglpk) > ## Simple mixed integer linear program. > ## maximize: 3 x_1 + 1 x_2 + 3 x_3 > ## subject to: -1 x_1 + 2 x_2 + x_3 <= 4 > ## 4 x_2 - 3 x_3 <= 2 > ## x_1 - 3 x_2 + 2 x_3 <= 3 > ## x_1, x_3 are non-negative integers > ## x_2 is a non-negative real number > obj <- c(3, 1, 3) > mat <- matrix(c(-1, 0, 1, 2, 4, -3, 1, -3, 2), nrow = 3) > dir <- c("<=", "<=", "<=") > rhs <- c(4, 2, 3) > types <- c("I", "C", "I") > max <- TRUE > Rglpk_solve_LP(obj, mat, dir, rhs, types, max) > > ## Same as before but with bounds replaced by > ## -Inf < x_1 <= 4 > ## 0 <= x_2 <= 100 > ## 2 <= x_3 < Inf > > bounds <- list(lower = list(ind = c(1L, 3L), val = c(-Inf, 2)), > upper = list(ind = c(1L, 2L), val = c(4, 100))) > Rglpk_solve_LP(obj, mat, dir, rhs, types, max, bounds) > > I have 2 questions > > 1. What is the purpose of the L in the bounds statement (e.g. 1L, 3L > etc)? > > 2. Is it possible to further constrain a variable such that in the > optimal solution to the objective function it will be a specific integer > or an integer multiple of that integer. For example, x_3 must be 2 or > 4,6,8,10 etcRegarding your first question, I am not very sure, but it seems that iL means the constraint i. Concerning your second question, the answer is positive. To force x_3 being an even number, just add the following constraints: x_3 = 2 * y, y >= 1, y integer. Paul
The "1L", etc., forces the number to be integer: > is.integer(1) [1] FALSE > is.integer(1L) [1] TRUE Hope this helps. Spencer Paul Smith wrote:> On Thu, Jun 11, 2009 at 9:56 PM, Brecknock, Peter<Peter.Brecknock at bp.com> wrote: > >> Apologies if this is not the correct list for this question. >> >> The Rglpk package offers the following example in its documentation >> >> library(Rglpk) >> ## Simple mixed integer linear program. >> ## maximize: 3 x_1 + 1 x_2 + 3 x_3 >> ## subject to: -1 x_1 + 2 x_2 + x_3 <= 4 >> ## 4 x_2 - 3 x_3 <= 2 >> ## x_1 - 3 x_2 + 2 x_3 <= 3 >> ## x_1, x_3 are non-negative integers >> ## x_2 is a non-negative real number >> obj <- c(3, 1, 3) >> mat <- matrix(c(-1, 0, 1, 2, 4, -3, 1, -3, 2), nrow = 3) >> dir <- c("<=", "<=", "<=") >> rhs <- c(4, 2, 3) >> types <- c("I", "C", "I") >> max <- TRUE >> Rglpk_solve_LP(obj, mat, dir, rhs, types, max) >> >> ## Same as before but with bounds replaced by >> ## -Inf < x_1 <= 4 >> ## 0 <= x_2 <= 100 >> ## 2 <= x_3 < Inf >> >> bounds <- list(lower = list(ind = c(1L, 3L), val = c(-Inf, 2)), >> upper = list(ind = c(1L, 2L), val = c(4, 100))) >> Rglpk_solve_LP(obj, mat, dir, rhs, types, max, bounds) >> >> I have 2 questions >> >> 1. What is the purpose of the L in the bounds statement (e.g. 1L, 3L >> etc)? >> >> 2. Is it possible to further constrain a variable such that in the >> optimal solution to the objective function it will be a specific integer >> or an integer multiple of that integer. For example, x_3 must be 2 or >> 4,6,8,10 etc >> > > Regarding your first question, I am not very sure, but it seems that > > iL > > means the constraint i. > > Concerning your second question, the answer is positive. To force x_3 > being an even number, just add the following constraints: > > x_3 = 2 * y, > > y >= 1, > > y integer. > > Paul > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. > >