[R] Help setting optimization problem to include more constraints

Berend Hasselman bhh at xs4all.nl
Wed Nov 28 11:16:25 CET 2012


On 28-11-2012, at 04:48, Jorge I Velez wrote:

> Dear R-helpers,
> 
> I am struggling with an optimization problem at the moment and decided to
> write the list looking for some help. I will use a very small example to
> explain what I would like to. Thanks in advance for your help.
> 
> We would like to distribute resources from 4 warehouses to 3 destinations.
> The costs associated are as follows:
> 
>           Destination
> From     1    2     3     Total
> 1          1    3     4      300
> 2          3    2     3      200
> 3          2    2     1      200
> 4          1    3     1      200
> Total   350  250  300   900
> 
> Thus, shipping one unit from warehouse 1 to destination point 3 costs $4.
> 
> Let X_{ij} be the number of units to be shipped from warehouse i to
> destinaton j (i = 1, 2, 3, 4; j= 1, 2, 3). If c_{ij} is the cost of
> shipping one unit from warehouse  i to destination j, the formulation in R
> would be as follows:
> 
> require(lpSolve)
> f <- matrix(c(1, 3, 4, 3, 2, 3, 2, 2, 1, 1, 3, 1), ncol = 3, byrow = TRUE)
> row.rhs <- c(300, 200, 200, 200)
> col.rhs <- c(350, 250, 300)
> row.signs <- rep("==", length(row.rhs))
> col.signs <- rep("==", length(col.rhs))
> lp.transport(f, "min", row.signs, row.rhs, col.signs, col.rhs)
> D <- lp.transport(f, "min", row.signs, row.rhs, col.signs, col.rhs)
> D$solution
> #      [,1] [,2] [,3]
> #[1,]  300    0    0
> #[2,]    0  200    0
> #[3,]    0   50  150
> #[4,]   50    0  150
> 
> Thus, we will ship 300 units from point 1 to destination 1; 200 from point
> 2 to destination 2 and so on, and the cost of this distribution plan is
> $1150. However, I would like to add the following two constraints:
> 
> # 1.  weighted sums by column
> # w is a vector of known constants, i.e., w = c(1.2, .9, .7, 2.3)
> # r is also known, i.e., r = 4
> w1*x11 + w2*x21 + w3*x21 + w4*x41   == r    # col 1

Shouldn't w3*x21  be w3 * x31?

> w1*x12 + w2*x22 + w3*x32 + w4*x42   == r    # col 2
> w1*x13 + w2*x23 + w3*x33 + w4*x43   == r    # col 3
> 
> # 2. By column, the number of X's greater than zero should be two or
> greater. In this small example, this condition is satisfied, but I would
> like to make sure that it is also satisfied in my problem.
> 
> # 3. Using lp.transport(), the function to be minimized is linear, i.e., Z
> = c11*x11 + c12*x12 + ... + c42*x42 + c43*x43. However, in my case, I am
> interested in minimizing the standard deviation of g = c(l1, l2, l3), with
> 
> l1 = w1*x11 + w2*x21 + w3*x21 + w4*x41
> l2 = w1*x12 + w2*x22 + w3*x32 + w4*x42
> l3 = w1*x13 + w2*x23 + w3*x33 + w4*x43
> 
> and w as previously described.

From constraint #1 and the definition3 in #3 one may conclude:

l1==r
l2==r
l3==r

implying that the standard deviation of g is 0. Always. 
Take your pick for x values.

I don't get it.

Berend




More information about the R-help mailing list