An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20121128/f0628886/attachment.pl>
Help setting optimization problem to include more constraints
2 messages · Jorge I Velez, Berend Hasselman
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.