Class LinearOptimizationSolution

LinearOptimizationSolution

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()NumberRenvoie la valeur de la fonction objectif dans la solution actuelle.
getStatus()StatusObtient 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()

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

Obtient l'état de la solution. Avant de résoudre un problème, l'état est défini sur 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