Class LinearOptimizationSolution

Solution d'optimisation linéaire

Solution d'un programme linéaire. L'exemple ci-dessous résout le programme linéaire suivant:

Deux variables, x et y:
0 ≤ x ≤ 10
0 ≤ y ≤ 5

Contraintes:
0 ≤ 2 * x + 5 * y ≤ 10
0 ≤ 10 * x + 3 * y ≤ 20

Objectif:
Maximiser 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(`Objective  value: ${solution.getObjectiveValue()}`);
  Logger.log(`Value of x: ${solution.getVariableValue('x')}`);
  Logger.log(`Value of y: ${solution.getVariableValue('y')}`);
}

Méthodes

MéthodeType renvoyéBrève description
getObjectiveValue()NumberRécupère la valeur de la fonction objectif dans la solution actuelle.
getStatus()StatusRécupère l'état de la solution.
getVariableValue(variableName)NumberRécupère la valeur d'une variable dans la solution créée par le dernier appel à LinearOptimizationEngine.solve().
isValid()BooleanDétermine si la solution est réalisable ou optimale.

Documentation détaillée

getObjectiveValue()

Récupère la valeur de la fonction objectif dans la solution actuelle.

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();
Logger.log(`ObjectiveValue: ${solution.getObjectiveValue()}`);

Renvois

Number : valeur de la fonction objectif


getStatus()

Récupère l'état de la solution. Avant que le problème ne soit résolu, son état est NOT_SOLVED.

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();
const status = solution.getStatus();

if (status !== LinearOptimizationService.Status.FEASIBLE &&
    status !== LinearOptimizationService.Status.OPTIMAL) {
  throw `No solution ${status}`;
}
Logger.log(`Status: ${status}`);

Renvois

Status : état du solveur


getVariableValue(variableName)

Récupère la valeur d'une variable dans la solution créée par le dernier appel à LinearOptimizationEngine.solve().

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();
Logger.log(`Value of x: ${solution.getVariableValue('x')}`);

Paramètres

NomTypeDescription
variableNameStringnom de la variable

Renvois

Number : valeur de la variable dans la solution


isValid()

Détermine si la solution est réalisable ou optimale.

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

Renvois

Boolean : true si la solution est valide (Status.FEASIBLE ou Status.OPTIMAL) ; false sinon