Hide
Apps Script

Class LinearOptimizationEngine

LinearOptimizationEngine

The engine used to model and solve a linear program. The example below solves the following linear program:

Two variables, x and y:
0 ≤ x ≤ 10
0 ≤ y ≤ 5

Constraints:
0 ≤ 2 * x + 5 * y ≤ 10
0 ≤ 10 * x + 3 * y ≤ 20

Objective:
Maximize x + y

 

 var engine = LinearOptimizationService.createEngine();

 // Add variables, constraints and define the objective with addVariable(), addConstraint(), etc
 // Add two variables, 0 <= x <= 10 and 0 <= y <= 5
 engine.addVariable('x', 0, 10);
 engine.addVariable('y', 0, 5);

 // Create the constraint: 0 <= 2 * x + 5 * y <= 10
 var constraint = engine.addConstraint(0, 10);
 constraint.setCoefficient('x', 2);
 constraint.setCoefficient('y', 5);

 // Create the constraint: 0 <= 10 * x + 3 * y <= 20
 var constraint = engine.addConstraint(0, 20);
 constraint.setCoefficient('x', 10);
 constraint.setCoefficient('y', 3);

 // Set the objective to be x + y
 engine.setObjectiveCoefficient('x', 1);
 engine.setObjectiveCoefficient('y', 1);

 // Engine should maximize the objective
 engine.setMaximization();

 // Solve the linear program
 var solution = engine.solve();
 if (!solution.isValid()) {
   Logger.log('No solution ' + solution.getStatus());
 } else {
   Logger.log('Value of x: ' + solution.getVariableValue('x'));
   Logger.log('Value of y: ' + solution.getVariableValue('y'));
 }
 

Methods

MethodReturn typeBrief description
addConstraint(lowerBound, upperBound)LinearOptimizationConstraintAdds a new linear constraint in the model.
addVariable(name, lowerBound, upperBound)LinearOptimizationEngineAdds a new continuous variable to the model.
addVariable(name, lowerBound, upperBound, type)LinearOptimizationEngineAdds a new variable to the model.
setMaximization()LinearOptimizationEngineSets the optimization direction to maximizing the linear objective function.
setMinimization()LinearOptimizationEngineSets the optimization direction to minimizing the linear objective function.
setObjectiveCoefficient(variableName, coefficient)LinearOptimizationEngineSets the coefficient of a variable in the linear objective function.
solve()LinearOptimizationSolutionSolves the current linear program with the default deadline of 30 seconds.
solve(seconds)LinearOptimizationSolutionSolves the current linear program.

Detailed documentation

addConstraint(lowerBound, upperBound)

Adds a new linear constraint in the model. The upper and lower bound of the constraint are defined at creation time. Coefficients for the variables are defined via calls to LinearOptimizationConstraint.setCoefficient(variableName, coefficient).

 

 var engine = LinearOptimizationService.createEngine();

 // Create a linear constraint with the bounds 0 and 10
 var constraint = engine.addConstraint(0, 10);

 // Create a variable so we can add it to the constraint
 engine.addVariable('x', 0, 5);

 // Set the coefficient of the variable in the constraint. The constraint is now:
 // 0 <= 2 * x <= 5
 constraint.setCoefficient('x', 2);
 

Parameters

NameTypeDescription
lowerBoundNumberlower bound of the constraint
upperBoundNumberupper bound of the constraint

Return

LinearOptimizationConstraint — the constraint created


addVariable(name, lowerBound, upperBound)

Adds a new continuous variable to the model. The variable is referenced by its name. The type is set to VariableType.CONTINUOUS.

 

 var engine = LinearOptimizationService.createEngine();
 var constraint = engine.addConstraint(0, 10);

 // Add a boolean variable (integer >= 0 and <= 1)
 engine.addVariable('x', 0, 1, LinearOptimizationService.VariableType.INTEGER);

 // Add a real (continuous) variable. Notice the lack of type specification.
 engine.addVariable('y', 0, 100);
 

Parameters

NameTypeDescription
nameStringunique name of the variable
lowerBoundNumberlower bound of the variable
upperBoundNumberupper bound of the variable

Return

LinearOptimizationEngine — a linear optimization engine


addVariable(name, lowerBound, upperBound, type)

Adds a new variable to the model. The variable is referenced by its name.

 

 var engine = LinearOptimizationService.createEngine();
 var constraint = engine.addConstraint(0, 10);

 // Add a boolean variable (integer >= 0 and <= 1)
 engine.addVariable('x', 0, 1, LinearOptimizationService.VariableType.INTEGER);

 // Add a real (continuous) variable
 engine.addVariable('y', 0, 100, LinearOptimizationService.VariableType.CONTINUOUS);
 

Parameters

NameTypeDescription
nameStringunique name of the variable
lowerBoundNumberlower bound of the variable
upperBoundNumberupper bound of the variable
typeVariableTypetype of the variable, can be one of VariableType

Return

LinearOptimizationEngine — a linear optimization engine


setMaximization()

Sets the optimization direction to maximizing the linear objective function.

 

 var engine = LinearOptimizationService.createEngine();

 // Add a real (continuous) variable. Notice the lack of type specification.
 engine.addVariable('y', 0, 100);

 // Set the coefficient of 'y' in the objective.
 // The objective is now 5 * y
 engine.setObjectiveCoefficient('y', 5);

 // We want to maximize.
 engine.setMaximization();
 

Return

LinearOptimizationEngine — a linear optimization engine


setMinimization()

Sets the optimization direction to minimizing the linear objective function.

 

 var engine = LinearOptimizationService.createEngine();

 // Add a real (continuous) variable. Notice the lack of type specification.
 engine.addVariable('y', 0, 100);

 // Set the coefficient of 'y' in the objective.
 // The objective is now 5 * y
 engine.setObjectiveCoefficient('y', 5);

 // We want to minimize
 engine.setMinimization();
 

Return

LinearOptimizationEngine — a linear optimization engine


setObjectiveCoefficient(variableName, coefficient)

Sets the coefficient of a variable in the linear objective function.

 

 var engine = LinearOptimizationService.createEngine();

 // Add a real (continuous) variable. Notice the lack of type specification.
 engine.addVariable('y', 0, 100);

 // Set the coefficient of 'y' in the objective.
 // The objective is now 5 * y
 engine.setObjectiveCoefficient('y', 5);
 

Parameters

NameTypeDescription
variableNameStringname of variable for which the coefficient is being set
coefficientNumbercoefficient of the variable in the objective function

Return

LinearOptimizationEngine — a linear optimization engine


solve()

Solves the current linear program with the default deadline of 30 seconds. Returns the solution found.

 

 var engine = LinearOptimizationService.createEngine();

 // Add variables, constraints and define the objective with addVariable(), addConstraint(), etc
 engine.addVariable('x', 0, 10);

 // ...

 // Solve the linear program
 var solution = engine.solve();
 if (!solution.isValid()) {
   throw 'No solution ' + solution.getStatus();
 }
 Logger.log('Value of x: ' + solution.getVariableValue('x'));
 

Return

LinearOptimizationSolution — solution of the optimization


solve(seconds)

Solves the current linear program. Returns the solution found. and if it is an optimal solution.

 

 var engine = LinearOptimizationService.createEngine();

 // Add variables, constraints and define the objective with addVariable(), addConstraint(), etc
 engine.addVariable('x', 0, 10);

 // ...

 // Solve the linear program
 var solution = engine.solve(300);
 if (!solution.isValid()) {
   throw 'No solution ' + solution.getStatus();
 }
 Logger.log('Value of x: ' + solution.getVariableValue('x'));
 

Parameters

NameTypeDescription
secondsNumberdeadline for solving the problem, in seconds; the maximum deadline is 300 seconds

Return

LinearOptimizationSolution — solution of the optimization