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

الطُرق

الطريقةنوع القيمة التي يتم عرضهاوصف قصير
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 — حلّ عملية التحسين