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

Methods

שיטהסוג הערך שמוחזרתיאור קצר
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).

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

פרמטרים

שםסוגתיאור
lowerBoundNumberהגבול התחתון של האילוץ
upperBoundNumberהגבול העליון של האילוץ

חזרה

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

פרמטרים

שםסוגתיאור
lowerBoundsNumber[]הגבולות התחתונים של האילוצים
upperBoundsNumber[]הגבולות העליונים של האילוצים
variableNamesString[][]השמות של המשתנים שעבורם מוגדרים המקדמים
coefficientsNumber[][]המקדמים שמוגדרים

חזרה

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

פרמטרים

שםסוגתיאור
nameStringהשם הייחודי של המשתנה
lowerBoundNumberהגבול התחתון של המשתנה
upperBoundNumberהגבול העליון של המשתנה

חזרה

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

פרמטרים

שםסוגתיאור
nameStringהשם הייחודי של המשתנה
lowerBoundNumberהגבול התחתון של המשתנה
upperBoundNumberהגבול העליון של המשתנה
typeVariableTypeסוג המשתנה, יכול להיות אחד מהערכים הבאים: VariableType

חזרה

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.

פרמטרים

שםסוגתיאור
nameStringהשם הייחודי של המשתנה
lowerBoundNumberהגבול התחתון של המשתנה
upperBoundNumberהגבול העליון של המשתנה
typeVariableTypeסוג המשתנה, יכול להיות אחד מהערכים הבאים: VariableType
objectiveCoefficientNumberמקדמי היעד של המשתנה

חזרה

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

פרמטרים

שםסוגתיאור
namesString[]שמות ייחודיים של המשתנים
lowerBoundsNumber[]הגבולות התחתונים של המשתנים
upperBoundsNumber[]הגבולות העליונים של המשתנים
typesVariableType[]סוגי המשתנים, יכול להיות אחד מהערכים VariableType
objectiveCoefficientsNumber[]מקדמי המטרה של המשתנים

חזרה

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

פרמטרים

שםסוגתיאור
variableNameStringשם המשתנה שעבורו מוגדר המקדם
coefficientNumberהמקדם של המשתנה בפונקציית המטרה

חזרה

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

פרמטרים

שםסוגתיאור
secondsNumberהמועד האחרון לפתרון הבעיה, בשניות. המועד האחרון המקסימלי הוא 300 שניות

חזרה

LinearOptimizationSolution — פתרון האופטימיזציה