Class LinearOptimizationEngine

Motor deoptimización lineal

Es el motor que se usa para modelar y resolver un programa lineal. En el siguiente ejemplo, se resuelve el siguiente programa lineal:

Dos variables, x y y:
0 ≤ x ≤ 10
0 ≤ y ≤ 5

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

Objetivo:
Maximizar x + y

const 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
let constraint = engine.addConstraint(0, 10);
constraint.setCoefficient('x', 2);
constraint.setCoefficient('y', 5);

// Create the constraint: 0 <= 10 * x + 3 * y <= 20
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
const 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 datos que se muestraDescripción breve
addConstraint(lowerBound, upperBound)LinearOptimizationConstraintAgrega una nueva restricción lineal al modelo.
addConstraints(lowerBounds, upperBounds, variableNames, coefficients)LinearOptimizationEngineAgrega restricciones por lotes al modelo.
addVariable(name, lowerBound, upperBound)LinearOptimizationEngineAgrega una nueva variable continua al modelo.
addVariable(name, lowerBound, upperBound, type)LinearOptimizationEngineAgrega una variable nueva al modelo.
addVariable(name, lowerBound, upperBound, type, objectiveCoefficient)LinearOptimizationEngineAgrega una variable nueva al modelo.
addVariables(names, lowerBounds, upperBounds, types, objectiveCoefficients)LinearOptimizationEngineAgrega variables por lotes al modelo.
setMaximization()LinearOptimizationEngineEstablece la dirección de optimización para maximizar la función objetivo lineal.
setMinimization()LinearOptimizationEngineEstablece la dirección de optimización para minimizar la función objetivo lineal.
setObjectiveCoefficient(variableName, coefficient)LinearOptimizationEngineEstablece el coeficiente de una variable en la función objetivo lineal.
solve()LinearOptimizationSolutionResuelve el programa lineal actual con el plazo predeterminado de 30 segundos.
solve(seconds)LinearOptimizationSolutionResuelve el programa lineal actual.

Documentación detallada

addConstraint(lowerBound, upperBound)

Agrega una nueva restricción lineal al modelo. Los límites superior e inferior de la restricción se definen en el momento de la creación. Los coeficientes de las variables se definen mediante llamadas a LinearOptimizationConstraint.setCoefficient(variableName, coefficient).

const engine = LinearOptimizationService.createEngine();

// Create a linear constraint with the bounds 0 and 10
const 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

NombreTipoDescripción
lowerBoundNumberlímite inferior de la restricción
upperBoundNumberlímite superior de la restricción

Volver

LinearOptimizationConstraint: Es la restricción creada.


addConstraints(lowerBounds, upperBounds, variableNames, coefficients)

Agrega restricciones por lotes al modelo.

const 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

NombreTipoDescripción
lowerBoundsNumber[]límites inferiores de las restricciones
upperBoundsNumber[]límites superiores de las restricciones
variableNamesString[][]los nombres de las variables para las que se establecen los coeficientes
coefficientsNumber[][]coeficientes que se establecen

Volver

LinearOptimizationEngine: Un motor de optimización lineal


addVariable(name, lowerBound, upperBound)

Agrega una nueva variable continua al modelo. Se hace referencia a la variable por su nombre. El tipo se establece en VariableType.CONTINUOUS.

const engine = LinearOptimizationService.createEngine();
const 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

NombreTipoDescripción
nameStringnombre único de la variable
lowerBoundNumberlímite inferior de la variable
upperBoundNumberlímite superior de la variable

Volver

LinearOptimizationEngine: Un motor de optimización lineal


addVariable(name, lowerBound, upperBound, type)

Agrega una variable nueva al modelo. Se hace referencia a la variable por su nombre.

const engine = LinearOptimizationService.createEngine();
const 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

NombreTipoDescripción
nameStringnombre único de la variable
lowerBoundNumberlímite inferior de la variable
upperBoundNumberlímite superior de la variable
typeVariableTypeEs el tipo de la variable, puede ser uno de VariableType.

Volver

LinearOptimizationEngine: Un motor de optimización lineal


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

Agrega una variable nueva al modelo. Se hace referencia a la variable por su nombre.

const engine = LinearOptimizationService.createEngine();
const 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

NombreTipoDescripción
nameStringnombre único de la variable
lowerBoundNumberlímite inferior de la variable
upperBoundNumberlímite superior de la variable
typeVariableTypeEs el tipo de la variable, puede ser uno de VariableType.
objectiveCoefficientNumbercoeficiente objetivo de la variable

Volver

LinearOptimizationEngine: Un motor de optimización lineal


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

Agrega variables por lotes al modelo. Se hace referencia a las variables por sus nombres.

const 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

NombreTipoDescripción
namesString[]nombres únicos de las variables
lowerBoundsNumber[]límites inferiores de las variables
upperBoundsNumber[]límites superiores de las variables
typesVariableType[]tipos de las variables, puede ser uno de VariableType
objectiveCoefficientsNumber[]coeficientes objetivos de las variables

Volver

LinearOptimizationEngine: Un motor de optimización lineal


setMaximization()

Establece la dirección de optimización para maximizar la función objetivo lineal.

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

Volver

LinearOptimizationEngine: Un motor de optimización lineal


setMinimization()

Establece la dirección de optimización para minimizar la función objetivo lineal.

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

Volver

LinearOptimizationEngine: Un motor de optimización lineal


setObjectiveCoefficient(variableName, coefficient)

Establece el coeficiente de una variable en la función objetivo lineal.

const 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

NombreTipoDescripción
variableNameStringnombre de la variable para la que se establece el coeficiente
coefficientNumbercoeficiente de la variable en la función objetivo

Volver

LinearOptimizationEngine: Un motor de optimización lineal


solve()

Resuelve el programa lineal actual con el plazo predeterminado de 30 segundos. Muestra la solución encontrada.

const engine = LinearOptimizationService.createEngine();

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

// ...

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

Volver

LinearOptimizationSolution: Es la solución de la optimización.


solve(seconds)

Resuelve el programa lineal actual. Muestra la solución encontrada y si es óptima.

const engine = LinearOptimizationService.createEngine();

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

// ...

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

Parámetros

NombreTipoDescripción
secondsNumberEs la fecha límite para resolver el problema, en segundos. El plazo máximo es de 300 segundos.

Volver

LinearOptimizationSolution: Es la solución de la optimización.