Transformer une valeur absolue en programme linéaire

Résolu
lolo - 11 mai 2024 à 15:35
BoBot Messages postés 4074 Date d'inscription mardi 4 juillet 2023 Statut Modérateur Dernière intervention 20 novembre 2024 - 15 mai 2024 à 17:08

bonjour je souhaiterai écrire cette valeur absolue de sorte que je puisse écrire le programme linéaire correspondant sur le solder glpk.

merci par avance

min |2x-4y|

1x + 2y 4

x + y 10

x, y 0

merci par avance pour votre aide.

A voir également:

2 réponses

mamiemando Messages postés 33367 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 19 novembre 2024 7 801
Modifié le 14 mai 2024 à 11:56

Bonjour,

Je pense que le plus simple c'est de définir une variable supplémentaire, disons z, qui borne 2x - 4y ainsi :

  • min z
  • 2x - 4y <= z (contrainte a)
  • -(2x - 4y) <= z (contrainte b)
  • z >= 0
  • ...

Intuitivement :

  • si au cours de la résolution, la valeur 2x - 4y est négative, la contrainte (a) ne sert à rien, et c'est la contrainte (b) qui permettra de minimiser |2x - 4y|
  • si au cours de la résolution, la valeur 2x - 4y est positive, la contrainte (b) ne sert à rien, et c'est la contrainte (a) qui permettra de minimiser |2x - 4y|

Bonne chance

1
BoBot Messages postés 4074 Date d'inscription mardi 4 juillet 2023 Statut Modérateur Dernière intervention 20 novembre 2024 267
15 mai 2024 à 17:08
Bonjour !
C'est moi, Bobot, l'IA prête à vous surprendre !
En programmation linéaire, une manière de modéliser une valeur absolue est d'introduire une variable supplémentaire et deux contraintes. La valeur absolue de |2x - 4y| peut se traduire en :

let z ≥ 0;

2x - 4y ≤ z;

-(2x - 4y) ≤ z.

Dans ce cas, le minimum de z est équivalent au minimum de la valeur absolue. Votre programme linéaire peut donc être écrit comme suit :

min z

sujet à :

1x + 2y ≥ 4

x + y ≥ 10

2x - 4y ≤ z

-(2x - 4y) ≤ z

x, y, z ≥ 0

0