<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Análisis de sensibilidad archivos &#187; Ingenieria Industrial Online</title>
	<atom:link href="https://ingenieriaindustrialonline.com/tag/analisis-de-sensibilidad/feed/" rel="self" type="application/rss+xml" />
	<link>https://ingenieriaindustrialonline.com/tag/analisis-de-sensibilidad/</link>
	<description>ingenieriaindustriaonline.com</description>
	<lastBuildDate>Tue, 14 Feb 2023 00:04:02 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.3</generator>

<image>
	<url>https://ingenieriaindustrialonline.com/wp-content/uploads/2019/06/cropped-faVicon-32x32.png</url>
	<title>Análisis de sensibilidad archivos &#187; Ingenieria Industrial Online</title>
	<link>https://ingenieriaindustrialonline.com/tag/analisis-de-sensibilidad/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Cambios en el lado derecho de las restricciones (Método gráfico)</title>
		<link>https://ingenieriaindustrialonline.com/investigacion-de-operaciones/cambios-en-el-lado-derecho-de-las-restricciones-metodo-grafico/</link>
					<comments>https://ingenieriaindustrialonline.com/investigacion-de-operaciones/cambios-en-el-lado-derecho-de-las-restricciones-metodo-grafico/#respond</comments>
		
		<dc:creator><![CDATA[Bryan Salazar López]]></dc:creator>
		<pubDate>Tue, 14 Feb 2023 00:04:02 +0000</pubDate>
				<category><![CDATA[Investigación de operaciones]]></category>
		<category><![CDATA[Análisis de sensibilidad]]></category>
		<category><![CDATA[Análisis postóptimo]]></category>
		<category><![CDATA[Cambios en RHS]]></category>
		<category><![CDATA[Método gráfico]]></category>
		<category><![CDATA[Programación lineal]]></category>
		<guid isPermaLink="false">https://www.ingenieriaindustrialonline.com/?p=33214</guid>

					<description><![CDATA[<p>El análisis de sensibilidad mediante método gráfico es una técnica utilizada en modelos matemáticos para determinar cómo los cambios en los valores de entrada afectan a las salidas del modelo. Los resultados estáticos obtenidos a través de un método de solución son una fotografía, corresponden a la optimización de acuerdo a unos parámetros inalterables. Las &#8230;</p>
<p>La entrada <a href="https://ingenieriaindustrialonline.com/investigacion-de-operaciones/cambios-en-el-lado-derecho-de-las-restricciones-metodo-grafico/">Cambios en el lado derecho de las restricciones (Método gráfico)</a> se publicó primero en <a href="https://ingenieriaindustrialonline.com">Ingenieria Industrial Online</a>.</p>
]]></description>
										<content:encoded><![CDATA[
		<div id="inrtoduccion" data-title="Inrtoducción" class="index-title"></div>
	 El análisis de sensibilidad mediante método gráfico es una técnica utilizada en modelos matemáticos para determinar cómo los cambios en los valores de entrada afectan a las salidas del modelo.</p>
<p>Los resultados estáticos obtenidos a través de un método de solución son una fotografía, corresponden a la optimización de acuerdo a unos parámetros inalterables. Las preguntas que dan pie, tanto al análisis de sensibilidad como al análisis postóptimo son: <em><strong>¿Qué pasaría si los valores de algunos parámetros cambian? ¿Cómo afecta esto a la solución óptima o la factibilidad del modelo? ¿Cómo afecta a las variables de decisión y/o la función objetivo?</strong></em></p>
<p>Para responder a estas preguntas acudimos a los análisis complementarios: <strong>Sensibilidad</strong> y <strong>Postóptimo</strong>.</p>
<p><img decoding="async" src="https://ingenieriaindustrialonline.com/wp-content/uploads/2023/02/camara.webp" alt="fotografía" width="236" height="243" class="size-full wp-image-33219 alignleft" />El análisis de sensibilidad determina las condiciones que mantendrán la solución actual sin cambios (desde el punto de vista geométrico, ya que es posible que la función objtivo y las variables de decisión cambien ante los cambios de los parámetros del modelo), mientras que el análisis postóptimo determina la nueva solución óptima cuando los datos del modelo cambian. Las tecnologías actuales, como Geogebra, han reducido la diferencia entre estos dos tipos de análisis, permitiendo una transición fluida desde el análisis de sensibilidad (indicadores lineales) hasta el análisis postóptimo mediante técnicas dinámicas.</p>
<p>Es importante destacar que, aunque el <a href="https://ingenieriaindustrialonline.com/investigacion-de-operaciones/metodo-grafico/"><strong>método gráfico</strong></a> es útil para comprender las relaciones en el sistema, existen otras herramientas más robustas, como la programación paramétrica con lenguajes de programación, que superan las limitaciones de la cantidad máxima de variables que puede manejar el método gráfico. Por lo tanto, el método gráfico puede ser una buena opción para visualizar los resultados, pero no es la herramienta más adecuada para un análisis exhaustivo y detallado de la sensibilidad.</p>
<p>Empezaremos por uno de los casos de análisis de sensibilidad más conocidos:</p>
<h2>Cambios en el lado derecho de las restricciones
		<div id="cambios-en-el-lado-derecho-de-las-restricciones" data-title="Cambios en el lado derecho de las restricciones" class="index-title"></div>
	</h2>
<p>También conocido como «cambio en la disponibilidad de los recursos», este tipo de análisis de sensibilidad es técnicamente definido como «cambio en el lado derecho de las restricciones» y es uno de los más populares. Sin embargo, es importante destacar que las restricciones en un sistema no solo se relacionan con la disponibilidad de recursos, sino que también representan condiciones, relaciones y políticas que rigen al sistema en sí. Por lo tanto, denominar este tipo de análisis como «cambio en la disponibilidad de los recursos» puede generar ambigüedad y no reflejar completamente su alcance.</p>
<p>En palabras más sencillas: Vamos a explorar el impacto que tiene en los resultados del modelo de programación lineal, los cambios en el lado derecho de las restricciones. ¿Cambios en plural? Sí, lea la siguiente advertencia:</p>

		<div class="box warning  ">
			<div class="box-inner-block">
				<span class="fa tie-shortcode-boxicon"></span>
<p>En la educación y la literatura sobre este tipo de análisis de sensibilidad, a menudo se encuentra la afirmación equivocada de que «el método gráfico solo permite cambios en un solo parámetro mientras mantiene todos los demás inalterados». Sin embargo, la tecnología actual nos permite explorar el impacto en la solución de cambios simultáneos en los parámetros mediante técnicas dinámicas. Es importante tener en cuenta que estos cambios simultáneos pueden tener efectos combinados en los resultados del modelo.</p>

			</div>
		</div>
	
<p>Los paradigmas de la enseñanza tradicional no paran ahí, también tenemos que:</p>

		<div class="box warning  ">
			<div class="box-inner-block">
				<span class="fa tie-shortcode-boxicon"></span>
<p>En la educación y la literatura sobre este tipo de análisis de sensibilidad, a menudo se encuentra la afirmación equivocada de que «el análisis de sensibilidad ante los cambios en el lado derecho de las restricciones se reduce a analizar el intervalo de aquellas restricciones que afectan el punto óptimo». Sin embargo, la tecnología actual nos permite explorar el impacto en la solución de cambios en restricciones que no necesariamente afectan el punto óptimo (tanto sensibilidad como postóptimo).</p>

			</div>
		</div>
	
<p>Con el propósito de evaluar los resultados obtenidos a través del tratamiento de un problema técnicamente formulado y abordado, utilizaremos un caso descrito en el libro Investigación de Operaciones (9na edición), de Hamdy A. Taha (University of Arkansas, Fayetteville), (Ejemplo 3.6-1):</p>
<blockquote class=" quote-simple "><p>JOBCO fabrica dos productos en dos máquinas. Una unidad del producto 1 requiere 2 horas en la máquina 1, y 1 hora en la máquina 2. Una unidad del producto 2 requiere 1 hora en la máquina 1, y 3 horas en la máquina 2. Los ingresos por unidad de los productos 1 y 2 son de $30 y $20, respectivamente. El tiempo de procesamiento diario total disponible en cada máquina es de 8 horas.</p></blockquote>
<p>Si <em><strong>x</strong></em> e <em><strong>y</strong></em> son las cantidades diarias de productos 1 y 2, respectivamente, el modelo se da como:</p>
<p style="text-align: center;"><strong>Zmax</strong> = 30<strong>x</strong> + 20<strong>y</strong></p>
<p>Sujeto a:</p>
<p style="text-align: center;">2<strong>x</strong> + <strong>y</strong> &lt;= 8 (Máquina 1)</p>
<p style="text-align: center;"><strong>x</strong> + 3<strong>y</strong> &lt;= 8 (Máquina 2)</p>
<p style="text-align: center;"><strong>x</strong>, <strong>y</strong> &gt;= 0 (No negatividad)</p>
<p>La solución de este modelo mediante método gráfico nos muestra lo siguiente:</p>
<p><img decoding="async" src="https://ingenieriaindustrialonline.com/wp-content/uploads/2023/02/optima_jobco.png" alt="óptima_jobco" width="613" height="630" class="size-full wp-image-33222 aligncenter" srcset="https://ingenieriaindustrialonline.com/wp-content/uploads/2023/02/optima_jobco.png 613w, https://ingenieriaindustrialonline.com/wp-content/uploads/2023/02/optima_jobco-292x300.png 292w" sizes="(max-width: 613px) 100vw, 613px" /></p>
<p>Es decir que tenemos:</p>
<table style="border-collapse: collapse; width: 100%; height: 111px;">
<tbody>
<tr style="height: 37px;">
<td style="width: 50%; text-align: center; height: 37px;"><strong>x (producto 1)</strong></td>
<td style="width: 50%; height: 37px; text-align: center;">3.2</td>
</tr>
<tr style="height: 37px;">
<td style="width: 50%; text-align: center; height: 37px;"><strong>y (producto 2)</strong></td>
<td style="width: 50%; height: 37px; text-align: center;">1.6</td>
</tr>
<tr style="height: 37px;">
<td style="width: 50%; text-align: center; height: 37px;"><strong>Z (ingresos)</strong></td>
<td style="width: 50%; height: 37px; text-align: center;">$ 128</td>
</tr>
</tbody>
</table>
<p>La pregunta que pretende responder este caso de análisis de sensibilidad es <em>¿Qué pasaría con estos resultados si cambia el lado derecho de algunas de sus restricciones? </em>Propiamente, qué pasaría si aumenta o disminuye la disponibilidad de tiempo de alguna de las máquinas de acuerdo al caso planteado (máquina 1 / máquina 2).</p>
<p>Así que, vamos a formular específiamente la pregunta a resolver:</p>
<p><strong>¿Qué pasaría con los resultados del modelo si el tiempo disponible de la máquina 1 aumenta en una hora?</strong></p>
<p>Un cambio en la restricción supone un cambio en la representación gráfica de la misma, en consecuencia, debemos trazar la línea que representa la restricción ante este cambio de disponibilidad.</p>
<table style="border-collapse: collapse; width: 100%; height: 74px;">
<tbody>
<tr style="height: 37px;">
<td style="width: 50%; height: 37px; text-align: center;"><strong>Restricción inicial (R1)</strong></td>
<td style="width: 50%; height: 37px; text-align: center;"><strong>Restricción nueva (R1&#8242;)</strong></td>
</tr>
<tr style="height: 37px;">
<td style="width: 50%; height: 37px; text-align: center;">2x + y &lt;= 8</td>
<td style="width: 50%; height: 37px; text-align: center;">2x + y &lt;= 9</td>
</tr>
</tbody>
</table>
<p style="text-align: left;">La representación gráfica de una línea requiere un mínimo de dos puntos. La representación gráfica de un punto requiere dos coordenadas; por lo tanto vamos a tabular las coordenadas necesarias (en la igualdad).</p>
<table style="border-collapse: collapse; width: 100%;">
<tbody>
<tr>
<td style="width: 50%; text-align: center;"><strong>¿Qué valor tomaría Y cuando X sea 0?</strong></td>
<td style="width: 50%; text-align: center;"><strong>¿Qué valor tomaría X cuando Y sea 0?</strong></td>
</tr>
<tr>
<td style="width: 50%; text-align: center;">2(0) + y = 9</td>
<td style="width: 50%; text-align: center;">2x + 0 = 9</td>
</tr>
<tr>
<td style="width: 50%; text-align: center;">y = 9</td>
<td style="width: 50%; text-align: center;">2x = 9</td>
</tr>
<tr>
<td style="width: 50%; text-align: center;"></td>
<td style="width: 50%; text-align: center;">x = 9/2</td>
</tr>
<tr>
<td style="width: 50%; text-align: center;"></td>
<td style="width: 50%; text-align: center;">x = 4.5</td>
</tr>
</tbody>
</table>
<p>Así entonces, tenemos nuestras coordenadas:</p>
<table style="border-collapse: collapse; width: 100%;">
<tbody>
<tr>
<td style="width: 33.3333%; text-align: center;"><strong>R1&#8242;: 2x + y &lt;= 9</strong></td>
<td style="width: 33.3333%; text-align: center;"><strong>x</strong></td>
<td style="width: 33.3333%; text-align: center;"><strong>y</strong></td>
</tr>
<tr>
<td style="width: 33.3333%; text-align: center;"><strong>Punto 1</strong></td>
<td style="width: 33.3333%; text-align: center;">0</td>
<td style="width: 33.3333%; text-align: center;">9</td>
</tr>
<tr>
<td style="width: 33.3333%; text-align: center;"><strong>Punto 2</strong></td>
<td style="width: 33.3333%; text-align: center;">4.5</td>
<td style="width: 33.3333%; text-align: center;">0</td>
</tr>
</tbody>
</table>
<p>Trazamos los puntos y la línea que representan a R1:</p>
<p><img decoding="async" src="https://ingenieriaindustrialonline.com/wp-content/uploads/2023/02/optima_jobco2.png" alt="óptima_jobco2" width="602" height="634" class="size-full wp-image-33223 aligncenter" srcset="https://ingenieriaindustrialonline.com/wp-content/uploads/2023/02/optima_jobco2.png 602w, https://ingenieriaindustrialonline.com/wp-content/uploads/2023/02/optima_jobco2-285x300.png 285w" sizes="(max-width: 602px) 100vw, 602px" /></p>
<p>Trazar esta nueva restricción nos muestra que si desplazamos R1 hacia el lugar en el que se muestra R1&#8242; (aumento de la disponibilidad del recurso), tendremos una nueva intersección óptima. Simplificando: El cambio en el lado derecho de esta restricción tendría un efecto sobre los resultados obtenidos inicialmente. ¿Cuál es este efecto? Para saberlo debemos hallar la nueva intersección.</p>
<p>Si usamos técnicas matemáticas, tendremos que recurrir a la solución de ecuaciones de 2 * 2. Se trata de encontrar la intersección entre R1&#8242; y R2. Veamos el método de reducción / eliminación:</p>
<table style="border-collapse: collapse; width: 100%;">
<tbody>
<tr>
<td style="width: 19.125%; text-align: center;"><strong>R1&#8242;</strong></td>
<td style="width: 45.125%; text-align: center;">2x + y = 9</td>
</tr>
<tr>
<td style="width: 19.125%; text-align: center;"><strong>R2</strong></td>
<td style="width: 45.125%; text-align: center;">x + 3y = 8</td>
</tr>
<tr>
<td style="width: 19.125%; text-align: center;"><strong>R1&#8242; * (-3)</strong></td>
<td style="width: 45.125%; text-align: center;">-6x -3y = -27</td>
</tr>
<tr>
<td style="width: 19.125%; text-align: center;"><strong>R1&#8217;*(-3) + R2</strong></td>
<td style="width: 45.125%; text-align: center;">-5x = -19</td>
</tr>
<tr>
<td style="width: 19.125%; text-align: center;"></td>
<td style="width: 45.125%; text-align: center;">x = -19/-5</td>
</tr>
<tr>
<td style="width: 19.125%; text-align: center;"></td>
<td style="width: 45.125%; text-align: center;">x = 3.8</td>
</tr>
</tbody>
</table>
<p>Si despejamos x = 3.8 en cualquiera de las restricciones tendremos el valor de y:</p>
<p style="text-align: center;">2(3.8) + y = 9</p>
<p style="text-align: center;">7.6 + y = 9</p>
<p style="text-align: center;">y = 9 &#8211; 7.6</p>
<p style="text-align: center;">y = 1.4</p>
<p>Por lo tanto tenemos las coordenadas del nuevo punto óptimo (3.8, 1.4):</p>
<p><img decoding="async" src="https://ingenieriaindustrialonline.com/wp-content/uploads/2023/02/optima_jobco3.png" alt="óptima_jobco3" width="605" height="634" class="size-full wp-image-33224 aligncenter" srcset="https://ingenieriaindustrialonline.com/wp-content/uploads/2023/02/optima_jobco3.png 605w, https://ingenieriaindustrialonline.com/wp-content/uploads/2023/02/optima_jobco3-286x300.png 286w" sizes="(max-width: 605px) 100vw, 605px" /></p>
<p>Si evaluamos la función objetivo en este nuevo punto tendremos que:</p>
<p style="text-align: center;"><strong>Zmáx</strong> = 30(3.8) + 20(1.4)</p>
<p style="text-align: center;"><strong>Zmáx</strong> = 142</p>
<p>Podemos afirmar que un cambio en el lado derecho de la restricción 1 (tiempo disponible en horas de la máquina 1), tuvo un efecto en los resultados de la siguiente manera:</p>
<table style="border-collapse: collapse; width: 100%; height: 148px;">
<tbody>
<tr style="height: 37px;">
<td style="width: 7.4167%; height: 37px;"></td>
<td style="width: 38.7917%; text-align: center; height: 37px;"><strong>Solución inicial</strong></td>
<td style="width: 40.2083%; text-align: center; height: 37px;"><strong>Solución nueva (cambio en el RHS)</strong></td>
<td style="width: 13.5833%; text-align: center; height: 37px;"><strong>Diferencia</strong></td>
</tr>
<tr style="height: 37px;">
<td style="width: 7.4167%; height: 37px;"><strong>x</strong></td>
<td style="width: 38.7917%; text-align: center; height: 37px;">3.2</td>
<td style="width: 40.2083%; text-align: center; height: 37px;">3.8</td>
<td style="width: 13.5833%; text-align: center; height: 37px;"></td>
</tr>
<tr style="height: 37px;">
<td style="width: 7.4167%; height: 37px;"><strong>y</strong></td>
<td style="width: 38.7917%; text-align: center; height: 37px;">1.6</td>
<td style="width: 40.2083%; text-align: center; height: 37px;">1.4</td>
<td style="width: 13.5833%; text-align: center; height: 37px;"></td>
</tr>
<tr style="height: 37px;">
<td style="width: 7.4167%; height: 37px;"><strong>Z</strong></td>
<td style="width: 38.7917%; text-align: center; height: 37px;">$ 128</td>
<td style="width: 40.2083%; text-align: center; height: 37px;">$ 142</td>
<td style="width: 13.5833%; text-align: center; height: 37px;">$14</td>
</tr>
</tbody>
</table>
<p>La diferencia en la función objetivo entre la solución nueva y la solución inicial ante un cambio unitario en el lado derecho de una restricción es un indicador lineal conocido como valor dual. En este caso, el valor dual es de 14 $/hora. Es decir, por cada hora que aumente la disponibilidad de la máquina 1, la utilidad se incrementará en $14. Del mismo modo funciona de manera inversa: Por cada hora que disminuya la disponibilidad de la máquina 1, la utilidad disminuirá en $14.</p>
<p><strong>¿Este valor dual tiene validez ante cualquier cambio en este recurso?</strong> ¡No! Este indicador lineal tiene validez dentro de unos límites denominados límites de factibilidad.</p>
<p><strong>¿Entonces es imposible calcular el impacto por fuera de los límites del valor dual? </strong>¡No! La literatura invita a recalcular todo el modelo. Sin embargo, si utilizamos un software como Geogebra podemos calcular el impacto de un cambio por fuera de los límites de factibilidad:</p>
<h2>Cambios en el lado derecho de las restricciones con Geogebra
		<div id="cambios-en-el-lado-derecho-de-las-restricciones-con-geogebra" data-title="Cambios en el lado derecho de las restricciones con Geogebra" class="index-title"></div>
	</h2>
<p>Utilice los desplazadores para ver el impacto del cambio del lado derecho de las restricciones en los resultados del modelo.</p>
<p><iframe loading="lazy" width="650" height="750" style="border: 1px solid #e4e4e4; border-radius: 4px;" src="https://www.geogebra.org/classic/g3vc2hwb?embed" allowfullscreen="allowfullscreen" frameborder="0"><span data-mce-type="bookmark" style="display: inline-block; width: 0px; overflow: hidden; line-height: 0;" class="mce_SELRES_start">﻿</span><span data-mce-type="bookmark" style="display: inline-block; width: 0px; overflow: hidden; line-height: 0;" class="mce_SELRES_start">﻿</span><span data-mce-type="bookmark" style="display: inline-block; width: 0px; overflow: hidden; line-height: 0;" class="mce_SELRES_start">﻿</span></iframe></p>
<p>De acuerdo a la representación gráfica de Geogebra vemos cómo podemos lograr conocer el impacto de cambios simultáneos en los lados derechos de las restricciones. También podemos validar el resutado obtenido manualmente, validar ese valor dual de $14 si aumentamos la disponibilidad de la máquina 1 a 9 horas y verificar, desde luego, que dicho impacto lineal no es ilimitado, ya que existen límites que abordaremos en un próximo post.</p>
<p>La entrada <a href="https://ingenieriaindustrialonline.com/investigacion-de-operaciones/cambios-en-el-lado-derecho-de-las-restricciones-metodo-grafico/">Cambios en el lado derecho de las restricciones (Método gráfico)</a> se publicó primero en <a href="https://ingenieriaindustrialonline.com">Ingenieria Industrial Online</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ingenieriaindustrialonline.com/investigacion-de-operaciones/cambios-en-el-lado-derecho-de-las-restricciones-metodo-grafico/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Casos especiales de programación lineal (Método Gráfico)</title>
		<link>https://ingenieriaindustrialonline.com/investigacion-de-operaciones/casos-especiales-de-programacion-lineal-metodo-grafico/</link>
					<comments>https://ingenieriaindustrialonline.com/investigacion-de-operaciones/casos-especiales-de-programacion-lineal-metodo-grafico/#respond</comments>
		
		<dc:creator><![CDATA[Bryan Salazar López]]></dc:creator>
		<pubDate>Thu, 08 Dec 2022 19:53:51 +0000</pubDate>
				<category><![CDATA[Investigación de operaciones]]></category>
		<category><![CDATA[Análisis de sensibilidad]]></category>
		<category><![CDATA[casos especiales]]></category>
		<category><![CDATA[Investigación de Operaciones]]></category>
		<category><![CDATA[modelamiento de problemas]]></category>
		<category><![CDATA[Programación lineal]]></category>
		<category><![CDATA[restricciones inactivas]]></category>
		<category><![CDATA[solución infactible]]></category>
		<category><![CDATA[solución óptima acotada]]></category>
		<category><![CDATA[solución óptima no acotada]]></category>
		<guid isPermaLink="false">https://ingenieriaindustrialonline.com/?p=32764</guid>

					<description><![CDATA[<p>Para empezar, es importante recordar que en un modelo de programación lineal, se busca encontrar la solución óptima que maximiza o minimiza una función objetivo, sujeta a un conjunto de restricciones. En el método gráfico, se representa gráficamente la función objetivo y las restricciones en un plano cartesiano, formando una región factible que contiene todas &#8230;</p>
<p>La entrada <a href="https://ingenieriaindustrialonline.com/investigacion-de-operaciones/casos-especiales-de-programacion-lineal-metodo-grafico/">Casos especiales de programación lineal (Método Gráfico)</a> se publicó primero en <a href="https://ingenieriaindustrialonline.com">Ingenieria Industrial Online</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Para empezar, es importante recordar que en un modelo de <a href="https://ingenieriaindustrialonline.com/investigacion-de-operaciones/programacion-lineal/"><strong>programación lineal</strong></a>, se busca encontrar la solución óptima que maximiza o minimiza una función objetivo, sujeta a un conjunto de restricciones. En el <a href="https://ingenieriaindustrialonline.com/investigacion-de-operaciones/metodo-grafico/"><strong>método gráfico</strong></a>, se representa gráficamente la función objetivo y las restricciones en un plano cartesiano, formando una región factible que contiene todas las soluciones posibles. Sin embargo, en algunos casos, la solución óptima no siempre se encuentra en uno de los vértices de la región factible. Estos son los denominados casos especiales de programación lineal.</p>

		<div class="box info  ">
			<div class="box-inner-block">
				<span class="fa tie-shortcode-boxicon"></span>Recordemos que en el área de solución se encuentran todas las posibles soluciones que satisfacen el conjunto de restricciones, lo que se denomina factibilidad. La optimalidad es diferente, ya que dentro de las soluciones factibles, una o algunas de ellas serán las que minimicen o maximicen la función objetivo. Esto es fundamental, tanto en la enseñanza de la programación lineal como en el aprendizaje.
			</div>
		</div>
	

		<div class="clearfix"></div>
		<hr style="margin-top:20px; margin-bottom:20px;" class="divider divider-solid">
	
<h2>
		<div id="casos-especiales" data-title="Casos especiales" class="index-title"></div>
	Casos especiales</h2>
<h3>
		<div id="soluciones-optimas-multiples" data-title="Soluciones óptimas múltiples" class="index-title"></div>
	Soluciones óptimas múltiples</h3>
<p>En ocasiones, pueden existir múltiples soluciones que maximizan o minimizan la función objetivo de un modelo de programación lineal, es decir, múltiples soluciones óptimas. La elección de la solución en un contexto de aplicación práctico dependerá tanto de la sensibilidad de las restricciones activas como de los factores propios del sistema que no se consideran en un modelo matemático.</p>

		<div class="box info  ">
			<div class="box-inner-block">
				<span class="fa tie-shortcode-boxicon"></span>En el caso en el que los vectores solución sean consecutivos, esta cantidad de soluciones óptimas puede tender a infinito.
			</div>
		</div>
	
<p>Por ejemplo, supongamos que tenemos el siguiente modelo de programación lineal:</p>
<blockquote class=" quote-simple "><p>La ebanistería «López S.A.S» ha recibido una gran cantidad de partes prefabricadas para la elaboración de mesas, pero no ha podido iniciar un plan de producción enfocado en ellas debido a la alta demanda de sus otros productos. Las mesas que se pueden elaborar con las partes prefabricadas son de dos modelos: A y B. Estas mesas solo requieren ser ensambladas y pintadas.</p>
<p>Esta semana se ha determinado dedicar 10 horas a ensamblar y 8 horas a pintar para elaborar la mayor cantidad de mesas posibles, teniendo en cuenta que cada mesa modelo A requiere 2 horas de ensamble y 1 hora de pintura, mientras que cada mesa modelo B requiere 1 hora de ensamble y 2 horas de pintura. Si el margen de utilidad es de $20000 por cada mesa modelo A y $10000 por cada mesa modelo B, determine el modelo de producción adecuado para esta semana.</p></blockquote>
<p><em><strong>Variables</strong></em></p>
<p>x = Mesas modelo A a fabricar esta semana</p>
<p>y = Mesas modelo B a fabricar esta semana</p>
<p><em><strong>Restricciones</strong></em></p>
<p>2x + y &lt;= 10        «Horas de ensamble»</p>
<p>x + 2y &lt;= 8          «Horas de pintura»</p>
<p>x &gt;= 0                  «No negatividad»</p>
<p>y &gt;= 0                  «No negatividad»</p>
<p><em><strong>Función objetivo</strong></em></p>
<p>Zmax = 20000x + 10000y</p>
<p><em><strong>Solución gráfica:</strong></em></p>
<p><iframe loading="lazy" width="800" height="600" style="border: 1px solid #e4e4e4; border-radius: 4px;" src="https://www.geogebra.org/graphing/b9squs3s?embed" allowfullscreen="allowfullscreen" frameborder="0"></iframe></p>
<p>Como se puede observar, la región factible tiene dos vértices que maximizan la función Z: <strong>C</strong>(4,2) y <strong>D</strong>(6,0). Ambas soluciones son óptimas, ya que maximizan la función Z dentro de las restricciones del modelo. En este caso, la elección de la solución dependerá de factores propios del sistema que no se consideran en el modelo matemático, como por ejemplo la disponibilidad de recursos o el costo de producción; del mismo modo, sería conveniente evaluar la sensibilidad de las restricciones activas en cada vértice.</p>
<table style="border-collapse: collapse; width: 100%; height: 111px;">
<tbody>
<tr style="height: 37px;">
<td style="width: 33.3333%; height: 37px; background-color: #487acf;"><span style="color: #ffffff;"><strong>Solución óptimas</strong></span></td>
<td style="width: 21.0833%; text-align: center; height: 37px; background-color: #487acf;"><span style="color: #ffffff;">20000(<strong>x</strong>)</span></td>
<td style="width: 23.9167%; text-align: center; height: 37px; background-color: #487acf;"><span style="color: #ffffff;">10000(<strong>y</strong>)</span></td>
<td style="width: 21.6667%; text-align: center; height: 37px; background-color: #487acf;"><span style="color: #ffffff;"><strong>Z</strong></span></td>
</tr>
<tr style="height: 37px;">
<td style="width: 33.3333%; height: 37px;">Vértice C</td>
<td style="width: 21.0833%; text-align: center; height: 37px;">20000(<strong>4</strong>)</td>
<td style="width: 23.9167%; text-align: center; height: 37px;">10000(<strong>2</strong>)</td>
<td style="width: 21.6667%; height: 37px; text-align: center;">100000</td>
</tr>
<tr style="height: 37px;">
<td style="width: 33.3333%; height: 37px;">Vértice D</td>
<td style="width: 21.0833%; text-align: center; height: 37px;">20000(<strong>5</strong>)</td>
<td style="width: 23.9167%; text-align: center; height: 37px;">10000(<strong>0</strong>)</td>
<td style="width: 21.6667%; height: 37px; text-align: center;">100000</td>
</tr>
</tbody>
</table>
<p>En este caso se da una condición particular, ya que los vértices son consecutivos. Esto implica que cada punto en el tramo que une a C y a D son soluciones óptimas.</p>
<p>Con la ayuda de GeoGebra, se puede mover la barra de desplazamiento que representa la utilidad y evaluar que la función objetivo alcanza el máximo de 100000 tanto en C como en D, así como en cualquier punto del tramo CD. Esto demuestra que en este caso existen múltiples soluciones óptimas y que cualquier punto en el tramo CD es una solución válida.</p>

		<div class="clearfix"></div>
		<hr style="margin-top:20px; margin-bottom:20px;" class="divider divider-dashed">
	
<h3>
		<div id="solucion-optima-no-acotada" data-title="Solución óptima no acotada" class="index-title"></div>
	Solución óptima no acotada</h3>
<p>Otra de las variantes que presentan los modelos de programación lineal es la solución óptima no acotada, es decir, problemas con infinitas soluciones óptimas. Dada la naturaleza finita de las restricciones en los contextos reales, estos problemas suelen deberse a un mal planteamiento de las restricciones, pero en el mundo académico es común evaluar este tipo de problemas.</p>
<p>Por ejemplo, supongamos que tenemos el siguiente modelo de programación lineal:</p>
<blockquote class=" quote-simple "><p>La compañía comercializadora de bebidas energéticas «WILD» está promocionando dos nuevas bebidas: la tipo A y la tipo B. Dado que se encuentran en promoción, se puede asegurar el cubrimiento de cualquier cantidad de demanda. Sin embargo, la empresa debe tener en cuenta dos políticas:</p>
<p>1. La cantidad de bebidas tipo A que se vendan no puede ser menor que la de tipo B.</p>
<p>2. Se deben vender por lo menos 1500 bebidas de cualquier tipo.</p>
<p>Estas políticas pueden ser representadas mediante restricciones en un modelo de programación lineal, que nos permitirá determinar la cantidad óptima de bebidas tipo A y B a vender en promoción.</p>
<p>El precio de venta de ambas bebidas es de $1800 por unidad</p></blockquote>

		<div class="box warning  ">
			<div class="box-inner-block">
				<span class="fa tie-shortcode-boxicon"></span>Antes de pasar al modelo matemático, es importante evaluar críticamente el problema planteado. El primer supuesto considera la capacidad de atender cualquier demanda, es decir, una demanda infinita. En la realidad, esto implicaría la existencia de recursos de producción infinitos, lo cual es un supuesto poco realista. De hecho, es una apelación al absurdo que se utiliza para definir la gestión de las restricciones en la programación lineal.</p>
<p>Es importante tener en cuenta estos supuestos y ajustar el modelo matemático en consecuencia, para obtener soluciones realistas y viables en un contexto de aplicación práctico.
			</div>
		</div>
	
<p><em><strong>Variables</strong></em></p>
<p>x = Bebidas tipo A a vender en promoción</p>
<p>y = Bebidas tipo B a vender en promoción</p>
<p><em><strong>Restricciones</strong></em></p>
<p>x &gt;= y                     «Políticas de ventas»</p>
<p>x + y &gt;= 1500          «Horas de pintura»</p>
<p>x &gt;= 0                      «No negatividad»</p>
<p>y &gt;= 0                      «No negatividad»</p>
<p><em><strong>Función objetivo</strong></em></p>
<p>Zmax = 1800x + 1800y</p>
<p><em><strong>Solución gráfica:</strong></em></p>
<p><iframe loading="lazy" width="800" height="600" style="border: 1px solid #e4e4e4; border-radius: 4px;" src="https://www.geogebra.org/graphing/r2rkwssf?embed" allowfullscreen="allowfullscreen" frameborder="0"></iframe></p>
<p>Como se puede observar, la región factible no está acotada, lo que significa que el conjunto de posibles soluciones factibles es infinito. En consecuencia, la solución óptima tiende a infinito, lo que hace que el modelo no tenga solución.</p>
<p>En este caso, el problema planteado tiene un mal planteamiento de las restricciones, lo que ha llevado a una solución no acotada. Para solucionar este problema, es necesario ajustar las restricciones del modelo para que la región factible sea acotada y tenga una solución óptima finita.</p>

		<div class="box info  ">
			<div class="box-inner-block">
				<span class="fa tie-shortcode-boxicon"></span>En mi experiencia docente, este es uno de los casos más frecuentes que se dan en el modelamiento por parte de los estudiantes. Es importante que los estudiantes desarrollen habilidades para comprender si las restricciones presentes acotan suficientemente el modelo o no. Esto es fundamental para obtener soluciones realistas y viables en un contexto de aplicación práctico. 
			</div>
		</div>
	

		<div class="clearfix"></div>
		<hr style="margin-top:20px; margin-bottom:20px;" class="divider divider-dashed">
	
<h3>
		<div id="solucion-inviable-o-infactible" data-title="Solución inviable o infactible" class="index-title"></div>
	Solución inviable o infactible</h3>
<p>La solución infactible es un caso común en la programación lineal, y corresponde a aquellos casos en los que no existen soluciones que cumplan con todas las restricciones del modelo. Las restricciones acotan el sistema y establecen límites para alcanzar el objetivo del modelo. Cuando estas restricciones no se pueden cumplir en su totalidad, la solución es infactible.</p>
<p>En contexto de aplicación práctica, este caso es más común de lo que parece, y se da en escenarios en los que se plantean proporciones de oferta y demanda inviables en el modelo.</p>

		<div class="box info  ">
			<div class="box-inner-block">
				<span class="fa tie-shortcode-boxicon"></span><span>En mi experiencia, el síndrome del trabajador quemado es una de las principales consecuencias de una mala gestión de recursos en un plan de trabajo (un típico escenario de soluciones no acotadas en un contexto real). Cuando un trabajador se encuentra a cargo de cumplir con un plan que no cuenta con los recursos necesarios, se ve obligado a realizar un esfuerzo excesivo para lograr cumplir con las metas establecidas, lo que puede llevar a un agotamiento laboral y una disminución en su rendimiento y calidad de vida.</span>
			</div>
		</div>
	
<p>Por ejemplo, supongamos que tenemos el siguiente modelo de programación lineal:</p>
<blockquote class=" quote-simple "><p>La compañía de galletas «CAROLA» desea planificar la producción de galletas que deberá entregar a su cliente en dos semanas. Según el contrato, la empresa se compromete a entregar al menos 300 cajas de galletas, cualquiera sea su tipo (presentación D, presentación N o una combinación de ambas).</p>
<p>La producción de cada caja de galletas presentación D requiere 2 horas de elaboración y 3 horas de horneado, mientras que la producción de cada caja de presentación N requiere 3 horas de elaboración y 1 hora de horneado. La empresa cuenta con 550 horas para elaboración y 480 horas de horneado en las próximas dos semanas.</p>
<p>El margen de utilidad de cada caja de galletas presentación D es de $8500, y el margen de utilidad de cada caja de presentación N es de $8100. Para maximizar las utilidades, la empresa debe utilizar un modelo de programación lineal que le permita determinar el plan de producción adecuado.</p></blockquote>
<p><em><strong>Variables</strong></em></p>
<p>x = Cajas de galletas de presentación D a producir en dos semanas</p>
<p>y = Cajas de galletas de presentación N a producir en dos semanas</p>
<p><em><strong>Restricciones</strong></em></p>
<p>2x + 3y &lt;= 550               «Horas de elaboración»</p>
<p>3x + y &lt;= 480                 «Horas de horneado»</p>
<p>x + y &gt;= 300                   «Demanda según el contrato»</p>
<p>x &gt;= 0                             «No negatividad»</p>
<p>y &gt;= 0                             «No negatividad»</p>
<p><em><strong>Función objetivo</strong></em></p>
<p>Zmax = 8500x + 8100y</p>
<p><em><strong>Solución gráfica:</strong></em></p>
<p><iframe loading="lazy" width="800" height="600" style="border: 1px solid #e4e4e4; border-radius: 4px;" src="https://www.geogebra.org/graphing/bk7tfxmp?embed" allowfullscreen="allowfullscreen" frameborder="0"></iframe></p>
<p>La gráfica muestra el área sombreada que se delimita a partir de la representación de las restricciones que corresponden a los recursos de producción. Se puede apreciar cómo no existe una intersección entre las restricciones de capacidad y la restricción de demanda (sombreada de azul), lo que indica que no existen soluciones que cumplan con todas las restricciones del modelo. En este caso, se trata de una solución infactible.</p>

		<div class="clearfix"></div>
		<hr style="margin-top:20px; margin-bottom:20px;" class="divider divider-dashed">
	
<h3>
		<div id="restricciones-redundantes" data-title="Restricciones redundantes" class="index-title"></div>
	Restricciones redundantes</h3>
<p>Existen en los modelos de programación lineal un tipo de restricciones que no tienen ningún efecto en la determinación del conjunto solución (ni en la solución óptima). Estas restricciones se conocen como redundantes, ya que no afectan la solución del modelo.</p>
<p>En algunos casos, las restricciones redundantes pueden ser útiles para el análisis de sensibilidad, ya que nos permiten evaluar cómo cambia la solución óptima ante cambios en los valores de las restricciones. En lugar de eliminar estas restricciones, se pueden dejar en el modelo y marcar como inactivas. De esta manera, no afectan la solución óptima del modelo, pero se pueden utilizar para el análisis de sensibilidad.</p>

		<div class="box error  ">
			<div class="box-inner-block">
				<span class="fa tie-shortcode-boxicon"></span><span>Es importante tener en cuenta que, aunque algunos autores recomiendan eliminar las restricciones redundantes para mejorar la precisión del modelo, esta práctica no siempre es recomendable, de hecho, definitivamente desaconsejo esta práctica. </span></p>
<p><span>En contextos de aplicación real, el profesional debe gestionar las restricciones del sistema, lo que implica que la restricción activa puede cambiar con el tiempo y las acciones tomadas (la restricción de un sistema se mueve, las restricciones se activan ante cambios en los parámetros). Por lo tanto, es importante considerar todas las restricciones del modelo y utilizarlas en el análisis de sensibilidad. </span>
			</div>
		</div>
	
<p>Por ejemplo, supongamos que tenemos el siguiente modelo de programación lineal:</p>
<blockquote class=" quote-simple "><p>La compañía «CONGELADORES MAJO» se encuentra en la necesidad de planificar su producción semanal de congeladores tipo A y B. Cada uno de ellos requiere pasar por tres operaciones: Ensamblaje, pintura y control de calidad. Los congeladores tipo A requieren 2 horas de ensamblaje, 3 kg de pintura y 4 horas de control de calidad; los congeladores tipo B requieren 3 horas de ensamblaje, 6 kg de pintura y 5 horas de control de calidad. La compañía cuenta con un margen contributivo de $102000 y $98000 por cada congelador tipo A y B respectivamente. La disponibilidad semanal de recursos se encuentra limitada a 300 horas de ensamblaje, 840 kg de pintura y 450 horas de control de calidad. A partir de esta información, se debe determinar la cantidad de unidades a producir semanalmente de cada referencia, con el fin de maximizar las utilidades.</p></blockquote>
<p><em><strong>Variables</strong></em></p>
<p>x = Congeladores tipo A a producir semanalmente</p>
<p>y = Congeladores tipo B a producir semanalmente</p>
<p><em><strong>Restricciones</strong></em></p>
<p>2x + 3y &lt;= 300               «Horas de ensamblaje»</p>
<p>3x + 5y &lt;= 840                «Kg de pintura»</p>
<p>4x + 5y &lt;= 450                «Horas de control de calidad»</p>
<p>x &gt;= 0                             «No negatividad»</p>
<p>y &gt;= 0                             «No negatividad»</p>
<p><em><strong>Función objetivo</strong></em></p>
<p>Zmax = 102000x + 98000y</p>
<p><em><strong>Solución gráfica:</strong></em></p>
<p><iframe loading="lazy" width="800" height="600" style="border: 1px solid #e4e4e4; border-radius: 4px;" src="https://www.geogebra.org/graphing/guesnehs?embed" allowfullscreen="allowfullscreen" frameborder="0"></iframe></p>
<p>La gráfica muestra cómo las restricciones 1 y 2 (Horas de ensamblaje y Kg de pintura) no determinan el conjunto solución. La solución se encuentra en el vértice C(112.5, 0), con una utilidad de $11475000.</p>
<p>Sin embargo, denominar las restricciones que no determinan el área de factibilidad ni el punto óptimo, como redundantes o sobrantes (o excluirlas del modelo), quizá no sea la manera correcta; preferiblemente denominar estas restricciones como inactivas. Supongamos que nos encontramos en un escenario en el cual evaluamos la posibilidad de aumentar la capacidad de la restricción 3 (horas de control de calidad); es fundamental reconocer los límites en los cuales dicho incremento de capacidad activaría las restricciones 1 y 2.</p>

		<div class="clearfix"></div>
		<hr style="margin-top:20px; margin-bottom:20px;" class="divider divider-solid">
	
<p>En resumen, los casos especiales en programación lineal pueden darse por una mala formulación de las restricciones, la presencia de soluciones infactibles o infinitas. Es importante considerar siempre todas las restricciones del modelo y utilizar el análisis de sensibilidad para evaluar su efecto en la solución óptima.</p>
<p><em><strong>¡Si te ha gustado este artículo sobre casos especiales en programación lineal, ¡compartelo con tus contactos!</strong></em></p>

		<div class="box info  ">
			<div class="box-inner-block">
				<span class="fa tie-shortcode-boxicon"></span>Recomendamos que lean: <a href="https://ingenieriaindustrialonline.com/investigacion-de-operaciones/metodo-grafico-de-la-programacion-lineal-mediante-el-uso-de-python/"><strong>Método gráfico mediante Python</strong></a>
			</div>
		</div>
	
<p>La entrada <a href="https://ingenieriaindustrialonline.com/investigacion-de-operaciones/casos-especiales-de-programacion-lineal-metodo-grafico/">Casos especiales de programación lineal (Método Gráfico)</a> se publicó primero en <a href="https://ingenieriaindustrialonline.com">Ingenieria Industrial Online</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ingenieriaindustrialonline.com/investigacion-de-operaciones/casos-especiales-de-programacion-lineal-metodo-grafico/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Análisis de sensibilidad gráfica mediante el uso de Python (Caso 1)</title>
		<link>https://ingenieriaindustrialonline.com/investigacion-de-operaciones/analisis-de-sensibilidad-grafica-mediante-el-uso-de-python-caso-1/</link>
					<comments>https://ingenieriaindustrialonline.com/investigacion-de-operaciones/analisis-de-sensibilidad-grafica-mediante-el-uso-de-python-caso-1/#respond</comments>
		
		<dc:creator><![CDATA[Bryan Salazar López]]></dc:creator>
		<pubDate>Sun, 18 Jul 2021 18:57:10 +0000</pubDate>
				<category><![CDATA[Investigación de operaciones]]></category>
		<category><![CDATA[Análisis de sensibilidad]]></category>
		<category><![CDATA[Intervalos de factibilidad]]></category>
		<category><![CDATA[Investigación de Operaciones]]></category>
		<category><![CDATA[Método gráfico]]></category>
		<category><![CDATA[Optimización]]></category>
		<category><![CDATA[Precio dual]]></category>
		<category><![CDATA[Precio sombra]]></category>
		<category><![CDATA[Programación lineal]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Solución gráfica]]></category>
		<guid isPermaLink="false">https://ingenieriaindustrialonline.com/?p=26239</guid>

					<description><![CDATA[<p>¿Qué es el análisis de sensibilidad en programación lineal? Quienes se adentren en los conceptos de la investigación de operaciones, propiamente en los conceptos de la programación lineal, deben considerar que existe algo más allá de la solución óptima. En investigación de operaciones, la solución de un modelo matemático establece una base para la toma &#8230;</p>
<p>La entrada <a href="https://ingenieriaindustrialonline.com/investigacion-de-operaciones/analisis-de-sensibilidad-grafica-mediante-el-uso-de-python-caso-1/">Análisis de sensibilidad gráfica mediante el uso de Python (Caso 1)</a> se publicó primero en <a href="https://ingenieriaindustrialonline.com">Ingenieria Industrial Online</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>¿Qué es el análisis de sensibilidad en programación lineal?</h2>

		<div id="que-es-el-analisis-de-sensibilidad-en-programacion-lineal" data-title="¿Qué es el análisis de sensibilidad en programación lineal?" class="index-title"></div>
	
<p>Quienes se adentren en los conceptos de la investigación de operaciones, propiamente en los conceptos de la <a href="https://ingenieriaindustrialonline.com/investigacion-de-operaciones/programacion-lineal/"><em><strong>programación lineal</strong></em></a>, deben considerar que existe algo más allá de la solución óptima. En investigación de operaciones, la solución de un modelo matemático establece una base para la toma de decisiones; sin embargo, puede considerarse como esencial el <strong>análisis de los resultados obtenidos</strong>.</p>
<p><img decoding="async" src="https://ingenieriaindustrialonline.com/wp-content/uploads/2021/07/modelamiento.png" alt="modelamiento" width="565" height="61" class="aligncenter wp-image-26253 size-full" srcset="https://ingenieriaindustrialonline.com/wp-content/uploads/2021/07/modelamiento.png 565w, https://ingenieriaindustrialonline.com/wp-content/uploads/2021/07/modelamiento-300x32.png 300w" sizes="(max-width: 565px) 100vw, 565px" /></p>
<p>Los resultados de un modelo de programación lineal pueden ofrecer mucha información adicional, <em>inputs </em>del análisis de resultados. Existen a grandes rasgos, dos tipos de análisis complementarios en PL:</p>

		<div class="checklist tie-list-shortcode">
<ul>
<li><strong>Análisis de sensibilidad</strong>: El cual determina las condiciones que mantendrán la solución actual sin cambios.</li>
<li><strong>Análisis postóptimo</strong>: El cual determina la nueva solución óptima cuando cambian los datos del modelo</li>
</ul>

		</div>
	
<p>En este artículo abordaremos el <strong>análisis de sensibilidad</strong>.</p>
<p>El análisis de sensibilidad en programación lineal corresponde al examen detallado de los límites dentro de los cuales los parámetros del modelo (recursos, utilidad o costo), pueden cambiar sin que esto afecte a la solución óptima y a la capacidad de calcular el impacto que tienen dichos cambios sobre la misma. Es decir, a partir de los resultados obtenidos de un modelo, podemos establecer una solución óptima y tenemos un rango en el cual podemos medir el impacto de los cambios en la disponibilidad de los recursos y los cambios en los coeficientes de la función objetivo. El análisis de dichas variaciones y el cálculo de los límites dentro de los cuales estas son válidas, es lo que se conoce como análisis de sensibilidad. Todo el análisis que se encuentre fuera de ese rango requeriría recalcular el modelo.</p>
<p>Como tal, constituye una herramienta importante en el análisis de los resultados obtenidos, sobre todo, en dos casos en particular:</p>
<ol>
<li><strong>La sensibilidad de la solución óptima ante los cambios de la disponibilidad de los recursos (lado derecho de las restricciones)</strong>. Es decir, cuáles serían los límites dentro de los cuáles los resultados del modelo me permiten calcular el impacto que tiene sobre la solución óptima, el aumento o la disminución de la disponibilidad de un recurso.</li>
<li><strong>La sensibilidad de la solución óptima ante los cambios en la utilidad unitaria o el costo unitario (coeficientes de las variables de la función objetivo)</strong>. Es decir, cuáles serían los límites dentro de los cuáles los resultados del modelo me permiten calcular el impacto que tiene sobre la solución óptima, el aumento o la disminución de la utilidad unitaria o el costo unitario asociada a las variables que forman parte de la función objetivo.</li>
</ol>
<h3>Análisis de sensibilidad gráfica, caso 1: Cambios en el lado derecho (Disponibilidad de recursos)</h3>

		<div id="analisis-de-sensibilidad-grafica-caso-1-cambios-en-el-lado-derecho" data-title="Análisis de sensibilidad gráfica, caso 1: Cambios en el lado derecho" class="index-title"></div>
	
<p>Con el propósito de evaluar los resultados obtenidos a través del tratamiento de un problema técnicamente formulado y abordado, utilizaremos un caso descrito en el libro Investigación de Operaciones (9na edición), de Hamdy A. Taha (University of Arkansas, Fayetteville), (Ejemplo 3.6-1):</p>
<blockquote class=" quote-simple "><p>JOBCO fabrica dos productos en dos máquinas. Una unidad del producto 1 requiere 2 horas en la máquina 1, y 1 hora en la máquina 2. Una unidad del producto 2 requiere 1 hora en la máquina 1, y 3 horas en la máquina 2. Los ingresos por unidad de los productos 1 y 2 son de $30 y $20, respectivamente. El tiempo de procesamiento diario total disponible en cada máquina es de 8 horas.</p></blockquote>
<p>Si <em><strong>x1</strong></em> y <em><strong>x2</strong></em> son las cantidades diarias de productos 1 y 2, respectivamente, el modelo se da como:</p>
<p style="text-align: center;"><strong>Zmax</strong> = 30<strong>x1</strong> + 20<strong>x2</strong></p>
<p>Sujeto a:</p>
<p style="text-align: center;">2<strong>x1</strong> + <strong>x2</strong> &lt;= 8 (Máquina 1)</p>
<p style="text-align: center;"><strong>x1</strong> + 3<strong>x2</strong> &lt;= 8 (Máquina 2)</p>
<p style="text-align: center;"><strong>x1</strong>, <strong>x2</strong> &gt;= 0 (No negatividad)</p>
<p>La forma en la que abordamos la <a href="https://ingenieriaindustrialonline.com/investigacion-de-operaciones/metodo-grafico-de-la-programacion-lineal-mediante-el-uso-de-python/"><strong>solución gráfica de un modelo de programación lineal mediante <em>Python</em></strong></a>, está ampliamente documentada. El código en <em>Python </em>que resuelve mediante método gráfico el problema anterior, lo presentamos a continuación:</p>
<hr />
<div class="hcb_wrap">
<pre class="prism line-numbers lang-python" data-lang="Python"><code># Caso JOBCO: Investigación de Operaciones (9na edición), de Hamdy A. Taha 
# (University of Arkansas, Fayetteville), (Ejemplo 3.6-1)
# Autor del código en Python: Bryan Salazar López, Ing. M.Sc. (2021)

#Librerías necesarias
import matplotlib.pyplot as plt
import numpy as np
from shapely.geometry import LineString

#Ecuaciones e intervalos (Para tabular)
x = np.arange(-20, 20, 5)
y = np.arange(-20, 20, 5)
y1 = 8 - (2 * x)
y2 = (8 - x) / 3
y3 = 0 * x
x1 = 0 * y
z = (-30 * x) / 20

#Identificadores para las líneas
primera_linea = LineString(np.column_stack((x, y1)))
segunda_linea = LineString(np.column_stack((x, y2)))
tercera_linea = LineString(np.column_stack((x, y3)))
cuarta_linea = LineString(np.column_stack((x1, y)))
quinta_linea = LineString(np.column_stack((x, z)))

#Graficando las líneas
plt.plot(x, y1, '-', linewidth=2, color='b')
plt.plot(x, y2, '-', linewidth=2, color='g')
plt.plot(x, y3, '-', linewidth=2, color='r')
plt.plot(x1, y, '-', linewidth=2, color='y')
plt.plot(x, z, ':', linewidth=1, color='k')


#Generando las intersecciones (vértices)
primera_interseccion = cuarta_linea.intersection(segunda_linea)
segunda_interseccion = primera_linea.intersection(segunda_linea)
tercera_interseccion = primera_linea.intersection(tercera_linea)
cuarta_interseccion = tercera_linea.intersection(cuarta_linea)
quinta_interseccion = cuarta_linea.intersection(primera_linea)
sexta_interseccion = segunda_linea.intersection(tercera_linea)

#Graficando los vértices
plt.plot(*primera_interseccion.xy, 'o', color='k')
plt.plot(*segunda_interseccion.xy, 'o', color='k')
plt.plot(*tercera_interseccion.xy, 'o', color='k')
plt.plot(*cuarta_interseccion.xy, 'o', color='k')
plt.plot(*quinta_interseccion.xy, 'o', color='silver')
plt.plot(*sexta_interseccion.xy, 'o', color='silver')

#Identificando los valores de las coordenadas x y y de cada vértice
xi1m, yi1m = primera_interseccion.xy
xi2m, yi2m = segunda_interseccion.xy
xi3m, yi3m = tercera_interseccion.xy
xi4m, yi4m = cuarta_interseccion.xy
xi5m, yi5m = quinta_interseccion.xy
xi6m, yi6m = sexta_interseccion.xy

#Cambiamos el formato de matriz a float
xi1 = np.float64(np.array(xi1m))
xi2 = np.float64(np.array(xi2m))
xi3 = np.float64(np.array(xi3m))
xi4 = np.float64(np.array(xi4m))
xi5 = np.float64(np.array(xi5m))
xi6 = np.float64(np.array(xi6m))
yi1 = np.float64(np.array(yi1m))
yi2 = np.float64(np.array(yi2m))
yi3 = np.float64(np.array(yi3m))
yi4 = np.float64(np.array(yi4m))
yi5 = np.float64(np.array(yi5m))
yi6 = np.float64(np.array(yi6m))

#literales de las intersecciones (nombres en el gráfico)
plt.annotate(' A', (xi4, yi4))
plt.annotate(' B', (xi1, yi1))
plt.annotate(' C', (xi2, yi2))
plt.annotate(' D', (xi3, yi3))
plt.annotate(' E', (xi5, yi5))
plt.annotate(' F', (xi6, yi6))

#Evaluando la función objetivo en cada vértice
FOi1 = (xi1 * 30) + (yi1 * 20)
FOi2 = (xi2 * 30) + (yi2 * 20)
FOi3 = (xi3 * 30) + (yi3 * 20)
FOi4 = (xi4 * 30) + (yi4 * 20)

#Calculando el mejor resultado (Maximizar)
ZMAX = max(FOi1, FOi2, FOi3, FOi4)

#Imprimiendo la solución óptima en la consola
print('\n SOLUCIÓN ÓPTIMA')
print('Solución óptima: {} '.format(ZMAX))

#Ordenando las coordenadas de los vértices (Las coordenadas x en m y las coordenadas y en n)
m = [xi1, xi2, xi3, xi4]
n = [yi1, yi2, yi3, yi4]

#Graficando el polígono solución a partir de las coordenadas de los vértices (importante el orden según las manecillas)
plt.fill(m, n, color='silver')

#Identificando el índice del vértice de la mejor solución
dict1 = {0:FOi1, 1:FOi2, 2:FOi3, 3:FOi4}
posicion = max(dict1, key=dict1.get)

#Obteniendo las coordenadas del vértice de la mejor solución de acuerdo al índice del paso anterior
XMAX = m[posicion]
YMAX = n[posicion]

#Imprimiendo las coordenadas del vértice de la mejor solución (variables de decisión)
print('\n VARIABLES DE DECISIÓN')
print('Cantidad de producto X1 a producir: {} unidades'.format(XMAX))
print('Cantidad de producto X2 a producir: {} unidades'.format(YMAX))

#Configuraciones adicionales del gráfico
plt.grid()
plt.xlabel('X1')
plt.ylabel('X2')
plt.title('JOBCO')

plt.show()
</code></pre>
</div>
<p>Al ejecutar este código, de acuerdo a las instrucciones que pueden encontrar en el artículo de<a href="https://ingenieriaindustrialonline.com/investigacion-de-operaciones/metodo-grafico-de-la-programacion-lineal-mediante-el-uso-de-python/"><strong> introducción al método gráfico mediante Python</strong></a>, obtendrán:</p>
<figure id="attachment_26264" aria-describedby="caption-attachment-26264" style="width: 640px" class="wp-caption aligncenter"><a href="https://ingenieriaindustrialonline.com/wp-content/uploads/2021/07/jobco_metodo_grafico.webp"><img decoding="async" src="https://ingenieriaindustrialonline.com/wp-content/uploads/2021/07/jobco_metodo_grafico.webp" alt="jobco_metodo_grafico" width="640" height="480" class="wp-image-26264 size-full" srcset="https://ingenieriaindustrialonline.com/wp-content/uploads/2021/07/jobco_metodo_grafico.webp 640w, https://ingenieriaindustrialonline.com/wp-content/uploads/2021/07/jobco_metodo_grafico-300x225.webp 300w" sizes="(max-width: 640px) 100vw, 640px" /></a><figcaption id="caption-attachment-26264" class="wp-caption-text">Figura 2: Solución gráfica del caso JOBCO obtenida mediante Python</figcaption></figure>
<p>Así mismo, el siguiente resultado en la consola:</p>
<figure id="attachment_26265" aria-describedby="caption-attachment-26265" style="width: 593px" class="wp-caption aligncenter"><img decoding="async" src="https://ingenieriaindustrialonline.com/wp-content/uploads/2021/07/jobco_solucion_optima.png" alt="jobco_solucion_optima" width="593" height="213" class="wp-image-26265 size-full" srcset="https://ingenieriaindustrialonline.com/wp-content/uploads/2021/07/jobco_solucion_optima.png 593w, https://ingenieriaindustrialonline.com/wp-content/uploads/2021/07/jobco_solucion_optima-300x108.png 300w" sizes="(max-width: 593px) 100vw, 593px" /><figcaption id="caption-attachment-26265" class="wp-caption-text">Figura 3: Resultados del caso JOBCO en la consola de Windows (Solución óptima)</figcaption></figure>
<p>&nbsp;</p>
<p>Así entonces, tenemos establecido el código base sobre el cual abordaremos este primer caso de <em>análisis de sensibilidad: cambios en el lado derecho (disponibilidad de recursos)</em>.</p>
<p>La pregunta que pretende responder este caso de análisis de sensibilidad es <em>¿Qué pasaría con la función objetivo si cambia la disponibilidad de alguno de los recursos del problema?</em> El cual corresponde a un planteamiento muy lógico de análisis, puesto que nos ampliaría la información relevante para la toma de decisiones.</p>
<p>Acercando este interrogante a nuestro problema de ejemplo, la cuestión podría ser: <em>¿Qué pasaría con los ingresos totales si la máquina 1 cambia su capacidad?</em></p>
<p>Pensemos por un momento cómo podemos abordar este planteamiento de manera gráfica, pensemos por un momento cómo podemos utilizar nuestro código base para abordar este caso.</p>
<p>Y bien, se nos puede ocurrir en primer lugar, graficar la nueva línea que represente la nueva función de disponibilidad de la máquina 1. Recordemos que si la restricción base es la siguiente:</p>
<p style="text-align: center;">2<strong>x1</strong> + <strong>x2</strong> &lt;= 8 (Máquina 1)</p>
<p>Un incremento en la capacidad (variación), por ejemplo, se representaría mediante la siguiente inecuación:</p>
<p style="text-align: center;">2<strong>x1</strong> + <strong>x2</strong> &lt;= 8 + 1</p>
<p>Esto quiere decir que, la nueva disponibilidad de la <em><strong>máquina 1</strong></em> pasará de 8 horas a 9 horas. Y nuestro razonamiento nos indica que esta función, tendrá una representación distinta a la anterior, por ende sería de mucha utilidad graficarla. Veamos el código para adicionar en Python:</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-python" data-lang="Python"><code>#Ecuaciones e intervalos (Para tabular)
x = np.arange(-20, 20, 5)
y = np.arange(-20, 20, 5)
y1 = 8 - (2 * x)
y2 = (8 - x) / 3
y3 = 0 * x
x1 = 0 * y
z = (-30 * x) / 20
y1v = (8 + 1) - (2 * x) #Variación en la máquina 1 (8 + 1)

#Identificadores para las líneas
primera_linea = LineString(np.column_stack((x, y1)))
segunda_linea = LineString(np.column_stack((x, y2)))
tercera_linea = LineString(np.column_stack((x, y3)))
cuarta_linea = LineString(np.column_stack((x1, y)))
quinta_linea = LineString(np.column_stack((x, z)))
sexta_linea = LineString(np.column_stack((x, y1v))) #Nueva línea

#Graficando las líneas
plt.plot(x, y1, '-', linewidth=2, color='b')
plt.plot(x, y2, '-', linewidth=2, color='g')
plt.plot(x, y3, '-', linewidth=2, color='r')
plt.plot(x1, y, '-', linewidth=2, color='y')
#plt.plot(x, z, ':', linewidth=1, color='k') #Podemos ocultar esta línea (FO)
plt.plot(x, y1v, ':', linewidth=1, color='b') #Nueva línea
</code></pre>
</div>
<p>Podemos observar cómo agregamos tan solo 3 líneas de código, mediante la inclusión de la variable <em><strong>y1v </strong></em>(variación de la ecuación de la máquina 1).</p>
<p>La ecuación con la cual se representa la restricción de la máquina 1 corresponde a la siguiente:</p>
<p style="text-align: center;"><strong>y1</strong> = 8 &#8211; (2 * <strong>x</strong>)</p>
<p>Por ende, lo que hacemos es aumentar la capacidad de la máquina 1 (8) a una nueva capacidad (9 = 8 + 1):</p>
<p style="text-align: center;"><strong>y1v</strong> = (8 + 1) &#8211; (2 * <strong>x</strong>)</p>
<p>Las dos líneas de código adicionales graficarán esta nueva ecuación.</p>
<p>Al ejecutar nuestro código tendremos:</p>
<figure id="attachment_26266" aria-describedby="caption-attachment-26266" style="width: 640px" class="wp-caption aligncenter"><img decoding="async" src="https://ingenieriaindustrialonline.com/wp-content/uploads/2021/07/jobco_analisis_sensibilidad.png" alt="jobco_analisis_sensibilidad" width="640" height="480" class="wp-image-26266 size-full" srcset="https://ingenieriaindustrialonline.com/wp-content/uploads/2021/07/jobco_analisis_sensibilidad.png 640w, https://ingenieriaindustrialonline.com/wp-content/uploads/2021/07/jobco_analisis_sensibilidad-300x225.png 300w" sizes="(max-width: 640px) 100vw, 640px" /><figcaption id="caption-attachment-26266" class="wp-caption-text">Figura 3: Representación gráfica de un cambio en la disponibilidad del recurso 1</figcaption></figure>
<p>En este caso, podemos observar cómo una variación en la disponibilidad del recurso 1 (máquina 1), se representa con una línea recta (línea azul punteada) que conserva la misma pendiente de la restricción 1 (línea azul continua), que se mueve paralela a ella, y que en consecuencia, genera una nueva intersección solución (intersección con la restricción 2 &#8211; línea verde).</p>
<p>En este nuevo vértice solución se encuentra un nuevo punto óptimo, es decir, una coordenada diferente en la cual al evaluar la función objetivo, tendremos la respuesta al interrogante planteado: <em>¿Qué pasaría con los ingresos totales si la máquina 1 cambia su capacidad?</em></p>
<p>En consecuencia, utilizaremos nuestro código para:</p>

		<div class="checklist tie-list-shortcode">
<ul>
<li>Establecer gráficamente el nuevo vértice</li>
<li>Nombrarlo gráficamente (Vértice <em>G</em>)</li>
<li>Determinar las coordenadas de este vértice (<em>G</em>)</li>
<li>Evaluar la función objetivo en este nuevo vértice (<em>G</em>)</li>
</ul>

		</div>
	
<p>El siguiente fragmento muestra detalladamente las adiciones al código base:</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-python" data-lang="Python"><code>#Generando las intersecciones (vértices)
primera_interseccion = cuarta_linea.intersection(segunda_linea)
segunda_interseccion = primera_linea.intersection(segunda_linea)
tercera_interseccion = primera_linea.intersection(tercera_linea)
cuarta_interseccion = tercera_linea.intersection(cuarta_linea)
quinta_interseccion = cuarta_linea.intersection(primera_linea)
sexta_interseccion = segunda_linea.intersection(tercera_linea)
septima_interseccion = sexta_linea.intersection(segunda_linea) #Nuevo vértice

#Graficando los vértices
plt.plot(*primera_interseccion.xy, 'o', color='k')
plt.plot(*segunda_interseccion.xy, 'o', color='k')
plt.plot(*tercera_interseccion.xy, 'o', color='k')
plt.plot(*cuarta_interseccion.xy, 'o', color='k')
plt.plot(*quinta_interseccion.xy, 'o', color='silver')
plt.plot(*sexta_interseccion.xy, 'o', color='silver')
plt.plot(*septima_interseccion.xy, 'o', color='k') #Graficar nuevo vértice

#Identificando los valores de las coordenadas x y y de cada vértice
xi1m, yi1m = primera_interseccion.xy
xi2m, yi2m = segunda_interseccion.xy
xi3m, yi3m = tercera_interseccion.xy
xi4m, yi4m = cuarta_interseccion.xy
xi5m, yi5m = quinta_interseccion.xy
xi6m, yi6m = sexta_interseccion.xy
xi7m, yi7m = septima_interseccion.xy #Coordenadas del nuevo vértice

#Cambiamos el formato de matriz a float
xi1 = np.float64(np.array(xi1m))
xi2 = np.float64(np.array(xi2m))
xi3 = np.float64(np.array(xi3m))
xi4 = np.float64(np.array(xi4m))
xi5 = np.float64(np.array(xi5m))
xi6 = np.float64(np.array(xi6m))
xi7 = np.float64(np.array(xi7m)) #Nueva coordenada en x
yi1 = np.float64(np.array(yi1m))
yi2 = np.float64(np.array(yi2m))
yi3 = np.float64(np.array(yi3m))
yi4 = np.float64(np.array(yi4m))
yi5 = np.float64(np.array(yi5m))
yi6 = np.float64(np.array(yi6m))
yi7 = np.float64(np.array(yi7m)) #Nueva coordenada en y

#literales de las intersecciones (nombres en el gráfico)
plt.annotate(' A', (xi4, yi4))
plt.annotate(' B', (xi1, yi1))
plt.annotate(' C', (xi2, yi2))
plt.annotate(' D', (xi3, yi3))
plt.annotate(' E', (xi5, yi5))
plt.annotate(' F', (xi6, yi6)) 
plt.annotate(' G', (xi7, yi7)) #Nombrar el nuevo vértice como G

#Evaluando la función objetivo en cada vértice
FOi1 = (xi1 * 30) + (yi1 * 20)
FOi2 = (xi2 * 30) + (yi2 * 20)
FOi3 = (xi3 * 30) + (yi3 * 20)
FOi4 = (xi4 * 30) + (yi4 * 20)
FOi4 = (xi7 * 30) + (yi7 * 20) #Calcular la FO en el nuevo vértice

#Imprimiendo la solución óptima en la consola
print('\n SOLUCIÓN ÓPTIMA')
print('Solución óptima: {} '.format(ZMAX))
print('Función objetivo en punto G: {} '.format(FOi7)) #Mostrar la FO en el punto G
</code></pre>
</div>
<p>Lo que realizamos es muy sencillo, es decir, ya que tenemos una nueva línea, realizamos los mismos procedimientos para identificar y graficar el nuevo vértice generado. Al ejecutar el código obtendremos lo siguiente:</p>
<figure id="attachment_26267" aria-describedby="caption-attachment-26267" style="width: 640px" class="wp-caption aligncenter"><img decoding="async" src="https://ingenieriaindustrialonline.com/wp-content/uploads/2021/07/jobco_analisis_sensibilidad1.png" alt="jobco_analisis_sensibilidad1" width="640" height="480" class="wp-image-26267 size-full" srcset="https://ingenieriaindustrialonline.com/wp-content/uploads/2021/07/jobco_analisis_sensibilidad1.png 640w, https://ingenieriaindustrialonline.com/wp-content/uploads/2021/07/jobco_analisis_sensibilidad1-300x225.png 300w" sizes="(max-width: 640px) 100vw, 640px" /><figcaption id="caption-attachment-26267" class="wp-caption-text">Figura 4: Representación gráfica de un cambio en la disponibilidad del recurso 1 (Nuevo vértice)</figcaption></figure>
<p>&nbsp;</p>
<figure id="attachment_26268" aria-describedby="caption-attachment-26268" style="width: 597px" class="wp-caption aligncenter"><img decoding="async" src="https://ingenieriaindustrialonline.com/wp-content/uploads/2021/07/jobco_solucion_sensibilidad.png" alt="jobco_solucion_sensibilidad" width="597" height="226" class="wp-image-26268 size-full" srcset="https://ingenieriaindustrialonline.com/wp-content/uploads/2021/07/jobco_solucion_sensibilidad.png 597w, https://ingenieriaindustrialonline.com/wp-content/uploads/2021/07/jobco_solucion_sensibilidad-300x114.png 300w" sizes="(max-width: 597px) 100vw, 597px" /><figcaption id="caption-attachment-26268" class="wp-caption-text">Figura 5: Resultados del caso JOBCO en la consola de Windows (Función objetivo en punto G)</figcaption></figure>
<p>&nbsp;</p>
<p>La <em>figura 5</em> ilustra el cambio de la solución óptima cuando se cambia la capacidad de la máquina 1. Si la capacidad diaria se incrementa de 8 a 9 horas, el nuevo óptimo se moverá al punto <strong><em>G</em></strong>. Los resultados que se pueden apreciar en la consola, nos permiten conocer que el valor de la función objetivo evaluada en el punto <em><strong>G </strong>(<strong>z</strong> en <strong>G</strong>)</em> equivale a 142,0. Es decir, un valor superior a 128,0 (<em><strong>z</strong></em> en <em><strong>C</strong></em>).</p>
<p>Con los datos obtenidos podemos establecer en este caso la tasa de cambio en la función objetivo a consecuencia del cambio de la capacidad de la máquina 1 de 8 a 9 horas. Esta tasa de cambio se denomina de diversas formas: <em><strong>valor unitario de un recurso </strong></em>(Taha); <em><strong>precio dual </strong></em>(múltiples solucionadores); <em><strong>shadow price </strong></em>(precio sombra).</p>
<p>Esta tasa representa el impacto del incremento unitario en la capacidad de un recurso en la función objetivo; se calcula de la siguiente manera:</p>
<p><img decoding="async" src="https://ingenieriaindustrialonline.com/wp-content/uploads/2021/07/precio_dual.png" alt="precio_dual" width="517" height="59" class="aligncenter size-full wp-image-26269" srcset="https://ingenieriaindustrialonline.com/wp-content/uploads/2021/07/precio_dual.png 517w, https://ingenieriaindustrialonline.com/wp-content/uploads/2021/07/precio_dual-300x34.png 300w" sizes="(max-width: 517px) 100vw, 517px" /></p>
<p>En nuestro ejemplo se calculará así:</p>
<p><img decoding="async" src="https://ingenieriaindustrialonline.com/wp-content/uploads/2021/07/shadow_price.png" alt="shadow_price" width="346" height="232" class="aligncenter size-full wp-image-26270" srcset="https://ingenieriaindustrialonline.com/wp-content/uploads/2021/07/shadow_price.png 346w, https://ingenieriaindustrialonline.com/wp-content/uploads/2021/07/shadow_price-300x201.png 300w" sizes="(max-width: 346px) 100vw, 346px" /></p>
<p>Esto indica que: <em>Un incremento unitario en la capacidad de la máquina 1, aumentará el ingreso en $14,0</em>. O lo que es igual: <em>Una reducción unitaria en la capacidad de la máquina 1, reducirá el ingreso en $14,0.</em></p>
<p>En lo que concierne a nuestro código e Python, es sencillo, resulta que nosotros ya tenemos la función objetivo evaluada en cada uno de los vértices del gráfico. Así entonces, será cuestión de crear una nueva variable que represente el <em><strong>precio dual </strong></em>y la operación correspondiente:</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-python" data-lang="Python"><code>#Precio dual (Restricción 1)
Dual1 = (FOi7 - ZMAX) #Calculamos el precio dual para la restricción 1

print('\n ANÁLISIS DE SENSIBILIDAD')
print('Precio dual de la máquina 1: {} $/h'.format(Dual1)) #Imprimimos el precio dual 1
</code></pre>
</div>
<p>Recordemos que la función objetivo del punto <em><strong>G </strong></em>(<em><strong>z</strong></em> en <em><strong>G</strong>) </em>se representa por la variable<em><strong> FOi7</strong></em> (función objetivo en la intersección 7). La operación efectúa la diferencia entre este valor y la función objetivo en el vértice óptimo base (<em><strong>ZMAX</strong></em>).</p>
<p>Al ejecutar el código obtendremos lo siguiente en la consola de Windows:</p>
<figure id="attachment_26271" aria-describedby="caption-attachment-26271" style="width: 592px" class="wp-caption aligncenter"><img decoding="async" src="https://ingenieriaindustrialonline.com/wp-content/uploads/2021/07/precio_dual1.png" alt="precio_dual1" width="592" height="262" class="wp-image-26271 size-full" srcset="https://ingenieriaindustrialonline.com/wp-content/uploads/2021/07/precio_dual1.png 592w, https://ingenieriaindustrialonline.com/wp-content/uploads/2021/07/precio_dual1-300x133.png 300w" sizes="(max-width: 592px) 100vw, 592px" /><figcaption id="caption-attachment-26271" class="wp-caption-text">Figura 6: Resultados del caso JOBCO (Precio dual máquina 1)</figcaption></figure>
<p>&nbsp;</p>
<p>Ahora bien, debemos recordar que hemos hecho énfasis en que el análisis de sensibilidad del caso 1 (cambios en el lado derecho de las restricciones &#8211; capacidad de los recursos), precisa de unos límites dentro de los cuáles los resultados del modelo me permiten calcular el impacto que tiene sobre la solución óptima. Es decir, para nuestro caso en particular: <em>los límites dentro de los cuales el precio dual para la máquina 1 es 14$/h. </em>Dicho de otra manera, estamos en condiciones de calcular el impacto de una variación en la máquina 1 en los ingresos totales, pero, <em>¿Hasta cuándo esa proyección es válida? </em>Y sí, existen unos límites dentro de los cuales nuestra proyección, tasa o precio dual es válido, por fuera de ellos, sería necesario recalcular.</p>
<p>Revisemos nuevamente la <em>figura 4</em>:</p>
<p><img decoding="async" src="https://ingenieriaindustrialonline.com/wp-content/uploads/2021/07/jobco_analisis_sensibilidad1.png" alt="jobco_analisis_sensibilidad1" width="640" height="480" class="aligncenter size-full wp-image-26267" srcset="https://ingenieriaindustrialonline.com/wp-content/uploads/2021/07/jobco_analisis_sensibilidad1.png 640w, https://ingenieriaindustrialonline.com/wp-content/uploads/2021/07/jobco_analisis_sensibilidad1-300x225.png 300w" sizes="(max-width: 640px) 100vw, 640px" /></p>
<p>Veamos cómo la línea que representa los cambios en la capacidad de la <em><strong>máquina 1 </strong></em>(recurso) se mueve paralela a sí misma, y bien puede hacerlo sobre el segmento de la línea que representa la capacidad de la <em><strong>máquina 2</strong></em> (línea verde, o algebraicamente: <em>línea BF, desde el punto B hasta el punto F</em>). Esa es básicamente la clave para determinar los límites de validez de nuestro precio dual, mejor conocidos como <em><strong>intervalos de factibilidad</strong></em>. Pero <em>¿Cuál es la clave? </em>Sí, la ecuación de la <em><strong>máquina 1</strong></em> puede moverse para formar una intersección con la <em><strong>línea verde</strong></em> (a medida que cambie su capacidad) entre <em><strong>B</strong></em> y <em><strong>F</strong></em>, de manera que en estos vértices se encuentran los límites. Y para ser directos, la idea consiste en calcular la capacidad de la máquina 1 en cada uno de estos vértices. <em>¿Cómo lo hacemos? </em>Veamos:</p>
<p>La ecuación que representa la capacidad de la máquina 1 está dada por:</p>
<p style="text-align: center;">2<strong>x1</strong> + <strong>x2</strong> &lt;= 8 horas (máquina 1)</p>
<p>Por ende, si retiramos el valor de la capacidad del recurso (8 horas), obtendremos la ecuación de la utilización o el uso del recurso:</p>
<p style="text-align: center;">2<strong>x1</strong> + <strong>x2 </strong>= Utilización o uso de la máquina 1</p>
<p>Ahora, teniendo la ecuación de la restricción 1 (máquina 1), podemos evaluar cuál sería su utilización en los vértices <em><strong>B </strong></em>y <em><strong>F</strong></em>. Así encontraríamos los límites de validez para esta restricción (intervalos de factibilidad para nuestro precio dual = 14$/h). Dicho de otro modo, encontraríamos la capacidad mínima y máxima de la máquina 1, para que una variación unitaria en la disponibilidad de la misma (máquina 1), represente una variación de 14$ en la función objetivo. Por fuera de ese intervalo, no podemos asegurar de ninguna manera que el precio dual es de 14$/h, sería necesario recalcular.</p>
<p>Volvamos a la determinación de los límites. Ya tenemos la ecuación de la restricción (la verdad, siempre la hemos tenido), ahora la evaluaremos en los puntos <em><strong>B </strong></em>y <em><strong>F</strong></em>. Para ello es preciso conocer las coordenadas de cada uno de estos puntos. En <em>Python</em> podemos utilizar el siguiente fragmento:</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-python" data-lang="Python"><code>#Intervalos de factibilidad
IFmin1 = (2 * xi2) + yi2
IFmax1 = (2 * xi6) + yi6

print('Límite mínimo de factibilidad (PD máquina 1): {} h'.format(IFmin1))
print('Límite máximo de factibilidad (PD máquina 1): {} h'.format(IFmax1))
</code></pre>
</div>
<p>Veamos: El punto <em><strong>B</strong></em> según nuestro código, corresponde a la segunda intersección, por ende sus coordenadas están definidas por las variables <em><strong>xi1 </strong></em>y <em><strong>yi1</strong></em>. Así entonces, evaluamos la capacidad de la <em><strong>máquina 1</strong></em> en estas coordenadas y tenemos el límite mínimo de factibilidad para el precio dual de la máquina 1 <em>(<strong>IFmin1</strong>).</em></p>
<p>Así mismo, el punto <b><i>F </i></b>según nuestro código, corresponde a la sexta intersección, por ende sus coordenadas están definidas por las variables <em><strong>xi6 </strong></em>y <em><strong>yi6</strong></em>. Así entonces, evaluamos la capacidad de la <em><strong>máquina 1</strong></em> en estas coordenadas y tenemos el límite mínimo de factibilidad para el precio dual de la máquina 1 (<em><strong>IFmax1</strong></em>).</p>
<p>Al ejecutar el código obtendremos lo siguiente en la consola de Windows:</p>
<figure id="attachment_26276" aria-describedby="caption-attachment-26276" style="width: 592px" class="wp-caption aligncenter"><img decoding="async" src="https://ingenieriaindustrialonline.com/wp-content/uploads/2021/07/intervalo_de_factibilidad1_a.png" alt="intervalo_de_factibilidad1_a" width="592" height="327" class="size-full wp-image-26276" srcset="https://ingenieriaindustrialonline.com/wp-content/uploads/2021/07/intervalo_de_factibilidad1_a.png 592w, https://ingenieriaindustrialonline.com/wp-content/uploads/2021/07/intervalo_de_factibilidad1_a-300x166.png 300w" sizes="(max-width: 592px) 100vw, 592px" /><figcaption id="caption-attachment-26276" class="wp-caption-text">Figura 7: Intervalos de factibilidad para la máquina 1 (Caso JOBCO)</figcaption></figure>
<p>&nbsp;</p>
<p>Podemos efectuar nosotros mismos los cálculos correspondientes:</p>
<p>El punto <em><strong>B</strong></em> tiene la siguientes coordenadas (<em><strong>x </strong></em>= 0, <em><strong>y </strong></em>= 2,67)</p>
<p>Evaluando estas coordenadas en la ecuación de la <strong><em>máquina 1</em></strong>, tenemos:</p>
<p style="text-align: center;">2(<strong>0</strong>)+ (<strong>2,67</strong>) = Límite mínimo de factibilidad (máquina 1)</p>
<p style="text-align: center;">2(<strong>0</strong>)+ (<strong>2,67</strong>) = 2,67 horas</p>
<p>El punto <em><strong>F</strong></em> tiene la siguientes coordenadas (<em><strong>x </strong></em>= 8, <em><strong>y </strong></em>= 0)</p>
<p>Evaluando estas coordenadas en la ecuación de la <strong><em>máquina 1</em></strong>, tenemos:</p>
<p style="text-align: center;">2(<strong>8</strong>)+ (<strong>0</strong>) = Límite máximo de factibilidad (máquina 1)</p>
<p style="text-align: center;">2(<strong>8</strong>)+ (<strong>0</strong>) = 16 horas</p>
<p>Ya efectuamos los procedimientos de manera manual y mediante <em>Python</em>. La conclusión es que el precio dual de $14/h permanece válido en el intervalo:</p>
<p style="text-align: center;"><strong>2,67</strong> h &lt;= Capacidad de la <em><strong>máquina 1</strong></em> &lt;= <strong>16</strong> h</p>
<p>Los cambios que se encuentren fuera de esos <em><strong>intervalos de factibilidad</strong> </em>producen un precio dual diferente, y por lo tanto, precisan nuevos cálculos.</p>
<p>En nuestro código, incluiremos las líneas que permitan llegar al precio dual y a los intervalos de factibilidad de la <em><strong>máquina 2</strong>. </em>Al ejecutarlo, obtendremos lo siguiente:</p>
<figure id="attachment_26273" aria-describedby="caption-attachment-26273" style="width: 640px" class="wp-caption aligncenter"><img decoding="async" src="https://ingenieriaindustrialonline.com/wp-content/uploads/2021/07/jobco_analisis_sensibilidad2.png" alt="jobco_analisis_sensibilidad2" width="640" height="480" class="wp-image-26273 size-full" srcset="https://ingenieriaindustrialonline.com/wp-content/uploads/2021/07/jobco_analisis_sensibilidad2.png 640w, https://ingenieriaindustrialonline.com/wp-content/uploads/2021/07/jobco_analisis_sensibilidad2-300x225.png 300w" sizes="(max-width: 640px) 100vw, 640px" /><figcaption id="caption-attachment-26273" class="wp-caption-text">Figura 8: Representación gráfica de un cambio en la disponibilidad del recurso 2 (Nuevo vértice H)</figcaption></figure>
<p>&nbsp;</p>
<figure id="attachment_26277" aria-describedby="caption-attachment-26277" style="width: 548px" class="wp-caption aligncenter"><img decoding="async" src="https://ingenieriaindustrialonline.com/wp-content/uploads/2021/07/intervalo_de_factibilidad2_b.png" alt="intervalo_de_factibilidad2_b" width="548" height="404" class="size-full wp-image-26277" srcset="https://ingenieriaindustrialonline.com/wp-content/uploads/2021/07/intervalo_de_factibilidad2_b.png 548w, https://ingenieriaindustrialonline.com/wp-content/uploads/2021/07/intervalo_de_factibilidad2_b-300x221.png 300w" sizes="(max-width: 548px) 100vw, 548px" /><figcaption id="caption-attachment-26277" class="wp-caption-text">Figura 9: Precio dual e intervalos de factibilidad para la máquina 2 (Caso JOBCO)</figcaption></figure>
<p>&nbsp;</p>
<p>La conclusión es que el precio dual de $2/h permanece válido en el intervalo:</p>
<p style="text-align: center;"><strong>4</strong> h &lt;= Capacidad de la <em><strong>máquina 2</strong></em> &lt;= <strong>24</strong> h</p>
<p>Los precios duales y los intervalos de factibilidad amplían la base que ofrece la solución óptima para la toma de decisiones. <em>Taha </em>propone una serie de preguntas alrededor de este caso (ejercicio 3.6-1), que pueden ser abordadas gracias al análisis de sensibilidad.</p>
<p><em><strong>Pregunta 1</strong></em>: Si JOBCO puede incrementar la capacidad de ambas máquinas, ¿Cuál máquina tendrá la prioridad?</p>
<p><strong>Respuesta: </strong>De acuerdo a los precios duales para las máquinas 1 y 2, cada hora adicional de la máquina 1 incrementa el ingreso total en $14; mientras tanto, cada hora adicional de la máquina 2 incrementa el ingreso total en $2. Por lo tanto, la máquina 1 debe tener la prioridad.</p>
<p><em><strong>Pregunta 2</strong></em>: Se sugiere incrementar las capacidades de las máquinas 1 y 2 al costo adicional de $10/h para cada máquina. ¿Es esto aconsejable?</p>
<p><strong>Respuesta: </strong>De acuerdo a los precios duales para las máquinas 1 y 2.  Los ingresos netos adicionales por hora serían de la siguiente manera:</p>
<p><em>Máquina 1:</em></p>
<p>14$/h (Precio dual máquina 1) &#8211; 10$/h (Costo para aumentar capacidad) = 4 $/h (Ingreso neto)</p>
<p><em>Máquina 2:</em></p>
<p>2$/h (Precio dual máquina 2) &#8211; 10$/h (Costo para aumentar capacidad) = &#8211; 8 $/h (Ingreso neto)</p>
<p>Por consiguiente, solo la <em>máquina 1</em> debe considerarse para el incremento de capacidad.</p>
<p><em><strong>Pregunta 3</strong></em>: Si la capacidad de la máquina 1 se incrementa de 8 a 13 horas, ¿Cómo impactará este incremento al ingreso óptimo?</p>
<p><strong>Respuesta</strong>: Lo primero que debe evaluarse es que la nueva capacidad de la máquina 1 se encuentre dentro del intervalo de factibilidad (2,67 h &#8211; 16 h). Ya que sí se encuentra en dicho intervalo (13 h), el siguiente paso consiste en calcular el <em>cambio en la disponibilidad</em>:</p>
<p style="text-align: center;"><em>Cambio en la capacidad</em> = 13 (Nueva capacidad) &#8211; 8 (Capacidad inicial)</p>
<p style="text-align: center;"><em>Cambio en la capacidad</em> = 5 horas</p>
<p>Por ende, multiplicamos dicho cambio por la tasa de cambio del ingreso (precio dual):</p>
<p style="text-align: center;"><em>Cambio en el ingreso</em> = Precio dual  * Cambio en la capacidad</p>
<p style="text-align: center;"><em>Cambio en el ingreso</em> = 14 $/h * (5 horas)</p>
<p style="text-align: center;"><em>Cambio en el ingreso</em> = 70 $</p>
<p style="text-align: center;"><em>Nuevo ingreso</em> = Ingreso base (Solución óptima) + Cambio en el ingreso</p>
<p style="text-align: center;"><em>Nuevo ingreso</em> = $ 128 + $ 70</p>
<p style="text-align: center;"><em>Nuevo ingreso</em> = $ 198</p>
<p>En el caso de que la nueva capacidad de la máquina se encuentre por fuera del intervalo de factibilidad para dicho recurso, no se dispondría de información suficiente para llegar a una conclusión válida.</p>
<hr />
<p>A continuación, dejamos a disposición el código completo del análisis de sensibilidad gráfica desarrollado en <em>Python</em>:</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-python" data-lang="Python"><code># Caso 1: Investigación de Operaciones (9na edición), de Hamdy A. Taha 
# (University of Arkansas, Fayetteville), (Ejemplo 3.6-1)
# Autor del código en Python: Bryan Salazar López, Ing. M.Sc. (2021)

#Librerías necesarias
import matplotlib.pyplot as plt
import numpy as np
from shapely.geometry import LineString

#Ecuaciones e intervalos (Para tabular)
x = np.arange(-20, 20, 5)
y = np.arange(-20, 20, 5)
y1 = 8 - (2 * x)
y2 = (8 - x) / 3
y3 = 0 * x
x1 = 0 * y
z = (-30 * x) / 20
y1v = (8 + 1) - (2 * x) #Variación en la máquina 1 (8 + 1)
y2v = ((8 + 1) - x) / 3 #Variación en la máquina 2 (8 + 1)

#Identificadores para las líneas
primera_linea = LineString(np.column_stack((x, y1)))
segunda_linea = LineString(np.column_stack((x, y2)))
tercera_linea = LineString(np.column_stack((x, y3)))
cuarta_linea = LineString(np.column_stack((x1, y)))
quinta_linea = LineString(np.column_stack((x, z)))
sexta_linea = LineString(np.column_stack((x, y1v))) #Nueva línea Máquina 1 (M1)
septima_linea = LineString(np.column_stack((x, y2v))) #Nueva línea Máquina 2 (M2)

#Graficando las líneas
plt.plot(x, y1, '-', linewidth=2, color='b')
plt.plot(x, y2, '-', linewidth=2, color='g')
plt.plot(x, y3, '-', linewidth=2, color='r')
plt.plot(x1, y, '-', linewidth=2, color='y')
#plt.plot(x, z, ':', linewidth=1, color='k')
plt.plot(x, y1v, ':', linewidth=1, color='b') #Nueva línea M1
plt.plot(x, y2v, ':', linewidth=1, color='g') #Nueva línea M2


#Generando las intersecciones (vértices)
primera_interseccion = cuarta_linea.intersection(segunda_linea)
segunda_interseccion = primera_linea.intersection(segunda_linea)
tercera_interseccion = primera_linea.intersection(tercera_linea)
cuarta_interseccion = tercera_linea.intersection(cuarta_linea)
quinta_interseccion = cuarta_linea.intersection(primera_linea)
sexta_interseccion = segunda_linea.intersection(tercera_linea)
septima_interseccion = sexta_linea.intersection(segunda_linea) #Nuevo vértice M1
octava_interseccion = septima_linea.intersection(primera_linea) #Nuevo vértice M2

#Graficando los vértices
plt.plot(*primera_interseccion.xy, 'o', color='k')
plt.plot(*segunda_interseccion.xy, 'o', color='k')
plt.plot(*tercera_interseccion.xy, 'o', color='k')
plt.plot(*cuarta_interseccion.xy, 'o', color='k')
plt.plot(*quinta_interseccion.xy, 'o', color='silver')
plt.plot(*sexta_interseccion.xy, 'o', color='silver')
plt.plot(*septima_interseccion.xy, 'o', color='k') #Graficar nuevo vértice M1
plt.plot(*octava_interseccion.xy, 'o', color='k') #Graficar nuevo vértice M2

#Identificando los valores de las coordenadas x y y de cada vértice
xi1m, yi1m = primera_interseccion.xy
xi2m, yi2m = segunda_interseccion.xy
xi3m, yi3m = tercera_interseccion.xy
xi4m, yi4m = cuarta_interseccion.xy
xi5m, yi5m = quinta_interseccion.xy
xi6m, yi6m = sexta_interseccion.xy
xi7m, yi7m = septima_interseccion.xy #Coordenadas del nuevo vértice M1
xi8m, yi8m = octava_interseccion.xy #Coordenadas del nuevo vértice M2

#Cambiamos el formato de matriz a float
xi1 = np.float64(np.array(xi1m))
xi2 = np.float64(np.array(xi2m))
xi3 = np.float64(np.array(xi3m))
xi4 = np.float64(np.array(xi4m))
xi5 = np.float64(np.array(xi5m))
xi6 = np.float64(np.array(xi6m))
xi7 = np.float64(np.array(xi7m)) #Nueva coordenada en x (Máquina 1)
xi8 = np.float64(np.array(xi8m)) #Nueva coordenada en x (Máquina 2)
yi1 = np.float64(np.array(yi1m))
yi2 = np.float64(np.array(yi2m))
yi3 = np.float64(np.array(yi3m))
yi4 = np.float64(np.array(yi4m))
yi5 = np.float64(np.array(yi5m))
yi6 = np.float64(np.array(yi6m))
yi7 = np.float64(np.array(yi7m)) #Nueva coordenada en y (Máquina 1)
yi8 = np.float64(np.array(yi8m)) #Nueva coordenada en y (Máquina 2)

#literales de las intersecciones (nombres en el gráfico)
plt.annotate(' A', (xi4, yi4))
plt.annotate(' B', (xi1, yi1))
plt.annotate(' C', (xi2, yi2))
plt.annotate(' D', (xi3, yi3))
plt.annotate(' E', (xi5, yi5))
plt.annotate(' F', (xi6, yi6)) 
plt.annotate(' G', (xi7, yi7)) #Nombrar el nuevo vértice como G
plt.annotate(' H', (xi8, yi8)) #Nombrar el nuevo vértice como H

#Evaluando la función objetivo en cada vértice
FOi1 = (xi1 * 30) + (yi1 * 20)
FOi2 = (xi2 * 30) + (yi2 * 20)
FOi3 = (xi3 * 30) + (yi3 * 20)
FOi4 = (xi4 * 30) + (yi4 * 20)
FOi7 = (xi7 * 30) + (yi7 * 20) #Calcular la FO en el nuevo vértice G
FOi8 = (xi8 * 30) + (yi8 * 20) #Calcular la FO en el nuevo vértice H

#Calculando el mejor resultado (Maximizar)
ZMAX = max(FOi1, FOi2, FOi3, FOi4)

#Imprimiendo la solución óptima en la consola
print('\n SOLUCIÓN ÓPTIMA')
print('Solución óptima: {} '.format(ZMAX))
print('Función objetivo en punto G: {} '.format(FOi7))
print('Función objetivo en punto H: {} '.format(FOi8))

#Ordenando las coordenadas de los vértices (Las coordenadas x en m y las coordenadas y en n)
m = [xi1, xi2, xi3, xi4]
n = [yi1, yi2, yi3, yi4]

#Graficando el polígono solución a partir de las coordenadas de los vértices (importante el orden según las manecillas)
plt.fill(m, n, color='silver')

#Identificando el índice del vértice de la mejor solución
dict1 = {0:FOi1, 1:FOi2, 2:FOi3, 3:FOi4}
posicion = max(dict1, key=dict1.get)

#Obteniendo las coordenadas del vértice de la mejor solución de acuerdo al índice del paso anterior
XMAX = m[posicion]
YMAX = n[posicion]

#Imprimiendo las coordenadas del vértice de la mejor solución (variables de decisión)
print('\n VARIABLES DE DECISIÓN')
print('Cantidad de producto X1 a producir: {} unidades'.format(XMAX))
print('Cantidad de producto X2 a producir: {} unidades'.format(YMAX))

#Precio dual (Restricción 1)
Dual1 = (FOi7 - ZMAX) #Calculamos el precio dual para la restricción 1
Dual2 = (FOi8 - ZMAX) #Calculamos el precio dual para la restricción 1

#Imprimir los precios duales
print('\n ANÁLISIS DE SENSIBILIDAD')
print('Precio dual de la máquina 1: {} $/h'.format(Dual1)) #Imprimimos el precio dual 1
print('Precio dual de la máquina 2: {} $/h'.format(Dual2)) #Imprimimos el precio dual 2

#Intervalos de factibilidad (Máquina 1)
IFmin1 = (2 * xi1) + yi1
IFmax1 = (2 * xi6) + yi6

#Intervalos de factibilidad (Máquina 2)
IFmin2 = xi3 + (3 * yi3)
IFmax2 = xi5 + (3 * yi5)

#Imprimir los intervalos de factibilidad
print('\n INTERVALOS DE FACTIBILIDAD')
print('Límite mínimo de factibilidad (PD máquina 1): {} h'.format(IFmin1))
print('Límite máximo de factibilidad (PD máquina 1): {} h'.format(IFmax1))
print('Límite mínimo de factibilidad (PD máquina 2): {} h'.format(IFmin2))
print('Límite máximo de factibilidad (PD máquina 2): {} h'.format(IFmax2))


#Configuraciones adicionales del gráfico
plt.grid()
plt.xlabel('X1')
plt.ylabel('X2')
plt.title('JOBCO')

plt.show()
</code></pre>
</div>
<hr />
<p>En el próximo artículo desarrollaremos el segundo caso de análisis de sensibilidad: <em>cambios en la utilidad unitaria o el costo unitario.</em></p>
<p>La entrada <a href="https://ingenieriaindustrialonline.com/investigacion-de-operaciones/analisis-de-sensibilidad-grafica-mediante-el-uso-de-python-caso-1/">Análisis de sensibilidad gráfica mediante el uso de Python (Caso 1)</a> se publicó primero en <a href="https://ingenieriaindustrialonline.com">Ingenieria Industrial Online</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ingenieriaindustrialonline.com/investigacion-de-operaciones/analisis-de-sensibilidad-grafica-mediante-el-uso-de-python-caso-1/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
