Class 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 Решает текущую линейную программу.

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

add Constraint(lowerBound, upperBound)

Добавляет новое линейное ограничение в модель. Верхняя и нижняя границы ограничения определяются во время создания. Коэффициенты для переменных определяются посредством вызовов Linear Optimization Constraint.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 верхняя граница ограничения

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

Linear Optimization Constraint — созданное ограничение.


add Constraints(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[][] коэффициенты устанавливаются

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

Linear Optimization Engine — механизм линейной оптимизации.


add Variable(name, lowerBound, upperBound)

Добавляет в модель новую непрерывную переменную. На переменную ссылаются по ее имени. Тип установлен как Variable Type.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 верхняя граница переменной

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

Linear Optimization Engine — механизм линейной оптимизации.


add Variable(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

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

Linear Optimization Engine — механизм линейной оптимизации.


add Variable(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 объективный коэффициент переменной

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

Linear Optimization Engine — механизм линейной оптимизации.


add Variables(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[] объективные коэффициенты переменных

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

Linear Optimization Engine — механизм линейной оптимизации.


set Maximization()

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

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

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

Linear Optimization Engine — механизм линейной оптимизации.


set Minimization()

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

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

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

Linear Optimization Engine — механизм линейной оптимизации.


set Objective Coefficient(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 коэффициент переменной в целевой функции

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

Linear Optimization Engine — механизм линейной оптимизации.


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

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

Linear Optimization Solution — решение оптимизации.


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 секунд

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

Linear Optimization Solution — решение оптимизации.