<?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>Modelo de transporte archivos &#187; Ingenieria Industrial Online</title>
	<atom:link href="https://ingenieriaindustrialonline.com/tag/modelo-de-transporte/feed/" rel="self" type="application/rss+xml" />
	<link>https://ingenieriaindustrialonline.com/tag/modelo-de-transporte/</link>
	<description>ingenieriaindustriaonline.com</description>
	<lastBuildDate>Tue, 10 Aug 2021 18:41:17 +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>Modelo de transporte archivos &#187; Ingenieria Industrial Online</title>
	<link>https://ingenieriaindustrialonline.com/tag/modelo-de-transporte/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Solución de un modelo de transporte mediante un algoritmo de asignación</title>
		<link>https://ingenieriaindustrialonline.com/investigacion-de-operaciones/solucion-de-un-modelo-de-transporte-mediante-un-algoritmo-de-asignacion/</link>
					<comments>https://ingenieriaindustrialonline.com/investigacion-de-operaciones/solucion-de-un-modelo-de-transporte-mediante-un-algoritmo-de-asignacion/#respond</comments>
		
		<dc:creator><![CDATA[Bryan Salazar López]]></dc:creator>
		<pubDate>Tue, 10 Aug 2021 18:26:15 +0000</pubDate>
				<category><![CDATA[Investigación de operaciones]]></category>
		<category><![CDATA[Google OR-Tools]]></category>
		<category><![CDATA[Modelo de transporte]]></category>
		<category><![CDATA[Problema de asignación]]></category>
		<category><![CDATA[Problema de transporte]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://ingenieriaindustrialonline.com/?p=26835</guid>

					<description><![CDATA[<p>En su versión más básica, un modelo de transporte tiene por objetivo llevar unidades de un punto específico llamado fuente u origen  hacia otro punto específico llamado destino. Para cumplir con este objetivo deberá satisfacer los requerimientos establecidos por los destinos (demanda), al tiempo que satisface la disponibilidad de las fuentes (oferta). Estos planes de transporte deberán cumplir algún &#8230;</p>
<p>La entrada <a href="https://ingenieriaindustrialonline.com/investigacion-de-operaciones/solucion-de-un-modelo-de-transporte-mediante-un-algoritmo-de-asignacion/">Solución de un modelo de transporte mediante un algoritmo de asignación</a> se publicó primero en <a href="https://ingenieriaindustrialonline.com">Ingenieria Industrial Online</a>.</p>
]]></description>
										<content:encoded><![CDATA[
		<div id="introduccion" data-title="Introducción" class="index-title"></div>
	En su versión más básica, un <a href="https://ingenieriaindustrialonline.com/investigacion-de-operaciones/problema-del-transporte-o-distribucion/"><strong>modelo de transporte</strong></a> tiene por objetivo llevar unidades de un punto específico llamado <em><strong>fuente</strong></em> u <em><strong>origen</strong></em>  hacia otro punto específico llamado <em><strong>destino</strong></em>. Para cumplir con este objetivo deberá satisfacer los requerimientos establecidos por los destinos (demanda), al tiempo que satisface la disponibilidad de las fuentes (oferta). Estos planes de transporte deberán cumplir algún criterio de optimización: <em>minimizar distancias, minimizar tiempos, maximizar ganancias, </em>por citar algunos ejemplos.</p>
<p><img decoding="async" src="https://ingenieriaindustrialonline.com/wp-content/uploads/2021/08/Figure-2021-08-10-093443.png" alt="" width="345" height="353" class="aligncenter size-full wp-image-26838" srcset="https://ingenieriaindustrialonline.com/wp-content/uploads/2021/08/Figure-2021-08-10-093443.png 345w, https://ingenieriaindustrialonline.com/wp-content/uploads/2021/08/Figure-2021-08-10-093443-293x300.png 293w" sizes="(max-width: 345px) 100vw, 345px" /></p>
<p>Es conocido, que los <a href="https://ingenieriaindustrialonline.com/investigacion-de-operaciones/problemas-de-asignacion/"><strong>problemas de asignación puros</strong></a> son una variación del problema original del transporte, en cuyos casos las variables de decisión solo pueden tomar valores binarios. <em>¿Esto qué significa? </em>Pues bien, como algoritmo de red, un problema básico de transporte es un modelo de asignación genérico; modelo en el cual se pretende establecer la asignación entre fuentes y destinos; es decir, cuántas unidades se transportarán desde el origen <em>i </em>hacia el destino <em>j</em>. Se entiende además, que en el caso del transporte, estas variables de asignación no son necesariamente binarias.</p>
<p>El objetivo de este artículo consiste en utilizar las librerías del software Google OR-Tools (<em>Python</em>), para abordar un problema de transporte básico, de acuerdo a un modelo de asignación.</p>
<hr />
<h2>El problema</h2>

		<div id="el-problema" data-title="El problema" class="index-title"></div>
	
<p><span>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 5.1-1):</span></p>
<blockquote class=" quote-simple "><p>MG Auto cuenta con tres plantas en Los Ángeles, Detroit y Nueva Orleáns, y dos importantes centros de distribución en Denver y Miami. Las capacidades trimestrales de las tres plantas son 1000, 1500 y 1200 automóviles, y las demandas de los dos centros de distribución durante el mismo periodo son de 2300 y 1400 automóviles. La distancia en millas entre las plantas y los centros de distribución aparece en la siguiente tabla: <cite>Hamdy A. Taha</cite></p></blockquote>
<p><strong>Relación de distancias entre plantas y cedis</strong></p>
<table width="247">
<tbody>
<tr>
<td width="87" style="text-align: center;"></td>
<td width="80" style="text-align: center;"><strong>Denver</strong></td>
<td width="80" style="text-align: center;"><strong>Miami</strong></td>
</tr>
<tr>
<td style="text-align: center;"><strong>Los Ángeles</strong></td>
<td style="text-align: center;">1000</td>
<td style="text-align: center;">2690</td>
</tr>
<tr>
<td style="text-align: center;"><strong>Detroit</strong></td>
<td style="text-align: center;">1250</td>
<td style="text-align: center;">1350</td>
</tr>
<tr>
<td style="text-align: center;"><strong>Nueva Orleáns</strong></td>
<td style="text-align: center;">1275</td>
<td style="text-align: center;">850</td>
</tr>
</tbody>
</table>
<p><em>Distancia dada en millas</em></p>
<p>El caso también plantea que la compañía de transporte cobra 8 centavos por milla por automóvil. Así entonces, el objetivo del modelo no será minimizar la distancia total, sino minimizar el costo total de transporte. Con base en la distancia dada en millas y el costo de transporte unitario, construimos nuestra tabla de costos (redondeada al dólar más cercano):</p>
<p><strong>Relación de costos de distribución entre plantas y cedis</strong></p>
<table width="247">
<tbody>
<tr>
<td width="87" style="text-align: center;"></td>
<td width="80" style="text-align: center;"><strong>Denver</strong></td>
<td width="80" style="text-align: center;"><strong>Miami</strong></td>
</tr>
<tr>
<td style="text-align: center;"><strong>Los Ángeles</strong></td>
<td style="text-align: center;">80</td>
<td style="text-align: center;">215</td>
</tr>
<tr>
<td style="text-align: center;"><strong>Detroit</strong></td>
<td style="text-align: center;">100</td>
<td style="text-align: center;">108</td>
</tr>
<tr>
<td style="text-align: center;"><strong>Nueva Orleáns</strong></td>
<td style="text-align: center;">102</td>
<td style="text-align: center;">68</td>
</tr>
</tbody>
</table>
<p><em>Costo dado en dólares automóvil</em></p>
<p>La representación gráfica de la red sería la siguiente:</p>
<p><img decoding="async" src="https://ingenieriaindustrialonline.com/wp-content/uploads/2021/08/Figure-2021-08-10-093443-1.png" alt="Problema del transporte" width="487" height="401" class="aligncenter size-full wp-image-26839" srcset="https://ingenieriaindustrialonline.com/wp-content/uploads/2021/08/Figure-2021-08-10-093443-1.png 487w, https://ingenieriaindustrialonline.com/wp-content/uploads/2021/08/Figure-2021-08-10-093443-1-300x247.png 300w" sizes="(max-width: 487px) 100vw, 487px" /></p>
<h2>Resolviendo un problema de transporte mediante Or Tools (Asignación)</h2>

		<div id="resolviendo-un-problema-de-transporte-mediante-or-tools-asignacion" data-title="Resolviendo un problema de transporte mediante Or Tools (Asignación)" class="index-title"></div>
	
<p>De acuerdo a lo mencionado en el artículo de<span> </span><a href="https://ingenieriaindustrialonline.com/investigacion-de-operaciones/que-es-y-para-que-sirve-google-or-tools/"><strong>introducción a Google OR-Tools</strong></a>, esta herramienta soporta múltiples lenguajes de programación, así entonces, haremos uso del lenguaje de programación Python.</p>
<p>Utilizaremos un solucionador para programación lineal mixta: <em>SCIP.</em></p>
<h3>Importar librerías</h3>
<p>El primer paso consiste en importar la librería de Google Or Tools, esto nos permitirá utilizar todas sus funciones.</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-python" data-lang="Python"><code>f<span style="font-size: 14px; font-weight: lighter;">rom ortools.linear_solver import pywraplp</span></code></pre>
</div>
<h3>Declarar el solucionador</h3>
<p>Tal como lo mencionamos, vamos a utilizar un solucionador de <a href="https://ingenieriaindustrialonline.com/investigacion-de-operaciones/programacion-lineal-mixta-con-google-or-tools/"><strong>programación lineal mixta</strong></a>. Esto nos permitirá utilizar tanto variables enteras como variables continuas. Debemos declarar el solucionador <em>SCIP</em>.</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-python" data-lang="Python"><code>solver = pywraplp.Solver.CreateSolver('SCIP')</code></pre>
</div>
<h3>Crear la data del modelo</h3>
<p>La data base del modelo corresponde a la matriz de costos. Debemos de considerar que el orden en el que se ingresa la información corresponda a la relación precisa entre las variables; veamos:</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-python" data-lang="Python"><code>costos = [
    [ 80, 215],
    [100, 108],
    [102,  68],
]

num_plantas = len(costos)
num_cedis = len(costos[0])</code></pre>
</div>
<p>Así mismo, utilizaremos el método <em><strong>len </strong></em>para calcular el número de <em>plantas</em> y el número de <em>cedis</em>. En el caso de las <em>plantas</em>, contará el número de filas de la matriz; en el caso de los <em>cedis</em>, contará en número de columnas (para saber que contará las columnas de la matriz se utiliza <em>costos[0]</em>).</p>
<h3>Crear las variables del modelo</h3>
<p>Este es un problema básico, y como tal las únicas variables necesarias serán las asignaciones. Es decir, las variables <span>x[i, j], donde <em>i </em>representa el origen y <em>j </em>representa el destino. Este proceso es relativamente sencillo y puede generarse cada variable de manera manual, sin embargo, automatizaremos la creación de las variables por medio de ciclos, con el propósito de preparar nuestro código para problemas más robustos:</span></p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-python" data-lang="Python"><code>x = {}
for i in range(num_plantas):
    for j in range(num_cedis):
        x[i, j] = solver.IntVar(0, solver.infinity(), '')</code></pre>
</div>
<p>De esta manera se crean las variables de asignación. Es decir, tendremos tantos <em>i </em>como número de plantas (orígenes), asociados a tantos <em>j </em>como número de cedis (destinos). La naturaleza de las variables es entera (solver.IntVar), ya que hace referencia a la distribución de automóviles. Desde la creación de las variables podemos definir su rango, en este caso diremos que será desde 0 hasta infinito (solver.infinity).</p>
<p>Así entonces, se entiende que, por ejemplo, la variable x[0,0] hace referencia al número de automóviles que se enviarán desde el origen <em>0 </em>(<em>Los Ángeles</em>) hacia el destino 0 (<em>Denver</em>). El orden de la asignación se basa en la matriz de costos.</p>
<p>El código anterior crea todas las variables de asignación necesarias.</p>
<h3>Crear las restricciones</h3>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-python" data-lang="Python"><code>#Restricciones de disponibilidad (oferta en plantas)
solver.Add(solver.Sum([x[0, j] for j in range(num_cedis)]) &lt;= 1000)
solver.Add(solver.Sum([x[1, j] for j in range(num_cedis)]) &lt;= 1500)
solver.Add(solver.Sum([x[2, j] for j in range(num_cedis)]) &lt;= 1200)

#Restricciones de demanda (cedis)
solver.Add(solver.Sum([x[i, 0] for i in range(num_plantas)]) &gt;= 2300)
solver.Add(solver.Sum([x[i, 1] for i in range(num_plantas)]) &gt;= 1400) </code></pre>
</div>
<p>El método <em><strong>Add </strong></em>de <em>solver</em>, nos servirá para agregar las restricciones al modelo. Las restricciones de oferta y demanda necesarias se adicionan tal cual el código anterior. Explicaremos la primera de ellas:</p>
<p style="text-align: center;">solver.Add(solver.Sum([x[0, j] for j in range(num_cedis)]) &lt;= 80)</p>
<p>La anterior restricción indica que, la sumatoria de todas las variables x[0, j], para los <em>j </em>del conjunto <em>cedis </em>deberá ser menor o igual a 1000. Esto significa que la cantidad enviada desde el nodo (planta) <em>0 </em>hacia los destinos <em>j (Denver y Miami) </em>no puede ser mayor que su disponibilidad de automóviles.</p>
<h3>Crear la función objetivo</h3>
<p>Tal como lo planteamos desde la formulación del problema, el criterio de optimización des este modelo corresponde a minimizar el costo total de distribución. El siguiente fragmento calcula el producto entre cada variable x[i, j] y su respectivo costo c[i, j] (obtenida desde la matriz de costos). La sumatoria de productos corresponde a la ecuación objetivo.</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-python" data-lang="Python"><code>for i in range(num_plantas):
    for j in range(num_cedis):
        objective_terms.append(costos[i][j] * x[i, j])
solver.Minimize(solver.Sum(objective_terms))</code></pre>
</div>
<p>Luego se declara el criterio de optimización: <em>Minimize </em>(para minimizar) y <em>Maximize </em>(para maximizar). En este caso minimizará la sumatoria de los productos.</p>
<h3>Invocar al solucionador</h3>
<p>La siguiente línea indica que el modelo debe solucionarse.</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-python" data-lang="Python"><code>status = solver.Solve()</code></pre>
</div>
<h3>Configurar las salidas del modelo</h3>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-python" data-lang="Python"><code>if status == pywraplp.Solver.OPTIMAL or status == pywraplp.Solver.FEASIBLE:
    print('Costo total = ', solver.Objective().Value(), '\n')

    for i in range(num_plantas):
        for j in range(num_cedis):
            print('|Planta {} -&gt; Cedi {} - Cantidad: {}|'.format(
            i,
            j,
            x[i, j].solution_value()))</code></pre>
</div>
<p>En el caso en el que el modelo encuentre una solución óptima, hemos configurado las salidas de tal manera que nos muestre la relación solución entre fuentes &gt; destinos y cantidades. Al ejecutar el modelo obtendremos la siguiente solución:</p>
<p><img decoding="async" src="https://ingenieriaindustrialonline.com/wp-content/uploads/2021/08/transporte-solucion-asignacion.png" alt="" width="425" height="153" class="aligncenter size-full wp-image-26842" srcset="https://ingenieriaindustrialonline.com/wp-content/uploads/2021/08/transporte-solucion-asignacion.png 425w, https://ingenieriaindustrialonline.com/wp-content/uploads/2021/08/transporte-solucion-asignacion-300x108.png 300w" sizes="(max-width: 425px) 100vw, 425px" /></p>
<p>Podemos también detallar mucho mejor las salidas del modelo, de acuerdo al nombre de las plantas y los cedis. Para ello, en la data de entrada creamos las listas correspondientes, veamos:</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-python" data-lang="Python"><code>costos = [
    [ 80, 215],
    [100, 108],
    [102,  68],
]

num_plantas = len(costos)
num_cedis = len(costos[0])

plantas = ['Los Ángeles', 'Detroit', 'New Orleans']
cedis = ['Denver', 'Miami']</code></pre>
</div>
<p>La información de las listas debe guardar correspondencia con el orden de la matriz de costos.</p>
<p>Ahora, configuramos nuevamente las salidas del modelo:</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-python" data-lang="Python"><code>if status == pywraplp.Solver.OPTIMAL or status == pywraplp.Solver.FEASIBLE:
    print('Costo total = ', solver.Objective().Value(), '\n')

    for i in range(num_plantas):
        for j in range(num_cedis):
            print('|{:^20} -&gt; {:^20} | Cantidad: {:^20}|'.format(
            plantas[i],
            cedis[j],
            x[i, j].solution_value()))</code></pre>
</div>
<p>En este caso hemos remplazado el índice solo de plantas y cedis, por el índice dentro del listado de plantas y cedis. Así entonces, tendremos la siguiente salida del modelo:</p>
<p><img decoding="async" src="https://ingenieriaindustrialonline.com/wp-content/uploads/2021/08/transporte-solucion-asignacion_2.png" alt="" width="663" height="158" class="aligncenter size-full wp-image-26843" srcset="https://ingenieriaindustrialonline.com/wp-content/uploads/2021/08/transporte-solucion-asignacion_2.png 663w, https://ingenieriaindustrialonline.com/wp-content/uploads/2021/08/transporte-solucion-asignacion_2-300x71.png 300w" sizes="(max-width: 663px) 100vw, 663px" /></p>
<p><img decoding="async" src="https://ingenieriaindustrialonline.com/wp-content/uploads/2021/08/modelo-de-transporte-solucion-de-red.png" alt="" width="482" height="401" class="aligncenter size-full wp-image-26844" srcset="https://ingenieriaindustrialonline.com/wp-content/uploads/2021/08/modelo-de-transporte-solucion-de-red.png 482w, https://ingenieriaindustrialonline.com/wp-content/uploads/2021/08/modelo-de-transporte-solucion-de-red-300x250.png 300w" sizes="(max-width: 482px) 100vw, 482px" /></p>
<p>Pueden cotejar los resultados obtenidos los cuales corresponden a los mismos resultados presentados por <em>Taha, quien utiliza </em>TORA como solucionador.</p>
<hr />
<h2>¿Cómo ejecutar el modelo?
		<div id="como-ejecutar-el-modelo" data-title="¿Cómo ejecutar el modelo?" class="index-title"></div>
	</h2>
<p><em><strong>Alternativa 1, ejecución en nuestro equipo:</strong></em></p>
<p>Lo primero que debemos considerar, en el caso de que queramos ejecutar este código en nuestro equipo, es que es preciso contar con la instalación de <em>Python </em>en nuestro equipo de cómputo y por supuesto, el software <em>OR-Tools.</em> Una guía detallada de la instalación de estos requerimientos la podrás encontrar en el siguiente enlace:</p>
<p style="text-align: center;"><a href="https://developers.google.com/optimization/install/python/windows" target="_blank" class="shortc-button medium blue">Instalación de OR-Tools para Python</a>
<p>Ahora, lo recomendable es trabajar con algún editor de código práctico (IDE), por ejemplo: <a href="https://www.sublimetext.com/3"><strong><em>Sublime Text</em></strong></a>, o <em><strong>Spyder</strong></em> (Una herramienta más completa y por ende más robusta y pesada).</p>
<p><em><strong>Alternativa 2, ejecución en un entorno virtual (Recomendado):</strong></em></p>
<p>Podemos utilizar del mismo modo, un entorno virtual. En este caso recomendamos el uso de <em><strong>Colaboratory de Google</strong></em>, un entorno que cuenta con todas las herramientas necesarias para nuestros desarrollos. No tendremos que instalar nada en nuestro equipo, y aprovecharemos la potencia de las máquinas de Google.</p>
<hr />
<p>El código completo de nuestro desarrollo lo presentamos a continuación.</p>

		<div class="box info  ">
			<div class="box-inner-block">
				<span class="fa tie-shortcode-boxicon"></span>También puedes ver el cuaderno de este módulo en nuestro <em>Colaboratory: <a href="https://colab.research.google.com/drive/1a4ctY8P8XuP_XDLy4tGuwFe8vpQLYRtK?usp=sharing"><strong>Transporte mediante asignación</strong></a>.</em>
			</div>
		</div>
	
<div class="hcb_wrap">
<pre class="prism line-numbers lang-python" data-lang="Python"><code># Importar la librería de Google OR-Tools
from ortools.linear_solver import pywraplp

# Declarar el solucionador que abordará el modelo
solver = pywraplp.Solver.CreateSolver('SCIP')

# Data del modelo
costos = [
    [ 80, 215],
    [100, 108],
    [102,  68],
]

plantas = ['Los Ángeles', 'Detroit', 'New Orleans']
cedis = ['Denver', 'Miami']

num_plantas = len(costos)
num_cedis = len(costos[0])

# Variables del modelo
x = {}
for i in range(num_plantas):
    for j in range(num_cedis):
        x[i, j] = solver.IntVar(0, solver.infinity(), '')
        
#Restricciones de disponibilidad (oferta en plantas) 
solver.Add(solver.Sum([x[0, j] for j in range(num_cedis)]) &lt;= 1000) 
solver.Add(solver.Sum([x[1, j] for j in range(num_cedis)]) &lt;= 1500) 
solver.Add(solver.Sum([x[2, j] for j in range(num_cedis)]) &lt;= 1200) 

#Restricciones de demanda (cedis) 
solver.Add(solver.Sum([x[i, 0] for i in range(num_plantas)]) &gt;= 2300) 
solver.Add(solver.Sum([x[i, 1] for i in range(num_plantas)]) &gt;= 1400)      



# Función objetivo con criterio de optimización: minimizar
objective_terms = []
for i in range(num_plantas):
    for j in range(num_cedis):
        objective_terms.append(costos[i][j] * x[i, j])

solver.Minimize(solver.Sum(objective_terms))

# Invoca el solucionador
status = solver.Solve()

# Configura los parámetros de impresión, las salidas del modelo
if status == pywraplp.Solver.OPTIMAL or status == pywraplp.Solver.FEASIBLE:
    print('Costo total = ', solver.Objective().Value(), '\n')

    for i in range(num_plantas):
        for j in range(num_cedis):
            print('|{:^20} -&gt; {:^20} | Cantidad: {:^20}|'.format(
            plantas[i],
            cedis[j],
            x[i, j].solution_value()))</code></pre>
</div>
<hr />
<p>También es posible integrar nuestro desarrollo con data proveniente de fuentes externas, como por ejemplo Excel.</p>
<p>En próximos artículos, resolveremos el problema de transporte básico mediante un algoritmo de flujo mínimo.</p>
<p>La entrada <a href="https://ingenieriaindustrialonline.com/investigacion-de-operaciones/solucion-de-un-modelo-de-transporte-mediante-un-algoritmo-de-asignacion/">Solución de un modelo de transporte mediante un algoritmo de asignación</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/solucion-de-un-modelo-de-transporte-mediante-un-algoritmo-de-asignacion/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
