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
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éfinies au moment de la création. Les coefficients des variables sont définis par 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
| Nom | Type | Description |
|---|---|---|
lower | Number | limite inférieure de la contrainte |
upper | 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.
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
| Nom | Type | Description |
|---|---|---|
lower | Number[] | limites inférieures des contraintes |
upper | Number[] | limites supérieures des contraintes |
variable | String[][] | les noms des variables pour lesquelles les coefficients sont définis. |
coefficients | Number[][] | les coefficients sont définis. |
Renvois
LinearOptimizationEngine : un 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
| Nom | Type | Description |
|---|---|---|
name | String | Nom unique de la variable |
lower | Number | limite inférieure de la variable |
upper | Number | limite supérieure de la variable |
Renvois
LinearOptimizationEngine : un 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
| Nom | Type | Description |
|---|---|---|
name | String | Nom unique de la variable |
lower | Number | limite inférieure de la variable |
upper | Number | limite supérieure de la variable |
type | Variable | type de la variable (peut être l'une des valeurs Variable) |
Renvois
LinearOptimizationEngine : un 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
| Nom | Type | Description |
|---|---|---|
name | String | Nom unique de la variable |
lower | Number | limite inférieure de la variable |
upper | Number | limite supérieure de la variable |
type | Variable | type de la variable (peut être l'une des valeurs Variable) |
objective | Number | coefficient objectif de la variable |
Renvois
LinearOptimizationEngine : un 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.
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
| Nom | Type | Description |
|---|---|---|
names | String[] | noms uniques des variables |
lower | Number[] | limites inférieures des variables |
upper | Number[] | limites supérieures des variables |
types | Variable | types des variables, peut être l'un des Variable |
objective | Number[] | coefficients objectifs des variables ; |
Renvois
LinearOptimizationEngine : un 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 : un 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 : un moteur d'optimisation linéaire
setObjectiveCoefficient(variableName, coefficient)
Définit le coefficient d'une variable dans 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);
Paramètres
| Nom | Type | Description |
|---|---|---|
variable | String | Nom de la variable pour laquelle le coefficient est défini |
coefficient | Number | coefficient de la variable dans la fonction objectif |
Renvois
LinearOptimizationEngine : un moteur d'optimisation linéaire
solve()
Résout le programme linéaire actuel 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 indique si elle est 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
| Nom | Type | Description |
|---|---|---|
seconds | Number | Délai de résolution du problème, en secondes. Le délai maximal est de 300 secondes. |
Renvois
LinearOptimizationSolution : solution de l'optimisation