Transformer une valeur absolue en programme linéaire

Résolu
lolo -  
 CCMBot -

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.

2 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     

    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
  2. CCMBot
     
    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