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 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 à Linear
.
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
Linear
: 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[][] | coefficients définis |
Renvois
Linear
: 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 Variable
.
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
Linear
: 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'un des éléments suivants : Variable |
Renvois
Linear
: 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'un des éléments suivants : Variable |
objective | Number | coefficient objectif de la variable |
Renvois
Linear
: 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
Nom | Type | Description |
---|---|---|
names | String[] | les 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 éléments suivants : Variable |
objective | Number[] | coefficients objectifs des variables |
Renvois
Linear
: 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
Linear
: 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
Linear
: 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
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
Linear
: 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
Linear
: 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
Nom | Type | Description |
---|---|---|
seconds | Number | Délai de résolution du problème, en secondes. Le délai maximal est de 300 secondes. |
Renvois
Linear
: solution de l'optimisation