Class LinearOptimizationEngine

LinearOptimizationEngine

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

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éthodes

MéthodeType renvoyéBrève description
addConstraint(lowerBound, upperBound)LinearOptimizationConstraintAjoute une nouvelle contrainte linéaire dans le 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 par lot au modèle.
setMaximization()LinearOptimizationEngineDéfinit la direction de l'optimisation de façon à maximiser la fonction d'objectif linéaire.
setMinimization()LinearOptimizationEngineDéfinit la direction de l'optimisation de façon à minimiser la fonction d'objectif linéaire.
setObjectiveCoefficient(variableName, coefficient)LinearOptimizationEngineDéfinit le coefficient d'une variable dans la fonction d'objectif linéaire.
solve()LinearOptimizationSolutionRésoudre le programme linéaire actuel avec le délai par défaut de 30 secondes
solve(seconds)LinearOptimizationSolutionRésoudre le programme linéaire actuel

Documentation détaillée

addConstraint(lowerBound, upperBound)

Ajoute une nouvelle contrainte linéaire dans le 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).

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

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.

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

Paramètres

NomTypeDescription
lowerBoundsNumber[]la limite inférieure des contraintes
upperBoundsNumber[]les limites supérieures des contraintes
variableNamesString[][]Les noms des variables pour lesquelles les coefficients sont définis
coefficientsNumber[][]coefficients en cours de définition

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.

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

Paramètres

NomTypeDescription
nameStringnom unique de la variable
lowerBoundNumberlimite inférieure de la variable
upperBoundNumberde la limite 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.

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

Paramètres

NomTypeDescription
nameStringnom unique de la variable
lowerBoundNumberlimite inférieure de la variable
upperBoundNumberde la limite supérieure de la variable
typeVariableTypetype de la variable, peut être l'un des 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.

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.

Paramètres

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

Renvois

LinearOptimizationEngine : moteur d'optimisation linéaire


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

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

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

Paramètres

NomTypeDescription
namesString[]des noms uniques des variables
lowerBoundsNumber[]de la limite inférieure des variables
upperBoundsNumber[]de la limite supérieure des variables
typesVariableType[]types de variables, peut être l'une des valeurs suivantes : VariableType
objectiveCoefficientsNumber[]coefficients objectifs des variables

Renvois

LinearOptimizationEngine : moteur d'optimisation linéaire


setMaximization()

Définit la direction de l'optimisation de façon à maximiser la fonction d'objectif linéaire.

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

Renvois

LinearOptimizationEngine : moteur d'optimisation linéaire


setMinimization()

Définit la direction de l'optimisation de façon à minimiser la fonction d'objectif linéaire.

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

Renvois

LinearOptimizationEngine : moteur d'optimisation linéaire


setObjectiveCoefficient(variableName, coefficient)

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

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

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ésoudre le programme linéaire actuel avec le délai par défaut de 30 secondes Affiche la solution trouvée.

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

Renvois

LinearOptimizationSolution : solution de l'optimisation


solve(seconds)

Résoudre le programme linéaire actuel Renvoie la solution trouvée et indique s'il s'agit d'une solution optimale.

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

Paramètres

NomTypeDescription
secondsNumberle délai pour résoudre le problème, en secondes ; le délai maximal est de 300 secondes

Renvois

LinearOptimizationSolution : solution de l'optimisation