Class LinearOptimizationEngine

Moteurd'optimisationlinéaire

Moteur utilisé pour modéliser et résoudre un programme linéaire. L'exemple ci-dessous résout le programme linéaire suivant:

Deux variables, x et y:
0 ≤ x ≤ 10
0 ≤ y ≤ 5

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

Objectif:
Maximiser 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éthodes

MéthodeType renvoyéBrève description
addConstraint(lowerBound, upperBound)LinearOptimizationConstraintAjoute une nouvelle contrainte linéaire au modèle.
addConstraints(lowerBounds, upperBounds, variableNames, coefficients)LinearOptimizationEngineAjoute des contraintes par lot au modèle.
addVariable(name, lowerBound, upperBound)LinearOptimizationEngineAjoute une variable continue au modèle.
addVariable(name, lowerBound, upperBound, type)LinearOptimizationEngineAjoute une variable au modèle.
addVariable(name, lowerBound, upperBound, type, objectiveCoefficient)LinearOptimizationEngineAjoute une variable au modèle.
addVariables(names, lowerBounds, upperBounds, types, objectiveCoefficients)LinearOptimizationEngineAjoute des variables groupées au modèle.
setMaximization()LinearOptimizationEngineDéfinit la direction d'optimisation pour maximiser la fonction objectif linéaire.
setMinimization()LinearOptimizationEngineDéfinit la direction d'optimisation sur la minimisation de la fonction objectif linéaire.
setObjectiveCoefficient(variableName, coefficient)LinearOptimizationEngineDéfinit le coefficient d'une variable dans la fonction d'objectif linéaire.
solve()LinearOptimizationSolutionRésout le programme linéaire en cours avec le délai par défaut de 30 secondes.
solve(seconds)LinearOptimizationSolutionRésout le programme linéaire actuel.

Documentation détaillée

addConstraint(lowerBound, upperBound)

Ajoute une nouvelle contrainte linéaire au modèle. Les limites supérieure et inférieure de la contrainte sont définies au moment de la création. Les coefficients des variables sont définis via des appels à 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);

Paramètres

NomTypeDescription
lowerBoundNumberlimite inférieure de la contrainte
upperBoundNumberlimite supérieure de la contrainte

Renvois

LinearOptimizationConstraint : contrainte créée


addConstraints(lowerBounds, upperBounds, variableNames, coefficients)

Ajoute des contraintes par lot au modèle.

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

Paramètres

NomTypeDescription
lowerBoundsNumber[]limites inférieures des contraintes
upperBoundsNumber[]limites supérieures des contraintes
variableNamesString[][]les noms des variables pour lesquelles les coefficients sont définis ;
coefficientsNumber[][]coefficients définis

Renvois

LinearOptimizationEngine : moteur d'optimisation linéaire


addVariable(name, lowerBound, upperBound)

Ajoute une variable continue au modèle. La variable est référencée par son nom. Le type est défini sur 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);

Paramètres

NomTypeDescription
nameStringnom unique de la variable
lowerBoundNumberlimite inférieure de la variable
upperBoundNumberlimite supérieure de la variable

Renvois

LinearOptimizationEngine : moteur d'optimisation linéaire


addVariable(name, lowerBound, upperBound, type)

Ajoute une variable au modèle. La variable est référencée par son nom.

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

Paramètres

NomTypeDescription
nameStringnom unique de la variable
lowerBoundNumberlimite inférieure de la variable
upperBoundNumberlimite supérieure de la variable
typeVariableTypetype de la variable, peut être l'un des éléments suivants : VariableType

Renvois

LinearOptimizationEngine : moteur d'optimisation linéaire


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

Ajoute une variable au modèle. La variable est référencée par son nom.

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.

Paramètres

NomTypeDescription
nameStringnom unique de la variable
lowerBoundNumberlimite inférieure de la variable
upperBoundNumberlimite supérieure de la variable
typeVariableTypetype de la variable, peut être l'un des éléments suivants : VariableType
objectiveCoefficientNumbercoefficient objectif de la variable

Renvois

LinearOptimizationEngine : moteur d'optimisation linéaire


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

Ajoute des variables groupées au modèle. Les variables sont référencées par leur nom.

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

Paramètres

NomTypeDescription
namesString[]les noms uniques des variables ;
lowerBoundsNumber[]limites inférieures des variables
upperBoundsNumber[]limites supérieures des variables
typesVariableType[]types des variables, peut être l'un des éléments suivants : VariableType
objectiveCoefficientsNumber[]coefficients objectifs des variables

Renvois

LinearOptimizationEngine : moteur d'optimisation linéaire


setMaximization()

Définit la direction d'optimisation pour maximiser la fonction objectif linéaire.

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

Renvois

LinearOptimizationEngine : moteur d'optimisation linéaire


setMinimization()

Définit la direction d'optimisation sur la minimisation de la fonction objectif linéaire.

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

Renvois

LinearOptimizationEngine : moteur d'optimisation linéaire


setObjectiveCoefficient(variableName, coefficient)

Définit le coefficient d'une variable dans la fonction d'objectif linéaire.

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

Paramètres

NomTypeDescription
variableNameStringnom de la variable pour laquelle le coefficient est défini
coefficientNumbercoefficient de la variable dans la fonction objectif

Renvois

LinearOptimizationEngine : moteur d'optimisation linéaire


solve()

Résout le programme linéaire en cours avec le délai par défaut de 30 secondes. Renvoie la solution trouvée.

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

Renvois

LinearOptimizationSolution : solution de l'optimisation


solve(seconds)

Résout le programme linéaire actuel. Renvoie la solution trouvée et si elle s'agit d'une solution optimale.

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

Paramètres

NomTypeDescription
secondsNumberDélai de résolution du problème, en secondes. Le délai maximal est de 300 secondes.

Renvois

LinearOptimizationSolution : solution de l'optimisation