<?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>Programación de restricciones archivos &#187; Ingenieria Industrial Online</title>
	<atom:link href="https://ingenieriaindustrialonline.com/tag/programacion-de-restricciones/feed/" rel="self" type="application/rss+xml" />
	<link>https://ingenieriaindustrialonline.com/tag/programacion-de-restricciones/</link>
	<description>ingenieriaindustriaonline.com</description>
	<lastBuildDate>Fri, 30 Jul 2021 17:01:41 +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>Programación de restricciones archivos &#187; Ingenieria Industrial Online</title>
	<link>https://ingenieriaindustrialonline.com/tag/programacion-de-restricciones/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>¿Qué es y para qué sirve Google OR-Tools?</title>
		<link>https://ingenieriaindustrialonline.com/investigacion-de-operaciones/que-es-y-para-que-sirve-google-or-tools/</link>
					<comments>https://ingenieriaindustrialonline.com/investigacion-de-operaciones/que-es-y-para-que-sirve-google-or-tools/#respond</comments>
		
		<dc:creator><![CDATA[Bryan Salazar López]]></dc:creator>
		<pubDate>Wed, 14 Apr 2021 00:25:27 +0000</pubDate>
				<category><![CDATA[Actualidad]]></category>
		<category><![CDATA[Investigación de operaciones]]></category>
		<category><![CDATA[Google OR-Tools]]></category>
		<category><![CDATA[Investigación de Operaciones]]></category>
		<category><![CDATA[Programación de restricciones]]></category>
		<category><![CDATA[Programación lineal]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Solucionadores]]></category>
		<category><![CDATA[VRP]]></category>
		<guid isPermaLink="false">https://ingenieriaindustrialonline.com/?p=25340</guid>

					<description><![CDATA[<p>Google OR-Tools es un paquete de software portable de código abierto para resolución de problemas de optimización. Así mismo, cuenta con metaheurísticas que buscan encontrar la mejor solución a un problema entre un conjunto de posibles soluciones. Or-Tools es una herramienta potente, diseñada para abordar los problemas más difíciles del mundo en el enrutamiento de &#8230;</p>
<p>La entrada <a href="https://ingenieriaindustrialonline.com/investigacion-de-operaciones/que-es-y-para-que-sirve-google-or-tools/">¿Qué es y para qué sirve Google OR-Tools?</a> se publicó primero en <a href="https://ingenieriaindustrialonline.com">Ingenieria Industrial Online</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><strong>
		<div id="que-es-google-or-tools-y-para-que-sirve" data-title="¿Qué es Google Or-Tools y para qué sirve?" class="index-title"></div>
	 </strong></p>
<p><strong>Google OR-Tools es un paquete de software portable de código abierto para resolución de problemas de optimización</strong>. Así mismo, cuenta con metaheurísticas que buscan encontrar la mejor solución a un problema entre un conjunto de posibles soluciones. Or-Tools es una herramienta potente, diseñada para abordar los problemas más difíciles del mundo en el enrutamiento de vehículos, los flujos, la programación de números enteros y lineales y la programación de restricciones.</p>
<p>Una de las ventajas potenciales de Google Or-Tools consiste en que, a pesar de estar desarrollado en lenguaje C++, permite el modelamiento de problemas en múltiples lenguajes de programación, del mismo modo, cuenta con múltiples solucionadores específicos para resolverlos, algunos comerciales y algunos de código abierto.</p>
<table width="422">
<tbody>
<tr>
<td width="102"></td>
<td style="text-align: center;" colspan="4" width="320">Lenguajes de programación</td>
</tr>
<tr>
<td style="text-align: center;" width="102">OR-Tools</td>
<td style="text-align: center;" width="80">Python</td>
<td style="text-align: center;" width="80">C++</td>
<td style="text-align: center;" width="80">Java</td>
<td style="text-align: center;" width="80">C#</td>
</tr>
<tr>
<td style="text-align: center;" width="102">Compatibilidad</td>
<td style="text-align: center;" width="80">✓</td>
<td style="text-align: center;" width="80"> ✓</td>
<td style="text-align: center;" width="80"> ✓</td>
<td style="text-align: center;" width="80"> ✓</td>
</tr>
</tbody>
</table>
<p>Fuente: <a href="https://developers.google.com/optimization"><em><strong>Google OR-Tools</strong></em></a></p>
<p>Centrémonos en la posibilidad de modelar un problema de optimización en un lenguaje de programación, puesto que las oportunidades son cada vez más interesantes. En la academia, <strong>la enseñanza de la <a href="https://ingenieriaindustrialonline.com/investigacion-de-operaciones/que-es-la-investigacion-de-operaciones/">investigación de operaciones</a>, el proceso de modelamiento y el mundo de los solucionadores, es tan a menudo, atomizado, que carece de practicidad</strong>.</p>
<p>La obtención, el procesamiento y la disposición de un volumen considerable de datos, su convergencia en un modelo de optimización y su eventual integración hacia un solucionador, son procesos complejos, que implican con regularidad la reunión de herramientas poco compatibles.</p>
<p>Google Or-Tools, al permitir el <strong>modelamiento en diversos lenguajes de programación</strong>, ofrece un sinfín de posibilidades de integración entre herramientas de obtención y tratamiento de información; así mismo, ofrece posibilidades ilimitadas de desarrollo de soluciones, como por ejemplo interfaces de usuario amigables, o integración con sistemas de integración de recursos, app’s, plataformas webs, dispositivos con un sistema de conexión a internet de las cosas (IoT), y mucho más.</p>
<p>Suponga, por ejemplo, que quiere desarrollar un modelo que le permita mejorar la eficiencia del proceso de recogida de paquetes, un típico problema de distribución y recolección de última milla, abordado dentro de la investigación de operaciones como un problema <a href="https://ingenieriaindustrialonline.com/investigacion-de-operaciones/problema-de-enrutamiento-de-vehiculos-vrp-con-google-or-tools/"><strong>VRP (Vehicle Routing Problem)</strong></a>. En su versión básica, requerirá de un conjunto de nodos y el costo que representa el arco que une a cada par (origen y destino). Sin embargo, asumamos que el criterio de optimización está basado en la distancia entre nodos, y, además, que se pretende, dado el volumen de datos requeridos, integrar una interfaz de programación externa que le permita obtener los tiempos entre nodos desde una plataforma como Google Maps.</p>
<p>Por otro lado, la <a href="https://ingenieriaindustrialonline.com/investigacion-de-operaciones/problema-de-enrutamiento-de-vehiculos-capacitados-cvrp-con-google-or-tools/"><strong>flota de vehículos disponibles tiene una capacidad limitada (CVRP)</strong></a>, y la información relacionada al número de vehículos y su capacidad volumétrica, se encuentra actualizada todos los días en archivo <a data-toggle="tooltip" data-placement="top" class="post-tooltip tooltip-top" title="Los archivos CSV (del inglés comma-separated values) son un tipo de documento en formato abierto sencillo para representar datos en forma de tabla, en las que las columnas se separan por comas."><em>csv</em></a> accesible desde el servidor de la empresa.</p>
<p>La información relacionada con los destinos, o puntos de entrega, así mismo la dimensión volumétrica de los paquetes se puede obtener desde una solución desarrollada a la medida por la compañía, la cual mantiene la información actualizada en tiempo real y exporta diariamente estos datos en formato <a data-toggle="tooltip" data-placement="top" class="post-tooltip tooltip-top" title="Documento de Microsoft Excel"><em>xls</em></a>.</p>
<p>Pretender integrar los datos de entrada, que a su vez son salidas desde plataformas diferentes, en formatos diferentes; algunos de ellos, información en tiempo real; procesar y organizar dicha información, integrarlos en un modelo de optimización y luego ejecutar un solucionador, haciendo uso de las herramientas típicas como Solver, Storm, Tora, WinQSB, Crystall Ball, etc., resultaría sumamente complejo, y en algunos casos imposible.</p>
<p>Sin embargo, haciendo uso, por ejemplo, de un lenguaje de programación como <a data-toggle="tooltip" data-placement="top" class="post-tooltip tooltip-top" title="Lenguaje de programación interpretado cuya filosofía hace hincapié en la legibilidad de su código">Python</a>,</em> es posible desarrollar un código (<a data-toggle="tooltip" data-placement="top" class="post-tooltip tooltip-top" title="En informática, un script, secuencia de comandos">script</a>)</em> que automatice las solicitudes hacia una <a data-toggle="tooltip" data-placement="top" class="post-tooltip tooltip-top" title="La interfaz de programación de aplicaciones, conocida también por la sigla API">API</a></em> de Google Maps (<a data-toggle="tooltip" data-placement="top" class="post-tooltip tooltip-top" title="HTML, siglas en inglés de HyperText Markup Language (‘lenguaje de marcado de hipertexto’), hace referencia al lenguaje de marcado para la elaboración de páginas web"><em>HTML</em></a>), decodifique sus respuestas (<a data-toggle="tooltip" data-placement="top" class="post-tooltip tooltip-top" title="JSON (acrónimo de JavaScript Object Notation, «notación de objeto de JavaScript») es un formato de texto sencillo para el intercambio de datos">JSON</a>),</em> permitiendo disponer de la información relacionada con la distancia más probable para una hora de programación de salida de la flota en particular.</p>
<p>Así mismo, es posible ejecutar un script básico que extraiga la información contenida en un archivo <em>csv</em> y un archivo <em>xls</em>. Posteriormente, y haciendo uso de las librerías de enrutamiento de Google Or-Tools, toda esta data puede integrarse en un modelo de programación basada en restricciones que ejecutará una metaheurística como solucionador.<img decoding="async" class="aligncenter wp-image-25346" src="https://ingenieriaindustrialonline.com/wp-content/uploads/2021/04/Or-Tools.jpg" alt="Or-Tools" width="481" height="627" srcset="https://ingenieriaindustrialonline.com/wp-content/uploads/2021/04/Or-Tools.jpg 652w, https://ingenieriaindustrialonline.com/wp-content/uploads/2021/04/Or-Tools-230x300.jpg 230w" sizes="(max-width: 481px) 100vw, 481px" /></p>
<p>Como resultado, diariamente es posible mediante la integración de información actualizada en tiempo real en múltiples plataformas, a través de múltiples servidores, poder ejecutar un modelo de programación basado en restricciones que me permita obtener las rutas más eficientes de acuerdo a la metaheurística y a los parámetros del solucionador.</p>
<p>Dicho de otro modo, es posible integrar al modelo y al solucionador cualquier desarrollo que se base en un lenguaje común, por ejemplo: Python.</p>
<p style="text-align: center;"><strong><em>¡Sí, las ventajas potenciales son asombrosas!</em></strong></p>
<h2><strong>¿Qué tipo de modelos se pueden resolver mediante Google OR-Tools?</strong>
		<div id="que-tipo-de-modelos-se-pueden-resolver-mediante-google-or-tools" data-title="<strong>¿Qué tipo de modelos se pueden resolver mediante Google OR-Tools</strong>?" class="index-title"></div>
	</h2>
<p>Google OR-Tools incluye solucionadores para:</p>

		<div class="checklist tie-list-shortcode">
<ul>
<li>Programación de restricciones</li>
<li><a href="https://ingenieriaindustrialonline.com/investigacion-de-operaciones/programacion-lineal-en-google-or-tools/"><strong>Programación lineal</strong></a></li>
<li><a href="https://ingenieriaindustrialonline.com/investigacion-de-operaciones/programacion-lineal-entera-con-google-or-tools/"><strong>Programación entera y mixta</strong></a></li>
<li><a href="https://ingenieriaindustrialonline.com/investigacion-de-operaciones/problemas-de-asignacion-en-google-or-tools/"><strong>Problemas de asignación</strong></a></li>
<li><a href="https://ingenieriaindustrialonline.com/investigacion-de-operaciones/problema-de-la-ruta-mas-corta-en-google-or-tools/"><strong>Problemas de flujos</strong></a></li>
<li><a href="https://ingenieriaindustrialonline.com/investigacion-de-operaciones/problema-de-enrutamiento-de-vehiculos-vrp-con-google-or-tools/"><strong>Problemas de enrutamiento de vehículos</strong></a></li>
<li>Algoritmos gráficos</li>
</ul>

		</div>
	
<h2><strong>¿Qué tan potente es el solucionador?</strong>
		<div id="que-tan-potente-es-el-solucionador" data-title="¿Qué tan potente es el solucionador?" class="index-title"></div>
	</h2>
<p>De acuerdo al MiniZinc Challenge 2020, competencia internacional de solucionadores de programación de restricciones, Google OR-Tools obtuvo tres medallas doradas en cuatro categorías de evaluación.</p>
<table width="433">
<tbody>
<tr>
<td style="text-align: center;" width="122"><strong>Categoría</strong></td>
<td style="text-align: center;" width="95"><strong>Oro</strong></td>
<td style="text-align: center;" width="105"><strong>Plata</strong></td>
<td style="text-align: center;" width="111"><strong>Bronce</strong></td>
</tr>
<tr>
<td style="text-align: center;"><strong>Búsqueda fija</strong></td>
<td style="text-align: center;">SICStus Prolog</td>
<td style="text-align: center;">JaCoP</td>
<td style="text-align: center;">Choco 4</td>
</tr>
<tr>
<td style="text-align: center;"><strong>Búsqueda libre</strong></td>
<td style="text-align: center;"><strong>OR-Tools</strong></td>
<td style="text-align: center;">PicatSAT</td>
<td style="text-align: center;">Mistral 2.0</td>
</tr>
<tr>
<td style="text-align: center;"><strong>Búsqueda paralela</strong></td>
<td style="text-align: center;"><strong>OR-Tools</strong></td>
<td style="text-align: center;">PicatSAT</td>
<td style="text-align: center;">Mistral 2.0</td>
</tr>
<tr>
<td style="text-align: center;" width="122"><strong>Búsqueda abierta</strong></td>
<td style="text-align: center;"><strong>OR-Tools</strong></td>
<td style="text-align: center;">sunny-cp—</td>
<td style="text-align: center;">PicatSAT</td>
</tr>
</tbody>
</table>
<p>Fuente: <a href="https://www.minizinc.org/challenge2020/results2020.html"><em><strong>MiniZinc Challenge (2020)</strong></em></a></p>
<h2><strong>¿Cómo puedo instalar Google OR-Tools?</strong>
		<div id="como-puedo-instalar-google-or-tools" data-title="<strong>¿Cómo puedo instalar Google OR-Tools?</strong>" class="index-title"></div>
	</h2>
<p>Con asombro descubrimos desde esta plataforma (Ingeniería Industrial Online), que en la actualidad muchas personas nos escriben solicitando información para instalar WinQSB en computadores de 64 bits. El asombro es aún mayor cuando descubrimos que algunas instituciones de formación aún utilizan WinQSB como solucionador de modelos de investigación de operaciones.</p>
<p>Pues bien, esas incompatibilidades tecnológicas, no solo se han sorteado con Google OR-Tools, existen además múltiples solucionadores perfectamente compatibles con gran parte de los sistemas operativos de la actualidad. Ahora bien, OR-Tools es compatible con sistemas Linux, Mac y Windows; sin embargo, su instalación varía de acuerdo al lenguaje de programación que quieran utilizar.</p>
<p>Una guía completa de instalación la pueden encontrar en el siguiente enlace:</p>
<p><center><a href="https://developers.google.com/optimization/install" target="_blank" class="shortc-button medium blue">Guía de Instalación de<strong> Google OR-Tools</strong></a></center>&nbsp;</p>
<h2>Ventajas de ser un software de código abierto
		<div id="ventajas-de-ser-un-software-de-codigo-abierto" data-title="Ventajas de ser un software de código abierto" class="index-title"></div>
	</h2>
<p>Una de la mayores ventajas que presenta Google OR-Tools consiste en que es un software de código abierto, de tal manera que su modelo de desarrollo se basa en la colaboración. Esto representa un beneficio potencial, dado que cientos de personas, día a día, se encuentran formulando modelos de optimización en diversos lenguajes de programación.</p>
<p>Una evidencia de ello es la colaboración entorno a la formulación de problemas de enrutamiento de vehículos, ya que a través de las contribuciones que pueden observarse en <a href="http://github.com/google/or-tools">GitHub</a> o un su foro de discusión en <a href="https://groups.google.com/g/or-tools-discuss">Google Groups</a>, se han desarrollado modelos para diversas variaciones del modelo base, dentro de las que podemos encontrar:</p>

		<div class="thumbup tie-list-shortcode">
<ul>
<li>TSP</li>
<li><strong><a href="https://ingenieriaindustrialonline.com/investigacion-de-operaciones/problema-de-enrutamiento-de-vehiculos-vrp-con-google-or-tools/">VRP</a></strong></li>
<li><a href="https://ingenieriaindustrialonline.com/investigacion-de-operaciones/problema-de-enrutamiento-de-vehiculos-capacitados-cvrp-con-google-or-tools/"><strong>CVRP (Problema de enrutamiento de vehículos con restricciones de capacidad)</strong></a></li>
<li>VRPTW (Problema de enrutamiento de vehículos con ventanas de tiempo)</li>
<li>Problemas de enrutamiento de vehículos con restricciones de recursos</li>
<li>Problemas de enrutamiento de vehículos con abandonos y penalizaciones</li>
<li>Problemas de enrutamiento de vehículos con recogidas y entregas</li>
</ul>

		</div>
	
<p>Y mucho más, como colaboraciones a problemas de optimización específicos, integraciones con API&#8217;s desarrolladas por Google, como Distance Matrix API de Google Maps.</p>
<h2>¿Los requerimientos técnicos son un limitante para su uso?</h2>

		<div id="los-requerimientos-tecnicos-son-un-limitante-para-su-aprendizaje" data-title="¿Los requerimientos técnicos son un limitante para su aprendizaje?" class="index-title"></div>
	
<p>De ninguna manera. Y le vamos a explicar la razón.</p>
<p>Si queremos utilizar Google OR Tools en nuestro ordenador, sí tenemos algunos requerimientos técnicos, ahora bien, todos gratuitos. Requerimos la instalación de <em>Python</em>, un entorno de desarrollo integrado (IDE), y de la instalación de su librería (or tools).</p>
<p>Sin embargo, para su aprendizaje y uso básico, podemos utilizar entornos virtuales, como por ejemplo: <a href="https://colab.research.google.com/"><em><strong>Colaboratory de Google</strong></em></a>. ¿En qué consiste?</p>
<p>Colaboratory, también llamado «Colab», te permite ejecutar y programar en Python en tu navegador con las siguientes ventajas:</p>

		<div class="thumbup tie-list-shortcode">
<ul>
<li>No requiere configuración</li>
<li>Da acceso gratuito a GPUs (Unidades de procesamiento)</li>
<li>Permite compartir contenido fácilmente</li>
</ul>

		</div>
	
<p>Es decir, podemos utilizar toda la potencia de las máquinas de Google para ejecutar nuestros modelos&#8230; <em>¡Genial! </em></p>
<p>De hecho, vamos a utilizar esta herramienta en cada modelo que desarrollemos en este portal, compartiremos nuestros códigos y esperamos que les sean de gran utilidad.</p>
<hr />
<p>En próximos artículos desarrollaremos modelos de optimización y metaheurísticas haciendo uso de Google OR-Tools, de tal manera que de la mano descubran esta gran herramienta.</p>
<p>La entrada <a href="https://ingenieriaindustrialonline.com/investigacion-de-operaciones/que-es-y-para-que-sirve-google-or-tools/">¿Qué es y para qué sirve Google OR-Tools?</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/que-es-y-para-que-sirve-google-or-tools/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
