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 no 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 no 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

Retornar

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[]limites superiores das restrições
variableNamesString[][]os nomes das variáveis para as quais os coeficientes estão sendo definidos
coefficientsNumber[][]coeficientes sendo definidos

Retornar

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

Retornar

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 um destes VariableType

Retornar

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 um destes VariableType
objectiveCoefficientNumbercoeficiente objetivo da variável

Retornar

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[]os nomes exclusivos das variáveis
lowerBoundsNumber[]limites inferiores das variáveis
upperBoundsNumber[]limites superiores das variáveis
typesVariableType[]das variáveis, podem ser VariableType
objectiveCoefficientsNumber[]coeficientes objetivos das variáveis

Retornar

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

Retornar

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

Retornar

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 de objetivo

Retornar

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

Retornar

LinearOptimizationSolution: solução da otimização


solve(seconds)

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

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 é de 300 segundos

Retornar

LinearOptimizationSolution: solução da otimização