Class LinearOptimizationEngine

LinearOptimizationEngine

Moteur utilisé pour modéliser et résoudre un programme linéaire. L'exemple ci-dessous résout les problèmes suivants : programme linéaire:

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 contrainte linéaire au modèle.
addConstraints(lowerBounds, upperBounds, variableNames, coefficients)LinearOptimizationEngineAjoute des contraintes au modèle par lot.
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 au modèle par lot.
setMaximization()LinearOptimizationEngineDéfinit le sens d'optimisation de façon à maximiser la fonction d'objectif linéaire.
setMinimization()LinearOptimizationEngineDéfinit le sens d'optimisation de façon à minimiser la fonction d'objectif linéaire.
setObjectiveCoefficient(variableName, coefficient)LinearOptimizationEngineDéfinit le coefficient d'une variable dans la fonction objectif linéaire.
solve()LinearOptimizationSolutionRésoudre le programme linéaire en cours 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 contrainte linéaire au modèle. Les limites supérieure et inférieure de la contrainte sont défini 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 au modèle par lot.

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[]les limites inférieures des contraintes
upperBoundsNumber[]les 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.

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

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
upperBoundNumberlimite 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
upperBoundNumberlimite 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 au modèle par lot. 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[]les limites inférieures des variables
upperBoundsNumber[]les limites supérieures des variables
typesVariableType[]des variables, peut être l'un des types suivants : VariableType
objectiveCoefficientsNumber[]coefficients objectifs des variables

Renvois

LinearOptimizationEngine : moteur d'optimisation linéaire


setMaximization()

Définit le sens d'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 le sens d'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 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 en cours 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. Affiche la solution trouvée. et s'il s'agit d'une solution.

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 de résolution du problème, en secondes ; le délai maximal est de 300 secondes

Renvois

LinearOptimizationSolution : solution de l'optimisation