roptimizationlinear-programmingpareto-optimality

Is it possible to conduct bi-objective linear programming with 12 variables?


I have 12 variables (x1-x12), and I want to conduct linear programming between these 12 variables and 2 dependent variables(y1,y2).

Here is my original data:

df<-structure(list(Crop = c("Vegetable A", "Vegetable B", "Maize", 
"Barley", "Potato", "Fruit A", "Fruit B", "Rice", "Tabacco", 
"Rape crop", "Faba bean", "Other beans"), `Nutrient surplus (kg/ha)` = c(495, 
495, 287, 269, 330, 355, 355, 226, 194, 203, 130, 137), `Output value (k yuan/ha)` = c(1234.5, 
1234.5, 260.637180923077, 160.344827586207, 798.39552631579, 
1085, 1085, 385.188901345292, 1075.6125, 216.65625, 196.511045454545, 
909), Type = c("A", "B", "A", "B", "B", "A", "B", "A", "C", "B", 
"B", "B"), Area = c("x1", "x2", "x3", "x4", "x5", "x6", "x7", 
"x8", "x9", "x10", "x11", "x12")), class = c("tbl_df", "tbl", 
"data.frame"), row.names = c(NA, -12L))

The relationships between 12 variables and 2 dependent variables are:

y1=495*x1+495*x2+287*x3+269*x4+330*x5+355*x6+355*x7+226*x8+194*x9+203*x10+130*x11+137*x12
y2=123450*x1+123450*x2+26063.7*x3+16034.5*x4+79839.6*x5+108500*x6+108500*x7+38518.9*x8+107561.25*x9+21665.6*x10+19651.1*x11+90900*x12

With the constraints:

x1+x3+x6+x8+x9<=22666.67
x2+x4+x5+x7+x10+x11+x12<=22666.67
x9<=3333.33

I hope that I can have the low y1 but high y2. But y1 and y2 are tied to each other, so I hope to find a balance between them. Maybe similar to Pareto principle?


Solution

  • Here is what I would start with.

    1. Scale the output y2 a bit. (Choose units 1000yuan/ha). Now we have similar magnitudes between y1 and y2.

    2. The first interesting experiment is to find lower and upper bounds on y1 and y2. Lower bound is zero, upper bounds are to be determined by an LP. So 2 LPs need to be solved.

    3. Use a weighted objective and form:

      min z = w*y1 - (1-w)*y2
      subject to constraints
      

      Vary w (0.1,0.2,...,0.9) and solve. From 2. we know w=0 and w=1 already. Draw a picture of y1 vs y2 for each w. That is your efficient curve.