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.
addVariable(name, lowerBound, upperBound, type, objectiveCoefficient)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


addVariable(name, lowerBound, upperBound, type, objectiveCoefficient)

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, 2);
 // The objective is now 2 * x.

 // Add a real (continuous) variable
 engine.addVariable('y', 0, 100, LinearOptimizationService.VariableType.CONTINUOUS, -5);
 // The objective is now 2 * x - 5 * y.
 

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
objectiveCoefficientNumberobjective coefficient of the variable

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

Send feedback about...

Apps Script
Apps Script