Class LinearOptimizationEngine

LinearOptimizationEngine

Doğrusal bir programı modellemek ve çözmek için kullanılan motor. Aşağıdaki örnekte şu doğrusal program çözülmektedir:

İki değişken, x ve y:
0 ≤ x ≤ 10
0 ≤ y ≤ 5

Kısıtlamalar:
0 ≤ 2 * x + 5 * y ≤ 10
0 ≤ 10 * x + 3 * y ≤ 20

Hedef:
x + y değerini artırın.

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

Yöntemler

YöntemDönüş türüKısa açıklama
addConstraint(lowerBound, upperBound)LinearOptimizationConstraintModele yeni bir doğrusal kısıtlama ekler.
addConstraints(lowerBounds, upperBounds, variableNames, coefficients)LinearOptimizationEngineModele toplu olarak kısıtlamalar ekler.
addVariable(name, lowerBound, upperBound)LinearOptimizationEngineModele yeni bir sürekli değişken ekler.
addVariable(name, lowerBound, upperBound, type)LinearOptimizationEngineModele yeni bir değişken ekler.
addVariable(name, lowerBound, upperBound, type, objectiveCoefficient)LinearOptimizationEngineModele yeni bir değişken ekler.
addVariables(names, lowerBounds, upperBounds, types, objectiveCoefficients)LinearOptimizationEngineModele toplu olarak değişken ekler.
setMaximization()LinearOptimizationEngineOptimizasyon yönünü doğrusal amaç işlevini en üst düzeye çıkaracak şekilde ayarlar.
setMinimization()LinearOptimizationEngineOptimizasyon yönünü doğrusal amaç işlevini en aza indirme olarak ayarlar.
setObjectiveCoefficient(variableName, coefficient)LinearOptimizationEngineDoğrusal amaç fonksiyonundaki bir değişkenin katsayısını ayarlar.
solve()LinearOptimizationSolutionMevcut doğrusal programı 30 saniyelik varsayılan son tarihle çözer.
solve(seconds)LinearOptimizationSolutionGeçerli doğrusal programı çözer.

Ayrıntılı belgeler

addConstraint(lowerBound, upperBound)

Modele yeni bir doğrusal kısıtlama ekler. Kısıtlamanın üst ve alt sınırı oluşturma sırasında tanımlanır. Değişkenlerin katsayıları, LinearOptimizationConstraint.setCoefficient(variableName, coefficient)'ya yapılan çağrılar aracılığıyla tanımlanır.

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

Parametreler

AdTürAçıklama
lowerBoundNumberkısıtlamanın alt sınırı
upperBoundNumberkısıtlamanın üst sınırı

Return

LinearOptimizationConstraint: Oluşturulan kısıtlama


addConstraints(lowerBounds, upperBounds, variableNames, coefficients)

Modele toplu olarak kısıtlamalar ekler.

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

Parametreler

AdTürAçıklama
lowerBoundsNumber[]kısıtlamaların alt sınırları
upperBoundsNumber[]kısıtlamaların üst sınırları
variableNamesString[][]Katsayıların ayarlandığı değişkenlerin adları
coefficientsNumber[][]ayarlanan katsayılar

Return

LinearOptimizationEngine: Doğrusal optimizasyon motoru


addVariable(name, lowerBound, upperBound)

Modele yeni bir sürekli değişken ekler. Değişken, adıyla referans alınır. Tür VariableType.CONTINUOUS olarak ayarlanmıştır.

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

Parametreler

AdTürAçıklama
nameStringdeğişkenin benzersiz adı
lowerBoundNumberdeğişkenin alt sınırı
upperBoundNumberdeğişkenin üst sınırı

Return

LinearOptimizationEngine: Doğrusal optimizasyon motoru


addVariable(name, lowerBound, upperBound, type)

Modele yeni bir değişken ekler. Değişken, adıyla referans alınır.

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

Parametreler

AdTürAçıklama
nameStringdeğişkenin benzersiz adı
lowerBoundNumberdeğişkenin alt sınırı
upperBoundNumberdeğişkenin üst sınırı
typeVariableTypeDeğişkenin türü, VariableType değerlerinden biri olabilir.

Return

LinearOptimizationEngine: Doğrusal optimizasyon motoru


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

Modele yeni bir değişken ekler. Değişken, adıyla referans alınır.

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.

Parametreler

AdTürAçıklama
nameStringdeğişkenin benzersiz adı
lowerBoundNumberdeğişkenin alt sınırı
upperBoundNumberdeğişkenin üst sınırı
typeVariableTypeDeğişkenin türü, VariableType değerlerinden biri olabilir.
objectiveCoefficientNumberdeğişkenin amaç katsayısı

Return

LinearOptimizationEngine: Doğrusal optimizasyon motoru


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

Modele toplu olarak değişken ekler. Değişkenlere adlarıyla referans verilir.

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

Parametreler

AdTürAçıklama
namesString[]değişkenlerin benzersiz adları
lowerBoundsNumber[]değişkenlerin alt sınırları
upperBoundsNumber[]değişkenlerin üst sınırları
typesVariableType[]değişken türleri, VariableType değerlerinden biri olabilir
objectiveCoefficientsNumber[]değişkenlerin amaç katsayıları

Return

LinearOptimizationEngine: Doğrusal optimizasyon motoru


setMaximization()

Optimizasyon yönünü doğrusal amaç işlevini en üst düzeye çıkaracak şekilde ayarlar.

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

Return

LinearOptimizationEngine: Doğrusal optimizasyon motoru


setMinimization()

Optimizasyon yönünü doğrusal amaç işlevini en aza indirme olarak ayarlar.

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

Return

LinearOptimizationEngine: Doğrusal optimizasyon motoru


setObjectiveCoefficient(variableName, coefficient)

Doğrusal amaç fonksiyonundaki bir değişkenin katsayısını ayarlar.

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

Parametreler

AdTürAçıklama
variableNameStringkatsayının ayarlandığı değişkenin adı
coefficientNumberamaç fonksiyonundaki değişkenin katsayısı

Return

LinearOptimizationEngine: Doğrusal optimizasyon motoru


solve()

Mevcut doğrusal programı 30 saniyelik varsayılan son tarihle çözer. Bulunan çözümü döndürür.

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

Return

LinearOptimizationSolution — optimizasyonun çözümü


solve(seconds)

Geçerli doğrusal programı çözer. Bulunan çözümü ve bunun en iyi çözüm olup olmadığını döndürür.

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

Parametreler

AdTürAçıklama
secondsNumberSorunu çözmek için son tarih (saniye cinsinden); maksimum son tarih 300 saniyedir.

Return

LinearOptimizationSolution — optimizasyonun çözümü