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
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
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 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
Nom | Type | Description |
---|---|---|
lowerBounds | Number[] | les limites inférieures 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 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
Nom | Type | Description |
---|---|---|
name | String | nom unique de la variable |
lowerBound | Number | limite inférieure de la variable |
upperBound | Number | 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 | 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 | 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 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
Nom | Type | Description |
---|---|---|
names | String[] | des noms uniques des variables |
lowerBounds | Number[] | les limites inférieures des variables |
upperBounds | Number[] | les limites supérieures des variables |
types | VariableType[] | des variables, peut être l'un des types suivants : VariableType |
objectiveCoefficients | Number[] | 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
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 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
Nom | Type | Description |
---|---|---|
seconds | Number | le délai de résolution du problème, en secondes ; le délai maximal est de 300 secondes |
Renvois
LinearOptimizationSolution
: solution de l'optimisation