Class LinearOptimizationEngine

LinearOptimizationEngine

선형 프로그램을 모델링하고 해결하는 데 사용되는 엔진입니다. 아래 예는 다음 선형 프로그램을 해결합니다.

두 개의 변수, xy:
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);

매개변수

이름유형설명
lowerBoundNumber제약 조건의 하한
upperBoundNumber제약조건의 상한값

리턴

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

매개변수

이름유형설명
lowerBoundsNumber[]제약 조건의 하한
upperBoundsNumber[]제약 조건의 상한
variableNamesString[][]계수를 설정하는 변수의 이름
coefficientsNumber[][]설정 중인 계수

리턴

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

매개변수

이름유형설명
nameString변수의 고유한 이름
lowerBoundNumber변수의 하한값
upperBoundNumber변수의 상한값

리턴

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

매개변수

이름유형설명
nameString변수의 고유한 이름
lowerBoundNumber변수의 하한값
upperBoundNumber변수의 상한값
typeVariableType변수의 유형이며 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.

매개변수

이름유형설명
nameString변수의 고유한 이름
lowerBoundNumber변수의 하한값
upperBoundNumber변수의 상한값
typeVariableType변수의 유형이며 VariableType 중 하나일 수 있습니다.
objectiveCoefficientNumber변수의 목표 계수

리턴

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

매개변수

이름유형설명
namesString[]변수의 고유한 이름
lowerBoundsNumber[]변수의 하한
upperBoundsNumber[]변수의 상한선
typesVariableType[]변수 유형으로, VariableType 중 하나일 수 있습니다.
objectiveCoefficientsNumber[]변수의 목표 계수

리턴

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

매개변수

이름유형설명
variableNameString계수를 설정하는 변수의 이름
coefficientNumber목표 함수에서 변수의 계수

리턴

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

매개변수

이름유형설명
secondsNumber문제 풀이 기한(초), 최대 기한은 300초

리턴

LinearOptimizationSolution: 최적화 솔루션