Class LinearOptimizationEngine

LinearOptimizationEngine

Mechanizm służący do modelowania i rozwiązywania programu liniowego. Przykład poniżej rozwiązuje następujący problem:

2 zmienne, x i y:
0 ≤ x ≤ 10
0 ≤ y ≤ 5

Ograniczenia:
0 ≤ 2 * x + 5 * y ≤ 10
0 ≤ 10 * x + 3 * y ≤ 20

Cel:
Maksymalizacja skuteczności (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'));
}

Metody

MetodaZwracany typKrótki opis
addConstraint(lowerBound, upperBound)LinearOptimizationConstraintDodaje w modelu nowe ograniczenie liniowe.
addConstraints(lowerBounds, upperBounds, variableNames, coefficients)LinearOptimizationEngineZbiorcze dodawanie ograniczeń do modelu.
addVariable(name, lowerBound, upperBound)LinearOptimizationEngineDodaje do modelu nową zmienną ciągłą.
addVariable(name, lowerBound, upperBound, type)LinearOptimizationEngineDodaje do modelu nową zmienną.
addVariable(name, lowerBound, upperBound, type, objectiveCoefficient)LinearOptimizationEngineDodaje do modelu nową zmienną.
addVariables(names, lowerBounds, upperBounds, types, objectiveCoefficients)LinearOptimizationEngineZbiorcze dodawanie zmiennych do modelu.
setMaximization()LinearOptimizationEngineOkreśla kierunek optymalizacji pod kątem maksymalizacji funkcji celu liniowego.
setMinimization()LinearOptimizationEngineOkreśla kierunek optymalizacji, aby zminimalizować funkcję celu liniowego.
setObjectiveCoefficient(variableName, coefficient)LinearOptimizationEngineUstawia współczynnik zmiennej w funkcji celu liniowego.
solve()LinearOptimizationSolutionZastępuje bieżący program liniowy z domyślnym terminem wynoszącym 30 sekund.
solve(seconds)LinearOptimizationSolutionRozwiąż problem z bieżącym programem liniowym.

Szczegółowa dokumentacja

addConstraint(lowerBound, upperBound)

Dodaje w modelu nowe ograniczenie liniowe. Górną i dolną granicę ograniczenia określasz podczas tworzenia. Współczynniki zmiennych są definiowane za pomocą wywołań funkcji 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);

Parametry

NazwaTypOpis
lowerBoundNumberdolna granica ograniczenia
upperBoundNumbergórna granica ograniczenia

Powroty

LinearOptimizationConstraint – utworzono ograniczenie;


addConstraints(lowerBounds, upperBounds, variableNames, coefficients)

Zbiorcze dodawanie ograniczeń do modelu.

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

Parametry

NazwaTypOpis
lowerBoundsNumber[]dolne granice ograniczeń
upperBoundsNumber[]górne granice ograniczeń
variableNamesString[][]nazwy zmiennych, dla których ustawiane są współczynniki
coefficientsNumber[][]ustawiane współczynniki

Powroty

LinearOptimizationEngine – liniowy mechanizm optymalizacji,


addVariable(name, lowerBound, upperBound)

Dodaje do modelu nową zmienną ciągłą. Do zmiennej odwołuje się jej nazwa. Typ jest ustawiony na 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);

Parametry

NazwaTypOpis
nameStringunikalna nazwa zmiennej
lowerBoundNumberdolna granica zmiennej
upperBoundNumbergórna granica zmiennej

Powroty

LinearOptimizationEngine – liniowy mechanizm optymalizacji,


addVariable(name, lowerBound, upperBound, type)

Dodaje do modelu nową zmienną. Do zmiennej odwołuje się jej nazwa.

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

Parametry

NazwaTypOpis
nameStringunikalna nazwa zmiennej
lowerBoundNumberdolna granica zmiennej
upperBoundNumbergórna granica zmiennej
typeVariableTypemoże być jednym z typów zmiennej: VariableType

Powroty

LinearOptimizationEngine – liniowy mechanizm optymalizacji,


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

Dodaje do modelu nową zmienną. Do zmiennej odwołuje się jej nazwa.

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.

Parametry

NazwaTypOpis
nameStringunikalna nazwa zmiennej
lowerBoundNumberdolna granica zmiennej
upperBoundNumbergórna granica zmiennej
typeVariableTypemoże być jednym z typów zmiennej: VariableType
objectiveCoefficientNumberobiektywny współczynnik zmiennej

Powroty

LinearOptimizationEngine – liniowy mechanizm optymalizacji,


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

Zbiorcze dodawanie zmiennych do modelu. Do zmiennych odwołują się nazwy.

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

Parametry

NazwaTypOpis
namesString[]unikalne nazwy zmiennych
lowerBoundsNumber[]dolne granice zmiennych
upperBoundsNumber[]górne granice zmiennych
typesVariableType[]może być jednym z typów zmiennych: VariableType
objectiveCoefficientsNumber[]obiektywne współczynniki zmiennych

Powroty

LinearOptimizationEngine – liniowy mechanizm optymalizacji,


setMaximization()

Określa kierunek optymalizacji pod kątem maksymalizacji funkcji celu liniowego.

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

Powroty

LinearOptimizationEngine – liniowy mechanizm optymalizacji,


setMinimization()

Określa kierunek optymalizacji, aby zminimalizować funkcję celu liniowego.

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

Powroty

LinearOptimizationEngine – liniowy mechanizm optymalizacji,


setObjectiveCoefficient(variableName, coefficient)

Ustawia współczynnik zmiennej w funkcji celu liniowego.

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

Parametry

NazwaTypOpis
variableNameStringnazwa zmiennej, dla której ustawiany jest współczynnik
coefficientNumberwspółczynnik zmiennej w funkcji celu

Powroty

LinearOptimizationEngine – liniowy mechanizm optymalizacji,


solve()

Zastępuje bieżący program liniowy z domyślnym terminem wynoszącym 30 sekund. Zwraca znalezione rozwiązanie.

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

Powroty

LinearOptimizationSolution – rozwiązanie optymalizacji


solve(seconds)

Rozwiąż problem z bieżącym programem liniowym. Zwraca znalezione rozwiązanie i jeśli jest optymalne.

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

Parametry

NazwaTypOpis
secondsNumbertermin rozwiązania problemu (w sekundach); maksymalny termin to 300 sekund

Powroty

LinearOptimizationSolution – rozwiązanie optymalizacji