Die Engine, die zum Modellieren und Lösen eines linearen Programms verwendet wird. Das folgende Beispiel löst das folgende lineare Programm:
Zwei Variablen, x
und y
:
0 ≤ x ≤ 10
0 ≤ y ≤ 5
Einschränkungen:
0 ≤ 2 * x + 5 * y ≤ 10
0 ≤ 10 * x + 3 * y ≤ 20
Ziel:
x + y
maximieren
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')); }
Methoden
Detaillierte Dokumentation
addConstraint(lowerBound, upperBound)
Fügt dem Modell eine neue lineare Einschränkung hinzu. Die Ober- und Untergrenze der Einschränkung werden beim Erstellen festgelegt. Die Koeffizienten für die Variablen werden über Aufrufe von LinearOptimizationConstraint.setCoefficient(variableName, coefficient)
definiert.
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);
Parameter
Name | Typ | Beschreibung |
---|---|---|
lowerBound | Number | Untergrenze der Einschränkung |
upperBound | Number | Obergrenze der Einschränkung |
Return
LinearOptimizationConstraint
– Die erstellte Einschränkung
addConstraints(lowerBounds, upperBounds, variableNames, coefficients)
Fügt dem Modell im Batch Einschränkungen hinzu.
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]]);
Parameter
Name | Typ | Beschreibung |
---|---|---|
lowerBounds | Number[] | Untergrenzen der Einschränkungen |
upperBounds | Number[] | Obergrenzen der Einschränkungen |
variableNames | String[][] | die Namen der Variablen, für die die Koeffizienten eingestellt werden |
coefficients | Number[][] | eingestellte Koeffizienten |
Return
LinearOptimizationEngine
– eine Engine zur linearen Optimierung
addVariable(name, lowerBound, upperBound)
Fügt dem Modell eine neue kontinuierliche Variable hinzu. Auf die Variable wird durch ihren Namen verwiesen. Der Typ ist auf VariableType.CONTINUOUS
festgelegt.
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);
Parameter
Name | Typ | Beschreibung |
---|---|---|
name | String | der eindeutige Name der Variablen |
lowerBound | Number | Untergrenze der Variablen |
upperBound | Number | Obergrenze der Variablen |
Return
LinearOptimizationEngine
– eine Engine zur linearen Optimierung
addVariable(name, lowerBound, upperBound, type)
Fügt dem Modell eine neue Variable hinzu. Auf die Variable wird durch ihren Namen verwiesen.
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);
Parameter
Name | Typ | Beschreibung |
---|---|---|
name | String | der eindeutige Name der Variablen |
lowerBound | Number | Untergrenze der Variablen |
upperBound | Number | Obergrenze der Variablen |
type | VariableType | Typ der Variablen; kann einer der folgenden sein: VariableType |
Return
LinearOptimizationEngine
– eine Engine zur linearen Optimierung
addVariable(name, lowerBound, upperBound, type, objectiveCoefficient)
Fügt dem Modell eine neue Variable hinzu. Auf die Variable wird durch ihren Namen verwiesen.
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.
Parameter
Name | Typ | Beschreibung |
---|---|---|
name | String | der eindeutige Name der Variablen |
lowerBound | Number | Untergrenze der Variablen |
upperBound | Number | Obergrenze der Variablen |
type | VariableType | Typ der Variablen; kann einer der folgenden sein: VariableType |
objectiveCoefficient | Number | objektiver Koeffizient der Variablen |
Return
LinearOptimizationEngine
– eine Engine zur linearen Optimierung
addVariables(names, lowerBounds, upperBounds, types, objectiveCoefficients)
Fügt dem Modell Variablen im Batch hinzu. Die Variablen werden mit ihren Namen referenziert.
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]);
Parameter
Name | Typ | Beschreibung |
---|---|---|
names | String[] | eindeutige Namen der Variablen |
lowerBounds | Number[] | Untergrenzen der Variablen |
upperBounds | Number[] | Obergrenzen der Variablen |
types | VariableType[] | Variablentypen; kann einer der folgenden sein: VariableType |
objectiveCoefficients | Number[] | Zielkoeffizienten der Variablen |
Return
LinearOptimizationEngine
– eine Engine zur linearen Optimierung
setMaximization()
Legt die Optimierungsrichtung für die Maximierung der linearen Zielfunktion fest.
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();
Return
LinearOptimizationEngine
– eine Engine zur linearen Optimierung
setMinimization()
Legt die Optimierungsrichtung für die Minimierung der linearen Zielfunktion fest.
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();
Return
LinearOptimizationEngine
– eine Engine zur linearen Optimierung
setObjectiveCoefficient(variableName, coefficient)
Legt den Koeffizienten einer Variablen in der linearen Zielfunktion fest.
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);
Parameter
Name | Typ | Beschreibung |
---|---|---|
variableName | String | Name der Variablen, für die der Koeffizient eingestellt wird |
coefficient | Number | Koeffizient der Variablen in der Zielfunktion |
Return
LinearOptimizationEngine
– eine Engine zur linearen Optimierung
solve()
Löst das aktuelle lineare Programm mit der Standardfrist von 30 Sekunden. Gibt die gefundene Lösung zurück.
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'));
Return
LinearOptimizationSolution
– Lösung der Optimierung
solve(seconds)
Löst das aktuelle lineare Programm. Gibt die gefundene Lösung zurück und ob es sich um eine optimale Lösung handelt.
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'));
Parameter
Name | Typ | Beschreibung |
---|---|---|
seconds | Number | Frist zur Lösung des Problems in Sekunden; die maximale Frist beträgt 300 Sekunden. |
Return
LinearOptimizationSolution
– Lösung der Optimierung