Class LinearOptimizationEngine

LinearOptimizationEngine

O mecanismo usado para modelar e resolver um programa linear. O exemplo abaixo resolve o seguinte programa linear:

Duas variáveis, x e y:
0 ≤ x ≤ 10
0 ≤ y ≤ 5

Restrições:
0 ≤ 2 * x + 5 * y ≤ 10
0 ≤ 10 * x + 3 * y ≤ 20

Objetivo:
maximizar 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'));
}

Métodos

MétodoTipo de retornoBreve descrição
addConstraint(lowerBound, upperBound)LinearOptimizationConstraintAdiciona uma nova restrição linear ao modelo.
addConstraints(lowerBounds, upperBounds, variableNames, coefficients)LinearOptimizationEngineAdiciona restrições em lote ao modelo.
addVariable(name, lowerBound, upperBound)LinearOptimizationEngineAdiciona uma nova variável contínua ao modelo.
addVariable(name, lowerBound, upperBound, type)LinearOptimizationEngineAdiciona uma nova variável ao modelo.
addVariable(name, lowerBound, upperBound, type, objectiveCoefficient)LinearOptimizationEngineAdiciona uma nova variável ao modelo.
addVariables(names, lowerBounds, upperBounds, types, objectiveCoefficients)LinearOptimizationEngineAdiciona variáveis em lote ao modelo.
setMaximization()LinearOptimizationEngineDefine a direção de otimização para maximizar a função de objetivo linear.
setMinimization()LinearOptimizationEngineDefine a direção de otimização para minimizar a função de objetivo linear.
setObjectiveCoefficient(variableName, coefficient)LinearOptimizationEngineDefine o coeficiente de uma variável na função de objetivo linear.
solve()LinearOptimizationSolutionResolve o programa linear atual com o prazo padrão de 30 segundos.
solve(seconds)LinearOptimizationSolutionResolve o programa linear atual.

Documentação detalhada

addConstraint(lowerBound, upperBound)

Adiciona uma nova restrição linear ao modelo. Os limites superior e inferior da restrição são definidos no momento da criação. Os coeficientes das variáveis são definidos por chamadas para 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);

Parâmetros

NomeTipoDescrição
lowerBoundNumberlimite inferior da restrição
upperBoundNumberlimite superior da restrição

Retorno

LinearOptimizationConstraint: a restrição criada.


addConstraints(lowerBounds, upperBounds, variableNames, coefficients)

Adiciona restrições em lote ao modelo.

var engine = LinearOptimizationService.createEngine();

// Add a boolean variable 'x' (integer >= 0 and <= 1) and a real (continuous >= 0 and <= 100)
variable 'y'.
engine.addVariables(['x', 'y'], [0, 0], [1, 100],
    [LinearOptimizationService.VariableType.INTEGER,
        LinearOptimizationService.VariableType.CONTINUOUS]);

// Adds two constraints:
//   0 <= x + y <= 3
//   1 <= 10 * x - y <= 5
engine.addConstraints([0.0, 1.0], [3.0, 5.0], [['x', 'y'], ['x', 'y']], [[1, 1], [10, -1]]);

Parâmetros

NomeTipoDescrição
lowerBoundsNumber[]Limites inferiores das restrições
upperBoundsNumber[]os limites superiores das restrições
variableNamesString[][]os nomes das variáveis para as quais os coeficientes estão sendo definidos
coefficientsNumber[][]coeficientes sendo definidos

Retorno

LinearOptimizationEngine: um mecanismo de otimização linear


addVariable(name, lowerBound, upperBound)

Adiciona uma nova variável contínua ao modelo. A variável é referenciada pelo nome. O tipo é definido como 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);

Parâmetros

NomeTipoDescrição
nameStringnome exclusivo da variável
lowerBoundNumberlimite inferior da variável
upperBoundNumberlimite superior da variável

Retorno

LinearOptimizationEngine: um mecanismo de otimização linear


addVariable(name, lowerBound, upperBound, type)

Adiciona uma nova variável ao modelo. A variável é referenciada pelo nome.

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);

Parâmetros

NomeTipoDescrição
nameStringnome exclusivo da variável
lowerBoundNumberlimite inferior da variável
upperBoundNumberlimite superior da variável
typeVariableTypetipo da variável, pode ser VariableType

Retorno

LinearOptimizationEngine: um mecanismo de otimização linear


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

Adiciona uma nova variável ao modelo. A variável é referenciada pelo nome.

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.

Parâmetros

NomeTipoDescrição
nameStringnome exclusivo da variável
lowerBoundNumberlimite inferior da variável
upperBoundNumberlimite superior da variável
typeVariableTypetipo da variável, pode ser VariableType
objectiveCoefficientNumbercoeficiente objetivo da variável

Retorno

LinearOptimizationEngine: um mecanismo de otimização linear


addVariables(names, lowerBounds, upperBounds, types, objectiveCoefficients)

Adiciona variáveis em lote ao modelo. As variáveis são referenciadas pelos nomes.

var engine = LinearOptimizationService.createEngine();

// Add a boolean variable 'x' (integer >= 0 and <= 1) and a real (continuous >=0 and <= 100)
// variable 'y'.
engine.addVariables(['x', 'y'], [0, 0], [1, 100],
    [LinearOptimizationService.VariableType.INTEGER,
        LinearOptimizationService.VariableType.CONTINUOUS]);

Parâmetros

NomeTipoDescrição
namesString[]nomes exclusivos das variáveis
lowerBoundsNumber[]os limites inferiores das variáveis
upperBoundsNumber[]os limites superiores das variáveis,
typesVariableType[]das variáveis, pode ser VariableType
objectiveCoefficientsNumber[]coeficientes objetivos das variáveis

Retorno

LinearOptimizationEngine: um mecanismo de otimização linear


setMaximization()

Define a direção de otimização para maximizar a função de objetivo linear.

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();

Retorno

LinearOptimizationEngine: um mecanismo de otimização linear


setMinimization()

Define a direção de otimização para minimizar a função de objetivo linear.

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();

Retorno

LinearOptimizationEngine: um mecanismo de otimização linear


setObjectiveCoefficient(variableName, coefficient)

Define o coeficiente de uma variável na função de objetivo linear.

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);

Parâmetros

NomeTipoDescrição
variableNameStringnome da variável para a qual o coeficiente está sendo definido
coefficientNumbercoeficiente da variável na função objetiva

Retorno

LinearOptimizationEngine: um mecanismo de otimização linear


solve()

Resolve o programa linear atual com o prazo padrão de 30 segundos. Retorna a solução encontrada.

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'));

Retorno

LinearOptimizationSolution: solução da otimização


solve(seconds)

Resolve o programa linear atual. Retorna a solução encontrada e se ela é uma solução ideal.

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'));

Parâmetros

NomeTipoDescrição
secondsNumberprazo para resolver o problema, em segundos; o prazo máximo é 300 segundos

Retorno

LinearOptimizationSolution: solução da otimização