Class LinearOptimizationEngine

ЛинейнаяОптимизацияДвигатель

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

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

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

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

Методы

Метод Тип возврата Краткое описание
addConstraint(lowerBound, upperBound) LinearOptimizationConstraint Добавляет новое линейное ограничение в модель.
addConstraints(lowerBounds, upperBounds, variableNames, coefficients) LinearOptimizationEngine Пакетно добавляет ограничения в модель.
addVariable(name, lowerBound, upperBound) LinearOptimizationEngine Добавляет в модель новую непрерывную переменную.
addVariable(name, lowerBound, upperBound, type) LinearOptimizationEngine Добавляет новую переменную в модель.
addVariable(name, lowerBound, upperBound, type, objectiveCoefficient) LinearOptimizationEngine Добавляет новую переменную в модель.
addVariables(names, lowerBounds, upperBounds, types, objectiveCoefficients) LinearOptimizationEngine Пакетно добавляет переменные в модель.
setMaximization() LinearOptimizationEngine Устанавливает направление оптимизации на максимизацию линейной целевой функции.
setMinimization() LinearOptimizationEngine Устанавливает направление оптимизации на минимизацию линейной целевой функции.
setObjectiveCoefficient(variableName, coefficient) LinearOptimizationEngine Устанавливает коэффициент переменной в линейной целевой функции.
solve() LinearOptimizationSolution Решает текущую линейную программу со сроком выполнения по умолчанию 30 секунд.
solve(seconds) LinearOptimizationSolution Решает текущую линейную программу.

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

addConstraint(lowerBound, upperBound)

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

Параметры

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

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

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


addConstraints(lowerBounds, upperBounds, variableNames, coefficients)

Пакетно добавляет ограничения в модель.

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

Параметры

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

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

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


addVariable(name, lowerBound, upperBound)

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

Параметры

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

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

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


addVariable(name, lowerBound, upperBound, type)

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

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

Параметры

Имя Тип Описание
name String уникальное имя переменной
lowerBound Number нижняя граница переменной
upperBound Number верхняя граница переменной
type VariableType тип переменной, может быть одним из VariableType

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

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


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

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

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.

Параметры

Имя Тип Описание
name String уникальное имя переменной
lowerBound Number нижняя граница переменной
upperBound Number верхняя граница переменной
type VariableType тип переменной, может быть одним из VariableType
objectiveCoefficient Number объективный коэффициент переменной

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

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


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

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

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

Параметры

Имя Тип Описание
names String[] уникальные имена переменных
lowerBounds Number[] нижние границы переменных
upperBounds Number[] верхние границы переменных
types VariableType[] типы переменных, может быть одним из VariableType
objectiveCoefficients Number[] объективные коэффициенты переменных

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

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


setMaximization()

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

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

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

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


setMinimization()

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

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

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

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


setObjectiveCoefficient(variableName, coefficient)

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

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

Параметры

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

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

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


solve()

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

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

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

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


solve(seconds)

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

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

Параметры

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

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

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