Class LinearOptimizationEngine

LinearOptimizationEngine

Программа, используемая для моделирования и решения задач линейного программирования. В приведенном ниже примере решается следующая задача линейного программирования:

Две переменные, x и y :
0 ≤ x ≤ 10
0 ≤ y ≤ 5

Ограничения:
0 ≤ 2 * x + 5 * y ≤ 10
0 ≤ 10 * x + 3 * y ≤ 20

Цель:
Максимизировать 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')}`);
}

Методы

Метод Тип возвращаемого значения Краткое описание
add Constraint(lowerBound, upperBound) Linear Optimization Constraint Добавляет новое линейное ограничение в модель.
add Constraints(lowerBounds, upperBounds, variableNames, coefficients) Linear Optimization Engine Добавляет ограничения к модели в пакетном режиме.
add Variable(name, lowerBound, upperBound) Linear Optimization Engine Добавляет в модель новую непрерывную переменную.
add Variable(name, lowerBound, upperBound, type) Linear Optimization Engine Добавляет новую переменную в модель.
add Variable(name, lowerBound, upperBound, type, objectiveCoefficient) Linear Optimization Engine Добавляет новую переменную в модель.
add Variables(names, lowerBounds, upperBounds, types, objectiveCoefficients) Linear Optimization Engine Добавляет переменные в модель пакетом.
set Maximization() Linear Optimization Engine Задает направление оптимизации для максимизации линейной целевой функции.
set Minimization() Linear Optimization Engine Задает направление оптимизации на минимизацию линейной целевой функции.
set Objective Coefficient(variableName, coefficient) Linear Optimization Engine Задает коэффициент переменной в линейной целевой функции.
solve() Linear Optimization Solution Решает текущую задачу линейного программирования с заданным по умолчанию временем выполнения 30 секунд.
solve(seconds) Linear Optimization Solution Решает текущую задачу линейного программирования.

Подробная документация

addConstraint(lowerBound, upperBound)

Добавляет новое линейное ограничение в модель. Верхняя и нижняя границы ограничения определяются во время создания. Коэффициенты для переменных определяются с помощью вызовов метода LinearOptimizationConstraint.setCoefficient(variableName, coefficient) .

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

Параметры

Имя Тип Описание
lower Bound Number нижняя граница ограничения
upper Bound Number верхняя граница ограничения

Возвращаться

LinearOptimizationConstraint — созданное ограничение


addConstraints(lowerBounds, upperBounds, variableNames, coefficients)

Добавляет ограничения к модели в пакетном режиме.

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

Параметры

Имя Тип Описание
lower Bounds Number[] нижние границы ограничений
upper Bounds Number[] верхние границы ограничений
variable Names String[][] названия переменных, для которых устанавливаются коэффициенты
coefficients Number[][] устанавливаются коэффициенты

Возвращаться

LinearOptimizationEngine — механизм линейной оптимизации


addVariable(name, lowerBound, upperBound)

Добавляет в модель новую непрерывную переменную. Переменная указывается по своему имени. Тип задается как VariableType.CONTINUOUS .

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

Параметры

Имя Тип Описание
name String уникальное имя переменной
lower Bound Number нижняя граница переменной
upper Bound Number верхняя граница переменной

Возвращаться

LinearOptimizationEngine — механизм линейной оптимизации


addVariable(name, lowerBound, upperBound, type)

Добавляет новую переменную в модель. Переменная указывается по своему имени.

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

Параметры

Имя Тип Описание
name String уникальное имя переменной
lower Bound Number нижняя граница переменной
upper Bound Number верхняя граница переменной
type Variable Type Тип переменной может быть одним из Variable Type .

Возвращаться

LinearOptimizationEngine — механизм линейной оптимизации


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

Добавляет новую переменную в модель. Переменная указывается по своему имени.

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.

Параметры

Имя Тип Описание
name String уникальное имя переменной
lower Bound Number нижняя граница переменной
upper Bound Number верхняя граница переменной
type Variable Type Тип переменной может быть одним из Variable Type .
objective Coefficient Number объективный коэффициент переменной

Возвращаться

LinearOptimizationEngine — механизм линейной оптимизации


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

Добавляет переменные в модель пакетом. Переменные указываются по своим именам.

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

Параметры

Имя Тип Описание
names String[] уникальные имена переменных
lower Bounds Number[] нижние границы переменных
upper Bounds Number[] верхние границы переменных
types Variable Type[] Типы переменных могут быть одним из Variable Type .
objective Coefficients Number[] объективные коэффициенты переменных

Возвращаться

LinearOptimizationEngine — механизм линейной оптимизации


setMaximization()

Задает направление оптимизации для максимизации линейной целевой функции.

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

Возвращаться

LinearOptimizationEngine — механизм линейной оптимизации


setMinimization()

Задает направление оптимизации на минимизацию линейной целевой функции.

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

Возвращаться

LinearOptimizationEngine — механизм линейной оптимизации


setObjectiveCoefficient(variableName, coefficient)

Задает коэффициент переменной в линейной целевой функции.

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

Параметры

Имя Тип Описание
variable Name String название переменной, для которой устанавливается коэффициент
coefficient Number коэффициент переменной в целевой функции

Возвращаться

LinearOptimizationEngine — механизм линейной оптимизации


solve()

Решает текущую задачу линейного программирования с заданным по умолчанию временем выполнения 30 секунд. Возвращает найденное решение.

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

Возвращаться

LinearOptimizationSolution — решение задачи оптимизации.


solve(seconds)

Решает текущую задачу линейной программы. Возвращает найденное решение и указывает, является ли оно оптимальным.

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

Параметры

Имя Тип Описание
seconds Number Время, необходимое для решения задачи, в секундах; максимальное время — 300 секунд.

Возвращаться

LinearOptimizationSolution — решение задачи оптимизации.