Dibujando Un Problema De Programación Lineal Con Gnuplot

por | 17 Agosto, 2013

Hola , llevo unos días intentando dibujar la resolución gráfica de un típico problema de dieta de Programación Lineal de Segundo de Bachiller. En el problema podemos tener, por ejemplo, lo siguiente:

P = 100x + 60y

s.a.

4x + y >= 4

6x + 10y >= 23

x + 6y >= 6

x >= 0, y >= 0

Al dibujar la región nos damos cuenta que no es acotada, por esa razón la he elegido para aquí. Debe quedar muy claro que Gnuplot NO resuelve el problema, sólo lo dibuja. Pero me interesa hacerlo con Gnuplot porque luego me permite dibujarlo en una web con HTML5 en un Canvas. Bien, el código con sus comentarios explicativos es el siguiente:

  1. set title 'Problema De La Dieta'
  2. set multiplot #Lo hacemos multidibujo para dibujar ptos. vértices.
  3. #Ponemos los ejes coordenados y las tics con origen centrado
  4. set xzeroaxis lt 3 lw 2.0 lc rgb 'black'
  5. set yzeroaxis lt 3 lw 2.0 lc rgb 'black'
  6. set border 0
  7. set xtics axis ('-2' -2, '-1' -1, '  0' 0, '1' 1, '2' 2, '3' 3, '4' 4, \
  8.  '5' 5, '6' 6, '7' 7, '8' 8, '9' 9, '10' 10)
  9. set ytics axis ('-2' -2, '-1' -1, ' ' 0, '1' 1, '2' 2, '3' 3, '4' 4, \
  10.  '5' 5, '6' 6, '7' 7, '8' 8, '9' 9, '10' 10)
  11.  
  12. set xrange [-2:10]
  13. set yrange [-2:10]
  14. set size ratio 0.75
  15.  
  16. #Establecemos la región como un polígono acotado, aunque nuestra
  17. #región no es acotada, para ello añadimos más vértices exteriores
  18. #a las intersecciones de las rectas.
  19.  
  20. set object 1 polygon from \
  21.     0, 4 to \
  22.     0.5, 2 to \
  23.     3, 0.5 to \
  24.     6, 0 to \
  25.     8, 0 to \
  26.     8, 8 to \
  27.     0, 8 to \
  28.     0,4
  29. #Rellenamos el polígono de color rojo sólido y con noborder indicamos
  30. #que no acotado, sin bordes.
  31.  
  32. set object 1 fc rgb 'red' fillstyle solid 1.0 noborder
  33.  
  34. #Dibujamos las rectas.
  35.  
  36. plot 4-4*x title '4x+y=4' lc rgb 'blue',\
  37.  (6-x)/6 title 'x+6y=6' lc rgb 'brown', (23-6*x)/10 title '6x+10y=23' lc rgb 'orange'
  38.  
  39. #Dibujamos las flechas.
  40.  
  41. set arrow 1 from 9.75,0 to 9.75,1, -9 size 0.5, 30 lc rgb 'black'
  42. set arrow 2 from 0,9.75 to 1,9.75, -9 size 0.5, 30 lc rgb 'black'
  43. set arrow 3 from -1.25,9 to -0.4,9, -9 size 0.5, 30 lc rgb 'blue'
  44. set arrow 4 from -1,2.9 to -1,3.75, -9 size 0.5, 30 lc rgb 'orange'
  45. set arrow 5 from 9,-0.5 to 9,0.75, -9 size 0.5, 30 lc rgb 'brown'
  46.  
  47. #Dibujamos las etiquetas de los vértices.
  48.  
  49. set label 1 'A(0,4)' at 0.2,4
  50. set label 2 'B(0.5,2)' at 0.7,2
  51. set label 3 'C(3,0.5)' at 3.2,0.7
  52. set label 4 'D(6,0)' at 6.2,0.2
  53.  
  54. #Dibujamos las etiquetas de las inecuaciones de la región.
  55.  
  56. set label 5 '4x+y >= 4' at 1.6,-2
  57. set label 6 'x+6y >= 6' at -2,1.5
  58. set label 7 '6x+10y >= 23' at 7,-1.7
  59.  
  60. #Dibujamos los puntos negros de los vértices de la región.
  61.  
  62. set pointsize 2.0
  63. set style line 1 lc rgb 'black' pt 7   # circle
  64. unset key
  65. plot '-' w p ls 1, '-' w p ls 1, '-' w p ls 1, '-' w p ls 1
  66. 0 4
  67. e
  68. 0.5 2
  69. e
  70. 3 0.5
  71. e
  72. 6 0
  73. e
  74.  
  75. set nomultiplot
  76. pause -1

Para dibujar el polígono la clave está en la palabra clave polygon , eso dibuja el polígono. Otra cosa a tener en cuenta es que para dibujar los puntos de los vértices es necesario establecer el multiplot, si no queremos dibujarlos no hará falta el multiplot.

Problema De La Dieta

Problema De La Dieta

No hay mucha información sobre esto, he tenido que surfear por la web muchísimo e ir atando muchos cabos sueltos hasta obtener los resultados deseados.

Saludos

3 pensamientos en “Dibujando Un Problema De Programación Lineal Con Gnuplot

  1. Paulo Lira Gutiérrez

    muy interesante para estudiantes de ingenieria industrial que usan linux.

  2. Tobal

    Una cosa importante, si alguien quiere copiar y pegar el código que lo haga primero dando donde aparece ver código en texto plano, porque el signo mayor que no se visualiza bien por causas de WordPress.
    @manu y @pauloliragutirrez:disqus, en España (no sé de qué país sois) se estudia por primera vez en segundo bachiller en las opciones no científicas. También se estudia mucho en licenciaturas de la rama de economía. Éste tema tiene varias ramas: Lineal, No Lineal, Entera, etc..

Los comentarios están cerrados.