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
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
Nom | Type | Description |
---|---|---|
lowerBound | Number | limite inférieure de la contrainte |
upperBound | Number | limite 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
Nom | Type | Description |
---|---|---|
lowerBounds | Number[] | la limite inférieure des contraintes |
upperBounds | Number[] | les limites supérieures des contraintes |
variableNames | String[][] | Les noms des variables pour lesquelles les coefficients sont définis |
coefficients | Number[][] | 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
Nom | Type | Description |
---|---|---|
name | String | nom unique de la variable |
lowerBound | Number | limite inférieure de la variable |
upperBound | Number | de 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
Nom | Type | Description |
---|---|---|
name | String | nom unique de la variable |
lowerBound | Number | limite inférieure de la variable |
upperBound | Number | de la limite supérieure de la variable |
type | VariableType | type 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
Nom | Type | Description |
---|---|---|
name | String | nom unique de la variable |
lowerBound | Number | limite inférieure de la variable |
upperBound | Number | de la limite supérieure de la variable |
type | VariableType | type de la variable, peut être l'un des suivants : VariableType |
objectiveCoefficient | Number | coefficient 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
Nom | Type | Description |
---|---|---|
names | String[] | des noms uniques des variables |
lowerBounds | Number[] | de la limite inférieure des variables |
upperBounds | Number[] | de la limite supérieure des variables |
types | VariableType[] | types de variables, peut être l'une des valeurs suivantes : VariableType |
objectiveCoefficients | Number[] | 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
Nom | Type | Description |
---|---|---|
variableName | String | nom de la variable pour laquelle le coefficient est défini |
coefficient | Number | coefficient 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
Nom | Type | Description |
---|---|---|
seconds | Number | le délai pour résoudre le problème, en secondes ; le délai maximal est de 300 secondes |
Renvois
LinearOptimizationSolution
: solution de l'optimisation