Class LinearOptimizationEngine

LinearOptimizationEngine

Die Engine, die zum Modellieren und Lösen eines linearen Programms verwendet wird. Im folgenden Beispiel wird das folgende lineare Programm gelöst:

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

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')}`);
}

Methoden

MethodeRückgabetypKurzbeschreibung
addConstraint(lowerBound, upperBound)LinearOptimizationConstraintFügt dem Modell eine neue lineare Einschränkung hinzu.
addConstraints(lowerBounds, upperBounds, variableNames, coefficients)LinearOptimizationEngineFügt dem Modell Einschränkungen im Batch hinzu.
addVariable(name, lowerBound, upperBound)LinearOptimizationEngineFügt dem Modell eine neue kontinuierliche Variable hinzu.
addVariable(name, lowerBound, upperBound, type)LinearOptimizationEngineFügt dem Modell eine neue Variable hinzu.
addVariable(name, lowerBound, upperBound, type, objectiveCoefficient)LinearOptimizationEngineFügt dem Modell eine neue Variable hinzu.
addVariables(names, lowerBounds, upperBounds, types, objectiveCoefficients)LinearOptimizationEngineFügt dem Modell Variablen im Batch hinzu.
setMaximization()LinearOptimizationEngineLegt die Optimierungsrichtung auf die Maximierung der linearen Zielfunktion fest.
setMinimization()LinearOptimizationEngineLegt die Optimierungsrichtung auf die Minimierung der linearen Zielfunktion fest.
setObjectiveCoefficient(variableName, coefficient)LinearOptimizationEngineLegt den Koeffizienten einer Variablen in der linearen Zielfunktion fest.
solve()LinearOptimizationSolutionLöst das aktuelle lineare Programm mit dem Standardzeitlimit von 30 Sekunden.
solve(seconds)LinearOptimizationSolutionLöst das aktuelle lineare Programm.

Detaillierte Dokumentation

addConstraint(lowerBound, upperBound)

Fügt dem Modell eine neue lineare Einschränkung hinzu. Die Ober- und Untergrenze der Einschränkung werden bei der Erstellung definiert. Koeffizienten für die Variablen werden über Aufrufe von LinearOptimizationConstraint.setCoefficient(variableName, coefficient) definiert.

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);

Parameter

NameTypBeschreibung
lowerBoundNumberUntergrenze der Einschränkung
upperBoundNumberObergrenze der Einschränkung

Rückflug

LinearOptimizationConstraint – die erstellte Einschränkung


addConstraints(lowerBounds, upperBounds, variableNames, coefficients)

Fügt dem Modell Einschränkungen im Batch hinzu.

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],
    ],
);

Parameter

NameTypBeschreibung
lowerBoundsNumber[]Untergrenzen der Einschränkungen
upperBoundsNumber[]Obergrenzen der Einschränkungen
variableNamesString[][]die Namen der Variablen, für die die Koeffizienten festgelegt werden
coefficientsNumber[][]Koeffizienten werden festgelegt

Rückflug

LinearOptimizationEngine – ein lineares Optimierungsmodul


addVariable(name, lowerBound, upperBound)

Fügt dem Modell eine neue kontinuierliche Variable hinzu. Die Variable wird über ihren Namen referenziert. Der Typ ist auf VariableType.CONTINUOUS festgelegt.

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);

Parameter

NameTypBeschreibung
nameStringEindeutiger Name der Variablen
lowerBoundNumberUntergrenze der Variablen
upperBoundNumberObergrenze der Variablen

Rückflug

LinearOptimizationEngine – ein lineares Optimierungsmodul


addVariable(name, lowerBound, upperBound, type)

Fügt dem Modell eine neue Variable hinzu. Die Variable wird über ihren Namen referenziert.

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,
);

Parameter

NameTypBeschreibung
nameStringEindeutiger Name der Variablen
lowerBoundNumberUntergrenze der Variablen
upperBoundNumberObergrenze der Variablen
typeVariableTypeTyp der Variablen, kann einer der folgenden Werte sein: VariableType

Rückflug

LinearOptimizationEngine – ein lineares Optimierungsmodul


addVariable(name, lowerBound, upperBound, type, objectiveCoefficient)

Fügt dem Modell eine neue Variable hinzu. Die Variable wird über ihren Namen referenziert.

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.

Parameter

NameTypBeschreibung
nameStringEindeutiger Name der Variablen
lowerBoundNumberUntergrenze der Variablen
upperBoundNumberObergrenze der Variablen
typeVariableTypeTyp der Variablen, kann einer der folgenden Werte sein: VariableType
objectiveCoefficientNumberZielkoeffizient der Variablen

Rückflug

LinearOptimizationEngine – ein lineares Optimierungsmodul


addVariables(names, lowerBounds, upperBounds, types, objectiveCoefficients)

Fügt dem Modell Variablen im Batch hinzu. Auf die Variablen wird mit ihren Namen verwiesen.

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,
    ],
);

Parameter

NameTypBeschreibung
namesString[]eindeutige Namen der Variablen
lowerBoundsNumber[]Untergrenzen der Variablen
upperBoundsNumber[]Obergrenzen der Variablen
typesVariableType[]Variablentypen, kann einer der folgenden Werte sein: VariableType
objectiveCoefficientsNumber[]Zielkoeffizienten der Variablen

Rückflug

LinearOptimizationEngine – ein lineares Optimierungsmodul


setMaximization()

Legt die Optimierungsrichtung auf die Maximierung der linearen Zielfunktion fest.

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();

Rückflug

LinearOptimizationEngine – ein lineares Optimierungsmodul


setMinimization()

Legt die Optimierungsrichtung auf die Minimierung der linearen Zielfunktion fest.

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();

Rückflug

LinearOptimizationEngine – ein lineares Optimierungsmodul


setObjectiveCoefficient(variableName, coefficient)

Legt den Koeffizienten einer Variablen in der linearen Zielfunktion fest.

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);

Parameter

NameTypBeschreibung
variableNameStringName der Variable, für die der Koeffizient festgelegt wird
coefficientNumberKoeffizient der Variablen in der Zielfunktion

Rückflug

LinearOptimizationEngine – ein lineares Optimierungsmodul


solve()

Löst das aktuelle lineare Programm mit dem Standardzeitlimit von 30 Sekunden. Gibt die gefundene Lösung zurück.

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')}`);

Rückflug

LinearOptimizationSolution – Lösung der Optimierung


solve(seconds)

Löst das aktuelle lineare Programm. Gibt die gefundene Lösung und an, ob es sich um eine optimale Lösung handelt.

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')}`);

Parameter

NameTypBeschreibung
secondsNumberFrist für die Lösung des Problems in Sekunden. Die maximale Frist beträgt 300 Sekunden.

Rückflug

LinearOptimizationSolution – Lösung der Optimierung