Home > Back-end >  Is it possible to conduct bi-objective linear programming with 12 variables?
Is it possible to conduct bi-objective linear programming with 12 variables?

Time:07-24

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?

CodePudding user response:

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.

  • Related