Reputation: 21
A farmer has a piece of farm land, say L km2, to be planted with either wheat or barley or some combination of the two. The farmer has a limited amount of fertilizer, F kilograms, and insecticide, P kilograms. Every square kilometer of wheat requires F1 kilograms of fertilizer, and P1 kilograms of insecticide, while every square kilometer of barley requires F2 kilograms of fertilizer, and P2 kilograms of insecticide. Let S1 be the selling price of wheat per square kilometer, and S2 be the selling price of barley. If we denote the area of land planted with wheat and barley by x1 and x2 respectively, then profit can be maximized by choosing optimal values for x1 and x2. This problem can be expressed with the following linear programming problem in the standard form: see this page where they have given the constraints. http://en.wikipedia.org/wiki/Linear_programming
What is the procedure to solve such kind of questions ?
Upvotes: 0
Views: 1350
Reputation: 111
import java.text.DecimalFormat;
public class CandidateCode {
public String get_total_profit(String input1) {
String[] inputs = input1.split(",");
// Piece of farm land in square kilometer
float L = Float.valueOf(inputs[0]);
// Fertilizer in kg
float F = Float.valueOf(inputs[1]);
// Insecticide in kg
float P = Float.valueOf(inputs[2]);
// Fertilizer required in kg for square kilometer of Wheat
float F1 = Float.valueOf(inputs[3]);
// Insecticide required in kg for square kilometer of Wheat
float P1 = Float.valueOf(inputs[4]);
// Fertilizer required in kg for square kilometer of Rice
float F2 = Float.valueOf(inputs[5]);
// Insecticide required in kg for square kilometer of Rice
float P2 = Float.valueOf(inputs[6]);
// Selling price of wheat per square kilometer
float S1 = Float.valueOf(inputs[7]);
// Selling price of rice per square kilometer
float S2 = Float.valueOf(inputs[8]);
// Result Variables
float totalRiceInsecUsed = 0f;
float totalRiceFertUsed = 0f;
float totalWheatInsecUsed = 0f;
float totalWheatFertUsed = 0f;
float areaOfWheat = 0.00f;
float areaOfRice = 0.00f;
float amount = 0.00f;
while (true) {
if ((L == areaOfRice + areaOfWheat)
|| P == totalRiceInsecUsed + totalWheatInsecUsed
|| F == totalRiceFertUsed + totalWheatFertUsed || F2 == 0
|| F1 == 0 || P2 == 0 || P1 == 0) {
break;
}
float calRiceProfit = Math.min(F / F2, P / P2) * S2;
float calWheatProfit = Math.min(F / F1, P / P1) * S1;
if (calRiceProfit > calWheatProfit) {
float areaInsecUsed = P / P2;
float areaFertUsed = F / F2;
if (areaInsecUsed > areaFertUsed) {
L = L - areaFertUsed;
F2 = 0;
totalRiceFertUsed = totalRiceFertUsed + F2;
areaOfRice = areaOfRice + areaFertUsed;
amount = amount + areaFertUsed * S2;
} else if (areaInsecUsed < areaFertUsed) {
L = L - areaInsecUsed;
P2 = 0;
totalRiceInsecUsed = totalRiceInsecUsed + areaInsecUsed;
areaOfRice = areaOfRice + areaInsecUsed;
amount = amount + areaInsecUsed * S2;
}
} else {
float areaInsecUsed = P / P1;
float areaFertUsed = F / F1;
if (areaInsecUsed > areaFertUsed) {
L = L - areaFertUsed;
F1 = 0;
totalWheatFertUsed = totalWheatFertUsed + F1;
areaOfWheat = areaOfWheat + areaFertUsed;
amount = amount + areaFertUsed * S1;
} else if (areaInsecUsed < areaFertUsed) {
L = L - areaInsecUsed;
P1 = 0;
totalWheatInsecUsed = totalWheatInsecUsed + areaInsecUsed;
areaOfWheat = areaOfWheat + areaInsecUsed;
amount = amount + areaInsecUsed * S1;
}
}
}
DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
df.setMinimumFractionDigits(2);
return df.format(amount) + "," + df.format(areaOfWheat) + ","
+ df.format(areaOfRice);
}
}
Upvotes: 1
Reputation: 17576
Your problem is a so-called linear programming problem. There are various algorithms and various implementations. I have used a program called GLPK and it works well. You state your problem in a domain-specific programming language and GLPK processes the program to find a solution. A web search for GLPK should find it.
Upvotes: 1