<?xml version="1.0" encoding="ISO-8859-1"?><article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<front>
<journal-meta>
<journal-id>0122-3461</journal-id>
<journal-title><![CDATA[Ingeniería y Desarrollo]]></journal-title>
<abbrev-journal-title><![CDATA[Ing. Desarro.]]></abbrev-journal-title>
<issn>0122-3461</issn>
<publisher>
<publisher-name><![CDATA[Fundación Universidad del Norte]]></publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id>S0122-34612008000200011</article-id>
<title-group>
<article-title xml:lang="es"><![CDATA[Problema de asignación óptima de salones resuelto con Búsqueda Tabú]]></article-title>
<article-title xml:lang="en"><![CDATA[Course timetabling problem resolved using Tabu Search]]></article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Franco Baquero]]></surname>
<given-names><![CDATA[John Fredy]]></given-names>
</name>
<xref ref-type="aff" rid="A01"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Toro Ocampo]]></surname>
<given-names><![CDATA[Eliana Mirledy]]></given-names>
</name>
<xref ref-type="aff" rid="A02"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Gallego Rendón]]></surname>
<given-names><![CDATA[Ramón Alfonso]]></given-names>
</name>
<xref ref-type="aff" rid="A02"/>
</contrib>
</contrib-group>
<aff id="A01">
<institution><![CDATA[,Universidad Estadual Paulista  ]]></institution>
<addr-line><![CDATA[ ]]></addr-line>
</aff>
<aff id="A02">
<institution><![CDATA[,Universidad Tecnológica de Pereira Ingeniería Industrial ]]></institution>
<addr-line><![CDATA[ ]]></addr-line>
<country>Colombia</country>
</aff>
<pub-date pub-type="pub">
<day>00</day>
<month>12</month>
<year>2008</year>
</pub-date>
<pub-date pub-type="epub">
<day>00</day>
<month>12</month>
<year>2008</year>
</pub-date>
<numero>24</numero>
<fpage>149</fpage>
<lpage>175</lpage>
<copyright-statement/>
<copyright-year/>
<self-uri xlink:href="http://www.scielo.org.co/scielo.php?script=sci_arttext&amp;pid=S0122-34612008000200011&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://www.scielo.org.co/scielo.php?script=sci_abstract&amp;pid=S0122-34612008000200011&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://www.scielo.org.co/scielo.php?script=sci_pdf&amp;pid=S0122-34612008000200011&amp;lng=en&amp;nrm=iso"></self-uri><abstract abstract-type="short" xml:lang="es"><p><![CDATA[La asignación de salones se plantea como un problema de optimización matemática; es un problema complejo y típico de la investigación de operaciones acerda del cual muchos grupos de investigadores alrededor del mundo discuten sobre la mejor forma de resolverlo. Se presenta el modelo matemático del problema, así como una metodología basada en la Búsqueda Tabú, con el fin de encontrar soluciones factibles que minimicen la función objetivo propuesta, mediante la propuesta de constructivos, estructura de vecindad y estrategias para desenvolver el proceso de búsqueda. La calidad de las soluciones encontradas se valida y compara con casos de prueba de la literatura especializada.]]></p></abstract>
<abstract abstract-type="short" xml:lang="en"><p><![CDATA[Classroom assignment is considered as a complex and typical mathematical optimization problem in operation research, that is tried to solve in different ways by several research groups all over the globe. A mathematical model and a methodology based on Tabú search are presented in order to find feasible solutions that minimize the objective function by using constructive algorithms, neighbor structures and other strategies that help the search process. The quality of the solutions found is validated and compared with probe cases found in the specialized literature.]]></p></abstract>
<kwd-group>
<kwd lng="es"><![CDATA[Búsqueda Tabú]]></kwd>
<kwd lng="es"><![CDATA[metaheurísticas]]></kwd>
<kwd lng="es"><![CDATA[optimización combinatorial]]></kwd>
<kwd lng="es"><![CDATA[programación de horarios de clase]]></kwd>
<kwd lng="en"><![CDATA[Tabu Search]]></kwd>
<kwd lng="en"><![CDATA[metaheuristics]]></kwd>
<kwd lng="en"><![CDATA[combinatorial optimization]]></kwd>
<kwd lng="en"><![CDATA[course timetabling]]></kwd>
</kwd-group>
</article-meta>
</front><body><![CDATA[  <font face="verdana" size="2">     <p align="center"><font size="4"><b>Problema de asignaci&oacute;n &oacute;ptima de salones resuelto con B&uacute;squeda Tab&uacute;</b></font></p>     <p align="center"><font size="3"><b>Course timetabling problem resolved using Tabu Search</b></font></p>     <p><b>John Fredy Franco Baquero</b><a href="#*">*</a>, <b>Eliana Mirledy Toro Ocampo</b><a href="#**">**</a>, <b>Ram&oacute;n Alfonso Gallego Rend&oacute;n</b><a href="#***">***</a></p>      <p><a name="*">*</a> Estudiante de Doctorado en Ingenier&iacute;a El&eacute;ctrica, Universidad Estadual Paulista &#40;Brasil). <a href="mailto:jffranco@gmail.com">jffranco@gmail.com</a></p>     <p><a name="**">**</a> Magister en Investigaci&oacute;n de Operaciones y Estad&iacute;stica. Magister en Ingenier&iacute;a El&eacute;ctrica, Universidad Tecnol&oacute;gica de Pereira. Docente asistente, Facultad de Ingenier&iacute;a Industrial, Universidad Tecnol&oacute;gica de Pereira &#40;Colombia). <a href="mailto:elianam@utp.edu.co">elianam@utp.edu.co</a></p>     <p><a name="***">***</a> Doctor en Ingenier&iacute;a El&eacute;ctrica, &Aacute;rea de Autom&aacute;tica, Universidad de Campi&ntilde;as &#40;UNICAMP). Docente titular, Facultad de Ingenier&iacute;a El&eacute;ctrica, Universidad Tecnol&oacute;gica de Pereira &#40;Colombia). <a href="mailto:ragr@utp.edu.co">ragr@utp.edu.co</a></p>     <p><i>Correspondencia:</i> Universidad Tecnol&oacute;gica de Pereira, Vereda La Julia, Risaralda &#40;Colombia).</p>      <p>Fecha de recepci&oacute;n: 30 de agosto de 2008<br/> Fecha de aceptaci&oacute;n: 27 de septiembre de 2008</p> <hr/>     <p><b>Resumen</b></p>     ]]></body>
<body><![CDATA[<p><i>La asignaci&oacute;n de salones se plantea como un problema de optimizaci&oacute;n matem&aacute;tica; es un problema complejo y t&iacute;pico de la investigaci&oacute;n de operaciones acerda del cual muchos grupos de investigadores alrededor del mundo discuten sobre la mejor forma de resolverlo. Se presenta el modelo matem&aacute;tico del problema, as&iacute; como una metodolog&iacute;a basada en la B&uacute;squeda Tab&uacute;, con el fin de encontrar soluciones factibles que minimicen la funci&oacute;n objetivo propuesta, mediante la propuesta de constructivos, estructura de vecindad y estrategias para desenvolver el proceso de b&uacute;squeda. La calidad de las soluciones encontradas se valida y compara con casos de prueba de la literatura especializada.</i></p>     <p><b>Palabras claves: </b>B&uacute;squeda Tab&uacute;, metaheur&iacute;sticas, optimizaci&oacute;n combinatorial, programaci&oacute;n de horarios de clase.</p> <hr/>     <p><b>Abstract</b></p>     <p>Classroom assignment is considered as a complex and typical mathematical optimization problem in operation research, that is tried to solve in different ways by several research groups all over the globe. A mathematical model and a methodology based on Tab&uacute; search are presented in order to find feasible solutions that minimize the objective function by using constructive algorithms, neighbor structures and other strategies that help the search process. The quality of the solutions found is validated and compared with probe cases found in the specialized literature.</p>     <p><b>Key words:</b> Tabu Search, metaheuristics, combinatorial optimization, course timetabling,</p> <hr/>      <p><font size="3"><b>INTRODUCCI&Oacute;N</b></font></p>      <p>Toda instituci&oacute;n de educaci&oacute;n debe poseer una suficiente cantidad de recursos en infraestructura y medios educativos que le permita impartir una educaci&oacute;n de alta calidad. Estos recursos deber&aacute;n ser lo suficientemente planificados y estudiados, a fin de que no se presente escasez o sobreoferta de ellos, pues se ocasionar&iacute;a en el primer caso deterioro en la calidad de la educaci&oacute;n y en el segundo, deterioro en sus finanzas. Las instituciones educativas en el proceso de formaci&oacute;n proponen una serie de asignaturas o eventos que deben ser impartidos a los estudiantes adscritos a ella, porque se requiere de una infraestructura y medios educativos adecuados.</p>      <p>Se ha observado de tiempo atr&aacute;s un crecimiento constante en la demanda de cupos estudiantiles en las instituciones de educaci&oacute;n, que exige cuantiosas inversiones. Estas inversiones en muchos de los casos podr&iacute;an diferirse en el tiempo si la instituci&oacute;n cuenta con herramientas de trabajo que le permita planificar el uso adecuado de sus recursos, entre los que est&aacute;n la infraestructura f&iacute;sica y medios educativos. Respecto a la primera, se deber&aacute; contar con una adecuada dotaci&oacute;n de salones, laboratorios, salones multimedia y auditorios que permitan desarrollar sus labores acad&eacute;micas con un adecuado grado de satisfacci&oacute;n; su asignaci&oacute;n deber&aacute; ser muy bien planificada a fin de establecer un uso adecuado.</p>      <p>Al inicio de cada per&iacute;odo acad&eacute;mico la administraci&oacute;n conoce las asignaturas a las que los estudiantes desean asistir, as&iacute; que debe distribuirlas dentro de su planta f&iacute;sica en su totalidad de modo que los interesados reciban las materias que solicitaron. El modelo plantea un conjunto de restricciones denominadas duras o de obligatorio cumplimiento y un conjunto de restricciones blandas cuyo cumplimiento es optativo.</p>      <p>De ser satisfechas las restricciones anteriores, se dice que la propuesta planteada es factible y en estas condiciones se podr&iacute;an iniciar las labores acad&eacute;micas. Sin embargo, usualmente se desea que los estudiantes desarrollen sus actividades de forma c&oacute;moda; para ello se plantean las restricciones denominadas blandas, que no son de obligatorio cumplimiento y, por el contrario, miden el grado de satisfacci&oacute;n por parte de los estudiantes. Este problema combinatorial es clasificado como del tipo no lineal entero mixto y es de dif&iacute;cil soluci&oacute;n. Clasificado como NP completo, la forma de resolverlo es a trav&eacute;s de algoritmos computacionales, es decir, los llamados algoritmos heur&iacute;sticos o metaheur&iacute;sticos, entre otros.</p>      ]]></body>
<body><![CDATA[<p>Dada la complejidad del problema, grupos de investigadores alrededor del mundo se han dado a la tarea generar metodolog&iacute;as capaces de resolver este problema, tratando de mejorar los resultados expuestos por otros equipos en cuanto a calidad y tiempo requerido para encontrar la respuesta. Adicional a esto, se ha creado una amplia bibliograf&iacute;a disponible en la p&aacute;gina oficial de la competencia para asignaci&oacute;n de salones &#40;Internacional Timetabling Competition) &#91;<a href="#1">1</a>&#93;, as&iacute; como los casos de prueba; cabe destacar que a&uacute;n no se ha encontrado una soluci&oacute;n global para cada caso, as&iacute; que el problema sigue sin resolverse por completo.</p>      <p>Una gran variedad de m&eacute;todos se han descrito en la literatura para resolver el problema, incluso probados con casos reales. Estos m&eacute;todos se dividen en cuatro tipos: m&eacute;todos secuenciales &#91;<a href="#2">2</a>&#93;, &#91;<a href="#3">3</a>&#93;, m&eacute;todos de clusterizaci&oacute;n &#91;<a href="#4">4</a>&#93;, &#91;<a href="#5">5</a>&#93;, m&eacute;todos basados en restricciones &#91;<a href="#6">6</a>&#93;, y los m&eacute;todos metaheur&iacute;sticos &#91;<a href="#7">7</a>&#93;. Estos &uacute;ltimos cuentan con un gran desarrollo en la &uacute;ltimas dos d&eacute;cadas, gracias a t&eacute;cnicas como recocido simulado, <i>B&uacute;squeda Tab&uacute;</i>, gen&eacute;ticos, m&eacute;todos h&iacute;bridos, entre otros.</p>      <p>Otra caracter&iacute;stica importante encontrada en los trabajos publicados, es el enfoque del desarrollo que han alcanzado. Se pueden dividir en dos tipos: los modelos matem&aacute;ticos y los heur&iacute;sticos, es decir, los que tienen una base matem&aacute;tica o se apoyan en ella, y los que utilizan m&eacute;todos algor&iacute;tmicos.</p>      <p>En la literatura especializada ambos enfoques tienen tanto adeptos como detractores. Una de las ventajas del m&eacute;todo matem&aacute;tico permite mencionarlo como el m&aacute;s riguroso y exacto, pero con la desventaja de su dif&iacute;cil formulaci&oacute;n matem&aacute;tica sumada a la gran cantidad de recursos computacionales que requiere. En cambio, los heur&iacute;sticos representan una facilidad para la puesta en marcha en el computador y en la confecci&oacute;n algor&iacute;tmica; sin embargo, la principal desventaja es el poco &eacute;nfasis que le da al modelo matem&aacute;tico a&uacute;n cuando este haya sido planteado desde el inicio del problema, por lo cual impide el desarrollo de una aplicaci&oacute;n general.</p>      <p>Este trabajo propone una metodolog&iacute;a para la soluci&oacute;n del problema de asignaci&oacute;n &oacute;ptima de salones usando la t&eacute;cnica de optimizaci&oacute;n combinatorial <i>B&uacute;squeda Tab&uacute;</i>. Se propone un modelo matem&aacute;tico original que muestra las restricciones de forma expl&iacute;cita y compacta. Adem&aacute;s, se plantean algoritmos constructivos para generar una configuraci&oacute;n inicial de buena calidad y se define la estructura de vecindad para la b&uacute;squeda local con <i>B&uacute;squeda Tab&uacute;.</i></p>      <p>Este documento se presenta de la siguiente forma: en la secci&oacute;n 2 se explican algunas generalidades del problema de asignaci&oacute;n de salones; en la secci&oacute;n 3 se indica el modelo matem&aacute;tico propuesto; en la secci&oacute;n 4 se presentan los conceptos b&aacute;sicos de la B&uacute;squeda Tab&uacute; y su adecuaci&oacute;n al problema espec&iacute;fico; la secci&oacute;n 5 se refiere a los casos de prueba y resultados obtenidos y, finalmente, en la &uacute;ltima parte se plantean conclusiones y futuros trabajos alrededor de la tem&aacute;tica.</p>      <p>2. <font size="3"><b>DEFINICI&Oacute;N DEL PROBLEMA</b></font></p>      <p>Los problemas de asignaci&oacute;n de salones se asocian a la labor de organizar una secuencia de eventos &#40;generalmente asignaturas o ex&aacute;menes), en un per&iacute;odo de tiempo determinado, satisfaciendo un conjunto de restricciones. Las restricciones comprenden hechos como evitar los choques de horario, incapacidad de las salas, infra o sobrevaloraci&oacute;n de la carga de trabajo e inadecuada disposici&oacute;n para estudiantes y profesores, sub o sobreasignaci&oacute;n de recursos o equipos, entre otros &#91;<a href="#8">8</a>&#93;. Generalmente el problema considera el siguiente conjunto de restricciones: asignaci&oacute;n de recursos, asignaci&oacute;n de tiempo, restricciones de tiempo entre sesiones, dispersi&oacute;n de las sesiones, coherencia de las reuniones, capacidad de las salas, continuidad.</p>      <p>2.1. <b>Tipos de problemas de asignaci&oacute;n de salones</b></p>      <p>Un gran n&uacute;mero de variaciones de estos problemas han sido propuestos en la literatura &#91;<a href="#9">9</a>&#93;, &#91;<a href="#10">10</a>&#93;, &#91;<a href="#11">11</a>&#93;, los cuales difieren del tipo de eventos, instituci&oacute;n involucrada &#40;universidad o escuela), y de sus restricciones. De acuerdo a lo anterior se pueden identificar tres grupos:</p>      ]]></body>
<body><![CDATA[<p>2.1.1.<b><i> Asignaci&oacute;n de horarios escolares</i></b></p>      <p>Tambi&eacute;n conocido como <i>Class-Teacher Problem,</i> considera el horario semanal para las sesiones de las asignaturas de una escuela o colegio. Dada las asignaturas, profesores, bloques y una matriz de requerimientos &#40;que establece el n&uacute;mero de sesiones que cada profesor dicta por asignatura), el problema consiste en asignar las sesiones a los per&iacute;odos de tiempo, de tal manera que ning&uacute;n profesor o asignatura tenga m&aacute;s de una sesi&oacute;n en el mismo per&iacute;odo y que todas las sesiones de la asignatura est&eacute;n presentes en el horario. </p>      <p>2.1.2. <b><i>Asignaci&oacute;n de horarios universitarios</i></b></p>      <p>Este problema consiste en organizar un horario para las sesiones de un conjunto de asignaturas, considerando un n&uacute;mero determinado de salas y bloques de tiempo. La principal diferencia entre un horario escolar y uno universitario es la forma como se considera a los estudiantes. En el &aacute;mbito escolar estos pueden considerarse una entidad, debido a que es un grupo de alumnos que toman las mismas asignaturas. En el caso universitario, generalmente con r&eacute;gimen semiflexible, los estudiantes toman distintas asignaturas, por lo que se generan asignaturas en com&uacute;n con otros estudiantes. Otra diferencia que se presenta son los profesores. En las escuelas se encargan de ense&ntilde;ar una asignatura y en la universidad generalmente imparten de 1 a 3 asignaturas. Adem&aacute;s, se presenta el problema de la capacidad de las salas ya que cada asignatura tiene asociada su propio requerimiento; por el contrario, para el caso de las escuelas se pueden destinar todos los salones como aptos.</p>      <p align="center"><a name="t1"><img src="img/revistas/inde/n24/24a11t1.jpg"></a></p>      <p>2.1.3.<b>Asignaci&oacute;n de horarios de ex&aacute;menes</b></p>      <p>Este problema consiste en asignar el horario a los ex&aacute;menes, determinando la cantidad de salas y tiempo para realizar cada examen. La cantidad de ex&aacute;menes depende de los requisitos de las instituciones para evaluar los conocimientos de los alumnos que cursan una asignatura en particular con el fin de destacar las diferencias existentes entre los problemas de asignaci&oacute;n de horarios universitarios y escolares, se describen en la tabla 1 sus principales caracter&iacute;sticas. Para mayor informaci&oacute;n sobre Timetabling y sus variantes, revisar el art&iacute;culo realizado por Schaerf &#91;<a href="#8">8</a>&#93;.</p>      <p>2.2. <b>Caracter&iacute;sticas del problema</b></p>      <p>El modelo empleado en este trabajo se basa en el utilizado por la comunidad cient&iacute;fica del Reino Unido que fue desarrollado para un concurso denominado <i>International Timetabling Competition</i> con el cual se busca resolver el problema <i>University </i>TT &#91;<a href="#1">1</a>&#93;, planteando un conjunto de restricciones denominadas duras o de obligatorio cumplimiento y un conjunto de restricciones blandas que no son de obligatorio cumplimiento.</p>      <p>El conjunto de <i>restricciones duras</i> de estricto cumplimiento son las siguientes:</p>  <ul>     ]]></body>
<body><![CDATA[<li>El sal&oacute;n asignado debe cumplir con requisitos apropiados para desarrollar el evento tales como espacio, laboratorio, computadores, medios audiovisuales, entre otros.</li>     <li>Los horarios entregados a los estudiantes no deben presentar conflictos de horarios, es decir, que un estudiante precise asistir a dos eventos diferentes a la misma hora</li>     <li>Asimismo no es conveniente que en un sal&oacute;n se presenten dos eventos diferentes a la misma hora.</li>     </ul>      <p>De ser satisfechas las restricciones anteriores se dice que la propuesta planteada es factible y en estas condiciones se podr&iacute;an iniciar las labores acad&eacute;micas. Sin embargo, usualmente se desea que los estudiantes desarrollen sus actividades de forma c&oacute;moda, para ello se plantean las restricciones denominadas blandas, las cuales no son de obligatorio cumplimiento y, por el contrario, miden el grado de satisfacci&oacute;n por parte de los estudiantes y son las siguientes:</p>  <ul>     <li>La asistencia continuada a varios eventos.</li>     <li>Asistir en un d&iacute;a a tan solo un evento.</li>     <li>Asistir a un evento que se dicte en la &uacute;ltima hora del d&iacute;a.</li>     </ul>      <p>El incumplimiento de alguna de estas restricciones es penalizada por la funci&oacute;n objetivo, increment&aacute;ndola en 1, por cada restricci&oacute;n de este tipo que sea violada.</p>      ]]></body>
<body><![CDATA[<p>Seg&uacute;n lo anterior, el caso se formula como un problema de programaci&oacute;n de los horarios de clase, definiendo la hora y el sal&oacute;n para cada evento de tal forma que si se cumplen las restricciones duras, se minimizan las restricciones blandas.</p>      <p>3. <font size="3"><b> B&Uacute;SQUEDA TAB&Uacute;</b></font></p>      <p>3.1. <b>Generalidades</b></p>      <p><i>B&uacute;squeda Tab&uacute; </i>&#91;<a href="#12">12</a>&#93;, &#91;<a href="#13">13</a>&#93;, &#91;<a href="#14">14</a>&#93; es una t&eacute;cnica de optimizaci&oacute;n combinatorial que proviene de la inteligencia artificial y usa conceptos de memoria adaptativa y exploraci&oacute;n sensible.</p>      <p>Un algoritmo de B&uacute;squeda Tab&uacute; completo utiliza t&eacute;cnicas de exploraci&oacute;n y de memoria avanzadas, como son: memoria de corto y largo plazo, estrategias de intensificaci&oacute;n, diversificaci&oacute;n, oscilaci&oacute;n estrat&eacute;gica, <i>path relinking </i>y lista de configuraciones de &eacute;lite, entre otras &#91;<a href="#12">12</a>&#93;.</p>      <p>3.2.<b> Funci&oacute;n objetivo</b></p>      <p>Esta t&eacute;cnica resuelve problemas del tipo (1):</p>      <p align="center"><a name="e1"><img src="img/revistas/inde/n24/24a11e1.jpg"></a></p>      <p>Donde f es una funci&oacute;n general, lineal o no lineal, y X es un conjunto de restricciones que pueden ser lineales o no lineales tambi&eacute;n. Las variables x pueden ser de naturaleza continua, o entera o mixta. La exploraci&oacute;n sensible de <i>B&uacute;squeda Tab&uacute;</i> se basa en la idea de que una mala decisi&oacute;n tomada mediante una estrategia produce m&aacute;s informaci&oacute;n que una buena selecci&oacute;n hecha de forma aleatoria.</p>      <p>3.3. <b>Aspectos b&aacute;sicos de B&uacute;squeda Tab&uacute;</b></p>      ]]></body>
<body><![CDATA[<p>3.3.1.<b> <i>Configuraci&oacute;n inicial</i></b></p>      <p>La configuraci&oacute;n inicial puede ser obtenida aleatoriamente, por medio de un algoritmo constructivo o alguna t&eacute;cnica heur&iacute;stica que utilice &iacute;ndices de sensibilidad. Una configuraci&oacute;n aleatoria puede tener la ventaja de que evita una convergencia prematura, pero una configuraci&oacute;n inicial de mala calidad conduce a un esfuerzo computacional mayor. Una buena configuraci&oacute;n inicial que se encuentre con el uso de constructivo puede estar en una regi&oacute;n promisoria y puede conducir a soluciones de alta calidad con bajos esfuerzos computacionales.</p>      <p>3.3.2.<b> <i>Generaci&oacute;n del vecindario</i></b></p>      <p>Un vecino de una configuraci&oacute;n <i>X</i> es una configuraci&oacute;n <i>X&#39;</i> obtenida a partir de X por medio de una transici&oacute;n simple. Siendo que en la mayor&iacute;a de los casos el vecindario <i>N(X)</i> puede ser muy grande por cuanto implica un elevado esfuerzo de c&oacute;mputo en el proceso de b&uacute;squeda local, se debe reducir el n&uacute;mero de vecinos a un conjunto <i>N*(X)</i> m&aacute;s peque&ntilde;o que <i>N(X)</i>, redefiniendo el vecindario. Se tienen diferentes formas de reducir el vecindario:</p>  <ul>     <li>Tomar un n&uacute;mero determinado de configuraciones seleccionadas aleatoriamente del conjunto N(X).</li>     <li>Aspiraci&oacute;n adicional. Se utiliza alg&uacute;n criterio como puede ser la reducci&oacute;n de la funci&oacute;n objetivo hasta cierto valor. Cuando se encuentra una configuraci&oacute;n que cumpla la condici&oacute;n, se eval&uacute;an otras configuraciones adicionales. Se deben fijar los n&uacute;meros m&iacute;nimo y m&aacute;ximo de configuraciones a ser analizadas.</li>     <li>Lista de reducci&oacute;n de candidatos de &eacute;lite. Se selecciona un conjunto de configuraciones vecinas con atributos particulares, las cuales son llamadas configuraciones de &eacute;lite.</li>     </ul>      <p>3.3.3. <b><i>Selecci&oacute;n del mejor vecino</i></b></p>      <p>Se eval&uacute;a cada vecino, se determina su funci&oacute;n objetivo y se verifica si cumple las restricciones del problema a resolver para determinar la factibilidad de la configuraci&oacute;n vecina. Los vecinos son clasificados en una lista de acuerdo con el valor de la funci&oacute;n objetivo y el proceso selecciona el mejor candidato.</p>      ]]></body>
<body><![CDATA[<p>El primer candidato de la lista (de mejor funci&oacute;n objetivo) es seleccionado siempre que el movimiento efectuado para pasar de la configuraci&oacute;n actual a la configuraci&oacute;n vecina no se encuentre prohibido <i>(estado Tab&uacute;)</i>; si es factible este modo de selecci&oacute;n, se denomina selecci&oacute;n agresiva, que imita las caracter&iacute;sticas de un algoritmo goloso.</p>      <p>Si el mejor vecino de la lista de candidatos est&aacute; clasificado como tab&uacute; por el proceso de optimizaci&oacute;n, el criterio de aspiraci&oacute;n permite que sea seleccionado a pesar de la prohibici&oacute;n, si la configuraci&oacute;n analizada mejora la configuraci&oacute;n incumbente (es la mejor soluci&oacute;n encontrada hasta el momento por el proceso).</p>      <p>Si en el vecindario generado no existe ninguna configuraci&oacute;n que mejore la funci&oacute;n objetivo, entonces se selecciona la mejor de las peores en tanto que no haya sido clasificada como <i>Tab&uacute;</i> durante el proceso de optimizaci&oacute;n. Esta estrategia evita que se quede atrapado en &oacute;ptimos locales.</p>      <p> 3.3.4. <b><i>Actualizaci&oacute;n de la estructura Tab&uacute;</i></b></p>      <p><i>B&uacute;squeda Tab&uacute; </i>usa una estructura que tiene la misma codificaci&oacute;n de la configuraci&oacute;n X, para almacenar la informaci&oacute;n de los atributos que han cambiado o que han permanecido inalterables en el proceso de b&uacute;squeda. Esta informaci&oacute;n se almacena en las memorias de corto y largo plazo, las cuales pueden tener un criterio de almacenamiento fijo o variable a lo largo del proceso, dependiendo del comportamiento de la b&uacute;squeda. Esto es lo que constituye la memoria adaptativa. La memoria usada en <i>B&uacute;squeda Tab&uacute;</i> puede ser expl&iacute;cita o por atributos &#91;<a href="#12">12</a>&#93;. La memoria expl&iacute;cita almacena la informaci&oacute;n completa de configuraciones &eacute;lite (configuraciones de buena calidad) encontradas durante la b&uacute;squeda. La memoria basada en atributos almacena la informaci&oacute;n de los atributos que cambian al pasar de una configuraci&oacute;n a otra, presentando como ventajas la facilidad de almacenamiento, manipulaci&oacute;n y verificaci&oacute;n. Con esto se evita regresar a configuraciones ya visitadas, lo cual es ventajoso; pero tambi&eacute;n se podr&iacute;an dejar de conocer regiones no visitadas que tengan atributos prohibidos de aquellas ya exploradas.</p>      <p><font size="3">4. <b> MODELO MATEM&Aacute;TICO Y CODIFICACI&Oacute;N</b></font></p>      <p>La informaci&oacute;n del problema es codificada a trav&eacute;s de matrices y vectores como se describe a continuaci&oacute;n:</p>  <ul>     <li>La informaci&oacute;n de las caracter&iacute;sticas requeridas por los eventos se almacena en la matriz caracter&iacute;sticas_eventos, en la que para cada evento (filas), respecto a cada caracter&iacute;stica (columnas), aparece un &#39;1&#39; si el evento requiere la caracter&iacute;stica o aparece un &#39;0&#39; en caso contrario.</li>     <li>La informaci&oacute;n de las caracter&iacute;sticas que tienen los salones se almacena en la matriz caracter&iacute;sticas_salones, en la que para cada sal&oacute;n (filas), respecto a cada caracter&iacute;stica (columnas), aparece un &#39;1&#39; si el sal&oacute;n tiene la caracter&iacute;stica o aparece un &#39;0&#39; en caso contrario.</li>     <li>Se tiene un vector que indica la capacidad de los salones: capacidad_salones, en el que en la posici&oacute;n &#39;i&#39; se almacena la capacidad del sal&oacute;n &#39;i&#39;.</li>     ]]></body>
<body><![CDATA[<li>La informaci&oacute;n de los estudiantes que est&aacute;n matriculados en cada evento se representa en la matriz eventos_estudiantes, en la que en la posici&oacute;n (i,j) tiene un &#39;1&#39; si el estudiante &#39;j&#39; (columna) asiste al evento &#39;i&#39; (fila) o tiene un &#39;0&#39; en caso contrario.</li>     <li>A partir de las matrices caracter&iacute;sticas_eventos, caracter&iacute;sticas_salones y del vector capacidad_salones se puede crear la matriz eventos_salones que en la posici&oacute;n (i,j) tendr&aacute; un &#39;1&#39; si el evento &#39;i&#39; (filas) se puede programar en el sal&oacute;n &#39;j&#39; (columnas) o tendr&aacute; un &#39;0&#39; en caso contrario. Esta matriz resume las condiciones de caracter&iacute;sticas y capacidad de los salones frente a los eventos.</li>     <li>La programaci&oacute;n de los eventos se puede representar en una matriz (evento_hora_sal&oacute;n) con n&uacute;mero de filas igual al n&uacute;mero de eventos y con dos columnas. Para cada evento, en la primera columna se ubica la hora en la que se programa y en la segunda columna se almacena el sal&oacute;n donde se realiza.</li>     <li>Se puede formar la matriz horario_eventos con n&uacute;mero de filas igual al n&uacute;mero de eventos y con 45 columnas que corresponden al total de horas. La matriz horario_eventos en la posici&oacute;n (i,j) tiene un &#39;1&#39; si el evento &#39;i&#39; se programa a la hora &#39;j&#39; o tiene un &#39;0&#39; en caso contrario.</li>     <li>El horario de los estudiantes se puede generar a partir de las matrices evento_hora_sal&oacute;n y eventos_estudiantes, con lo que puede conocer la hora y el sal&oacute;n programados para cada estudiante seg&uacute;n los eventos que tenga matriculados.</li>     </ul>      <p>Para facilitar la comprobaci&oacute;n de las restricciones blandas se forma la matriz horario_estudiante con n&uacute;mero de filas igual al n&uacute;mero de estudiantes y con 45 columnas que corresponden al total de horas. La matriz horario_estudiante en la posici&oacute;n (i,j) tiene un &#39;1&#39; si el estudiante &#39;i&#39; tiene programado un evento en la hora &#39;j&#39; o tiene un &#39;0&#39; en caso contrario. La matriz horario_estudiante se puede calcular como:</p>      <p>HA = EA &#39;ET</p>      <p><i>donde</i></p>      <p>HA :<i> matriz horario de los estudiantes</i></p>      ]]></body>
<body><![CDATA[<p>ET : <i>matriz horario de los eventos</i></p>      <p>EA :<i> matriz evento estudiante</i></p>      <p>A continuaci&oacute;n se presenta el modelo matem&aacute;tico para el problema de programaci&oacute;n &oacute;ptima de horarios de clase.</p>      <p>La restricci&oacute;n (<a href="#e1">1</a>) asegura que cada evento se programa una sola vez. La restricci&oacute;n <a href="#e2">(2)</a> representa la condici&oacute;n de que en un sal&oacute;n, en un bloque de tiempo, no se puede programar m&aacute;s de un evento. La restricci&oacute;n <a href="#e3">(3)</a> permite garantizar que el sal&oacute;n asignado cumple con la capacidad y las caracter&iacute;sticas requeridas por el evento correspondiente. La restricci&oacute;n <a href="#e4">(4)</a> previene que se presenten cruces de horarios para los estudiantes; esta restricci&oacute;n usa la matriz HA, que contiene los horarios de los estudiantes, construida seg&uacute;n las ecuaciones <a href="#e8">(8)</a> y <a href="#e9">(9)</a>. La ecuaci&oacute;n <a href="#e5">(5)</a> define la variable <i>hf</i> que representa el n&uacute;mero de eventos programados al final de cada d&iacute;a para todos los estudiantes. La ecuaci&oacute;n <a href="#e6">(6)</a> define la variable <i>hu</i> que representa el n&uacute;mero de eventos &uacute;nicos en cada d&iacute;a para todos los estudiantes. La ecuaci&oacute;n <a href="#e7">(7)</a> define la variable <i>hc</i> que representa los casos en que se programan m&aacute;s de dos eventos consecutivos en un d&iacute;a para todos los estudiantes.</p>      <p align="center"><a name="e2"><img src="img/revistas/inde/n24/24a11e2.jpg"></a></p>      <p><font size="3">5. <b>APLICACI&Oacute;N DE B&Uacute;SQUEDA TAB&Uacute; A LA PROGRAMACI&Oacute;N &Oacute;PTIMA DE HORARIOS DE CLASE</b>.</font></p>      <p>La metodolog&iacute;a empleada para la soluci&oacute;n del problema sigue cuatro fases. En la primera de ellas se obtiene una programaci&oacute;n inicial de los eventos por medio de un constructivo, para que los eventos sean programados en salones habilitados, a fin de tener una configuraci&oacute;n inicial con pocas restricciones duras violadas. En la segunda fase se emplea una b&uacute;squeda local para disminuir las restricciones duras violadas. En la tercera fase se alcanza una soluci&oacute;n factible, en la que se cumplen todas las restricciones duras, empleando <i>B&uacute;squeda Tab&uacute;</i> para minimizar restricciones duras. En la cuarta fase se usa <i>B&uacute;squeda Tab&uacute;</i> para minimizar las restricciones blandas, manteniendo la factibilidad de la configuraci&oacute;n. El desarrollo de las cuatro fases se muestra en la <a href="#f1">figura 1.</a></p>      <p align="center"><a name="f1"><img src="img/revistas/inde/n24/24a11f1.jpg"></a></p>      <p>5.1.<b> Constructivo para generar una configuraci&oacute;n inicial</b></p>      <p>El constructivo propuesto para generar una configuraci&oacute;n inicial sigue la idea de programar de manera prioritaria los eventos que tienen menor n&uacute;mero de salones habilitados. Para esto se crea una lista ordenada de eventos de menor a mayor n&uacute;mero de salones habilitados. Inicialmente se programan los eventos que solo se pueden efectuar en un determindo sal&oacute;n, para evitar que quede por fuera el suceso en cuesti&oacute;n. Una vez que se pautan los eventos que tienen un solo sal&oacute;n habilitado, se contin&uacute;a con la programaci&oacute;n de los siguientes acontecimientos con dos salones habilitados, luego con tres salones y as&iacute;, sucesivamente, en orden creciente.</p>      ]]></body>
<body><![CDATA[<p>Para programar un evento primero se busca un sal&oacute;n habilitado usando la matriz <i>eventos_salones</i> y se debe encontrar un bloque de tiempo libre para asignarle, revisando que a esa misma hora no existan otros ya programados con estudiantes comunes entre ellos, usando la matriz &#39;estudiantes comunes&#39;. En caso de que no se cumpla la condici&oacute;n anterior, el evento se deja temporalmente sin programar, para evitar generar restricciones duras de cruces de horarios de estudiantes.</p>      <p>Al final del proceso anterior, se buscan salones habilitados y disponibles, para ubicar los eventos a&uacute;n no programados, sin importar que en el bloque de tiempo que se vaya a asignar existan actividades que ya fueron programadas y que tienen estudiantes comunes con el nuevo evento a incluirse. Debido a que es posible que no se encuentren salones habilitados que est&eacute;n disponibles para algunos eventos no programados, entonces se buscan salones disponibles aunque no sean preparados para su desarrollo.</p>      <p>Como resultado de la programaci&oacute;n efectuada, se tendr&aacute;n algunos eventos en un sal&oacute;n que no est&aacute; habilitado para ellos. El siguiente objetivo del constructivo consiste en asignar salones adecuados para todos los eventos. Por ello se buscan los sitios adecuados para las actividades con salones no habilitados a partir del intercambio de los lugares entre dos de esos eventos, usando la matriz<i> eventos_salones, </i>de tal manera que ambas actividades resulten programadas en instalaciones habilitadas. En caso de que a&uacute;n se tengan problemas con los salones y no existan intercambios que solucionen estos problemas, se identifican las horas disponibles en todos los lugares, para intentar mover eventos sin problemas a otro sitio habilitado para ello. De tal forma, en el espacio dejado por estos eventos se pueden programar otros que ten&iacute;an problemas locativos. Finalmente, el constructivo entrega una configuraci&oacute;n inicial en la que todos los eventos se encuentran programados en salones habilitados, por lo que no se violan restricciones duras del segundo tipo (compatibilidad entre eventos y salones), pero pueden existir cruces de horarios para los estudiantes (violaci&oacute;n de restricciones duras del tercer tipo).</p>      <p>En la <a href="#f2">figura 2</a> se muestra un diagrama del constructivo propuesto para generar una configuraci&oacute;n inicial.</p>      <p align="center"><a name="f2"><img src="img/revistas/inde/n24/24a11f2.jpg"></a></p>      <p>5.2. <b>Evaluaci&oacute;n de la funci&oacute;n objetivo.</b></p>      <p>Para evaluar la funci&oacute;n objetivo de una programaci&oacute;n de horarios, se cuentan las restricciones duras y blandas que son violadas. Se empieza por revisar las restricciones duras de la configuraci&oacute;n, verificando si el sal&oacute;n en el que se programa cada evento est&aacute; habilitado, es decir, si tiene las caracter&iacute;sticas y la capacidad requeridas para su desarrollo; por esto se usa la matriz <i>evento_ sal&oacute;n.</i> Luego se revisa si existen cruces de horarios para los estudiantes, analizando para cada hora si los eventos programados en todos los salones en dicho lapso tienen estudiantes en com&uacute;n. De esta manera, se detecta un cruce de horarios para dichos estudiantes mediante la matriz estudiantes comunes. Para lograrlo se analizan todas las posibilidades de combinaciones de dos salones a la misma hora; la ventaja de revisar esta restricci&oacute;n de la manera mencionada reside en que no es necesario generar y analizar el horario de todos los estudiantes de forma expl&iacute;cita, sino m&aacute;s bien realizar el an&aacute;lisis desde el punto de vista de los eventos, dado que la cantidad de operaciones computacionales es menor y la evaluaci&oacute;n de la configuraci&oacute;n se hace m&aacute;s eficiente. Debido a la codificaci&oacute;n usada, siempre se cumple que en un sal&oacute;n a una misma hora no se programa m&aacute;s de un evento, por lo que es innecesario verificar esta restricci&oacute;n.</p>      <p>Para la revisi&oacute;n de las restricciones blandas, se debe generar el horario de los estudiantes; conocida la programaci&oacute;n de los eventos y los estudiantes que los asisten, se usa la matriz <i>evento_estudiante_explicito,</i> que guarda la informaci&oacute;n de la matriz<i> eventos_estudiantes</i> de manera eficiente, aprovechando su tendencia esparcidora, dado que no todos los estudiantes asisten a un evento en particular. De esta manera, la generaci&oacute;n de los horarios se hace de forma eficiente: se revisa el de cada estudiante y d&iacute;a por d&iacute;a; si se presentan m&aacute;s de dos eventos consecutivos o eventos &uacute;nicos, constituyen violaciones de restricciones blandas. Para conocer el n&uacute;mero de estudiantes que tienen programados eventos en una hora final de un d&iacute;a, se revisa en cada sal&oacute;n, a la hora final de cada d&iacute;a, si existe un evento programado; en dicho caso, el n&uacute;mero de restricciones blandas violadas corresponde al n&uacute;mero de estudiantes que asisten al evento referido.</p>      <p><b>&Iacute;ndice de sensibilidad</b></p>      <p>De forma simult&aacute;nea a la evaluaci&oacute;n de la funci&oacute;n objetivo de una configuraci&oacute;n, se crea un &iacute;ndice para cada evento; mediante un contador que almacena el n&uacute;mero de problemas asociados a este, teniendo &iacute;ndices diferentes para las restricciones duras y las blandas, seg&uacute;n sea el tipo de problema. Con estos &iacute;ndices se orienta el proceso de b&uacute;squeda.</p>      ]]></body>
<body><![CDATA[<p>5.3. <b>Estructura de vecindad</b></p>      <p>Ya que el constructivo permite encontrar una configuraci&oacute;n inicial en la que los eventos no tienen problemas con los salones, es conveniente definir una estructura de vecindad en la cual las nuevas configuraciones sigan manteniendo la factibilidad, seg&uacute;n los salones asignados, pero calibrando el tama&ntilde;o del vecindario en cantidad y calidad.</p>      <p>El vecindario de una configuraci&oacute;n consiste en configuraciones obtenidas haciendo peque&ntilde;os cambios a la configuraci&oacute;n actual. Un peque&ntilde;o cambio en la configuraci&oacute;n puede ser la modificaci&oacute;n de hora o de sal&oacute;n para un evento. Con el fin de alterar la hora de un evento, sin que se afecte su factibilidad por el sal&oacute;n, se puede intercambiar el bloque de tiempo de dicho evento con el de otro suceso en el mismo lugar. Tambi&eacute;n es posible variar el sal&oacute;n en el que se programa un evento, movi&eacute;ndolo a un bloque de tiempo libre en otro sitio (o el mismo) siempre que el nuevo sal&oacute;n se encuentre habilitado para el evento. El movimiento anterior puede, adem&aacute;s, implicar un cambio en la hora del evento.</p>      <p>Seleccionando un evento, se pueden generar configuraciones vecinas a partir de:</p> <ul>     <li>Intercambio del bloque de tiempo del evento con otro suceso en el mismo sal&oacute;n. </li>     <li> Movimiento del evento a un bloque de tiempo libre, en un sal&oacute;n habilitado para la actividad.</li>     </ul>      <p>Para seleccionar los eventos que sirven para generar la vecindad se usa el &iacute;ndice de sensibilidad que se forma al calcular la funci&oacute;n objetivo. De esta forma, haciendo una lista ordenada, los eventos que van a cambiar son aquellos que tienen un &iacute;ndice asociado mayor.</p>      <p>Para ilustrar la estructura de vecindad propuesta, hay que considerar la programaci&oacute;n de los eventos mostrada en la <a href="#f3">figura 3</a>. Suponer que el evento 56, que est&aacute; programado en el sal&oacute;n 2 en la hora 9, es candidato para generar configuraciones vecinas. Suponer, adem&aacute;s, que el evento 56 puede programarse en los salones 2 y 3.</p>      <p align="center"><a name="f3"><img src="img/revistas/inde/n24/24a11f3.jpg"></a></p>      ]]></body>
<body><![CDATA[<p>Se puede generar una nueva configuraci&oacute;n intercambiando los bloques de tiempo de los eventos 56 y 89 que est&aacute;n en el sal&oacute;n 2.</p>      <p align="center"><a name="f4"><img src="img/revistas/inde/n24/24a11f4.jpg"></a></p>      <p>Otra configuraci&oacute;n se obtiene al mover el evento 56 de la hora nueve al espacio disponible del sal&oacute;n 3, en la hora 3.</p>      <p align="center"><a name="f5"><img src="img/revistas/inde/n24/24a11f5.jpg"></a></p>      <p>5.4. <b>Manejo de la memoria de corto plazo</b></p>      <p>La estructura de vecindad permite generar configuraciones vecinas, tomando como base la configuraci&oacute;n actual. El proceso de b&uacute;squeda local debe revisar estas configuraciones vecinas e identificar cu&aacute;l de ellas es la mejor, en t&eacute;rminos de factibilidad y de funci&oacute;n objetivo, para seleccionarla como la siguiente configuraci&oacute;n.</p>      <p>En la implementaci&oacute;n de <i>B&uacute;squeda Tab&uacute;</i> se utiliza una estructura de memoria de corto plazo que evita regresar a configuraciones ya visitadas, con lo que se puede escapar de &oacute;ptimos locales en el proceso de b&uacute;squeda. La memoria de corto plazo consiste en un vector (<i>estado _ tab&uacute;</i>) que almacena el estado de prohibici&oacute;n de un evento. Cuando se ejecuta un movimiento en el que participa un evento, la posici&oacute;n del vector <i>estado _ tab&uacute;</i> asociado a ese evento cambia a un <i>valor_tab&uacute;</i>, el cual corresponde al n&uacute;mero de iteraciones en que se proh&iacute;ben movimientos que involucren al suceso que cambi&oacute;. Siguiendo esta idea, algunas configuraciones vecinas se proh&iacute;ben, en virtud de que son generadas con el movimiento de un evento que se encuentra proscrito. El valor_tab&uacute; mencionado es un par&aacute;metro de control de B&uacute;squeda Tab&uacute;, que debe afinarse para obtener buenos resultados. Los elementos del vector estado _ tab&uacute; diferentes de cero se disminuyen en una unidad en cada iteraci&oacute;n hasta que lleguen a cero, estado en el que se permiten movimientos que cambien la programaci&oacute;n del evento relacionado.</p>      <p>Dependiendo del tama&ntilde;o de la estructura de vecindad y <i>del valor _ tab&uacute;</i> seleccionado, se tendr&aacute;n configuraciones vecinas no prohibidas, generadas a partir de cambios en eventos no proscritos. En la <a href="#f6">figura 6</a> se muestra el manejo del vector <i>estado _ tab&uacute; </i>considerando el movimiento representado en la <a href="#f5">figura 5</a> (evento 56). En la <a href="#f8">figura 8</a> se presenta el diagrama de <i>B&uacute;squeda Tab&uacute;</i> empleado, que es el mismo en las fases de b&uacute;squeda de factibilidad y luego b&uacute;squeda de optimalidad, cambiando &uacute;nicamente el criterio para seleccionar la mejor configuraci&oacute;n seg&uacute;n la funci&oacute;n objetivo: restricciones duras o restricciones blandas violadas.</p>      <p align="center"><a name="f6"><img src="img/revistas/inde/n24/24a11f6.jpg"></a></p>      <p>5.5.<b> Criterio de aspiraci&oacute;n</b></p>      ]]></body>
<body><![CDATA[<p>Si se da el caso en que la mejor configuraci&oacute;n vecina se encuentre prohibida, y su funci&oacute;n objetivo mejora la mejor funci&oacute;n objetivo encontrada hasta el momento en la b&uacute;squeda (valor de la incumbente), el criterio de aspiraci&oacute;n permite seleccionar esta configuraci&oacute;n a pesar de estar exclu&iacute;da.</p>      <p>5.6. <b>Diversificaci&oacute;n usando memoria basada en frecuencia</b></p>      <p>Cuando la funci&oacute;n objetivo no mejora despu&eacute;s de una cantidad determinada de iteraciones siguiendo el proceso de<i> B&uacute;squeda Tab&uacute;</i> basado en memoria de corto plazo, es conveniente emplear diversificaci&oacute;n a partir de la memoria de largo plazo basada en frecuencia.</p>      <p>La memoria propuesta basada en frecuencia almacena el n&uacute;mero de veces en que la programaci&oacute;n de un evento ha sido modificada. Esta memoria se implementa en un vector con dimensi&oacute;n igual al n&uacute;mero de eventos. En la <a href="#f7">figura 7</a> se muestra un ejemplo de la memoria de largo plazo. De la <a href="#f7">figura 7</a> se puede afirmar que la programaci&oacute;n del evento1 ha cambiado 23 veces, la del evento 56 se ha alterado 4 veces, mientras que la programaci&oacute;n del evento 3 no ha sufrido variaciones a lo largo del proceso de b&uacute;squeda.</p>      <p align="center"><a name="f7"><img src="img/revistas/inde/n24/24a11f7.jpg"></a></p>      <p>La estrategia de diversificaci&oacute;n emplea la memoria de largo plazo, usando un vector ordenado de forma ascendente seg&uacute;n el n&uacute;mero de cambios de un evento. De ese vector ordenado se toman los primeros elementos (que corresponden a aquellos sucesos que menos han cambiado) donde el n&uacute;mero de eventos y el n&uacute;mero de iteraciones con los que se hace diversificaci&oacute;n, son par&aacute;metros adicionales de <i>B&uacute;squeda Tab&uacute;</i>. La programaci&oacute;n de los eventos seleccionados es cambiada de manera forzada, para que se dirija la b&uacute;squeda a regiones no visitadas (o poco frecuentadas). En el caso asociado a la <a href="#f6">figura 6</a>, al evento 3, que no ha cambiado, se le modificar&aacute; su programaci&oacute;n.</p>      <p align="center"><a name="f8"><img src="img/revistas/inde/n24/24a11f8.jpg"></a></p>      <p><font size="3">5. <b>PRUEBAS Y RESULTADOS</b></font></p>      <p>Los casos de prueba corresponden a las instancias 1, 2, 3 y 4 de la referencia &#91;1&#93;. Para cada uno se muestra el n&uacute;mero de eventos, de salones, de caracter&iacute;sticas y de estudiantes correspondientes. Se emple&oacute; un tiempo fijo de 400 segundos para el proceso de b&uacute;squeda. En la <a href="#t2">tabla 2</a> se muestran los par&aacute;metros de <i>B&uacute;squeda Tab&uacute;</i> empleados; la <a href="#t3">tabla 3</a> se&ntilde;ala las condiciones de los casos de prueba. En la <a href="#t4">tabla 4</a> est&aacute;n los resultados obtenidos con la metodolog&iacute;a propuesta y en la <a href="#t5">tabla 5</a> se presentan las comparaciones con respuestas encontradas por otras metodolog&iacute;as.</p>      <p align="center"><a name="t2"><img src="img/revistas/inde/n24/24a11t2.jpg"></a></p>      ]]></body>
<body><![CDATA[<p align="center"><a name="t3"><img src="img/revistas/inde/n24/24a11t3.jpg"></a></p>      <p align="center"><a name="t4"><img src="img/revistas/inde/n24/24a11t4.jpg"></a></p>      <p align="center"><a name="t5"><img src="img/revistas/inde/n24/24a11t5.jpg"></a></p>      <p><font size="3">6. <b>CONCLUSIONES Y RECOMENDACIONES</b></font></p>      <p>El problema de asignaci&oacute;n de salones o programaci&oacute;n de horarios de clase es de alta complejidad matem&aacute;tica, dadas las variables relacionadas y las condiciones involucradas. Debido a la cantidad limitada de recursos (en este caso salones), el desarrollo de metodolog&iacute;as que proporcionen soluciones para su adecuado aprovechamiento, satisfaciendo diferentes conjuntos de restricciones, es un &aacute;rea de constante investigaci&oacute;n.</p>      <p>El modelo matem&aacute;tico planteado es una contribuci&oacute;n al problema de programaci&oacute;n &oacute;ptima de horarios de clase, que no se encuentra en la literatura especializada. El modelo condensa las restricciones duras y blandas y muestra las relaciones entre la programaci&oacute;n de los eventos y el horario de los estudiantes.</p>      <p>La estrategia para generar la configuraci&oacute;n inicial demostr&oacute; ser eficiente: realizar la programaci&oacute;n de los eventos teniendo como prioridad evitar, en lo posible, restricciones duras y aplicar movimientos adecuados que las reduzcan, todo esto con un costo computacional &iacute;nfimo. As&iacute;, el n&uacute;mero de iteraciones necesarias en la etapa de <i>B&uacute;squeda Tab&uacute;</i> para restricciones duras es bastante peque&ntilde;o comparado con estrategias que no siguen la prioridad mencionada.</p>      <p>El &iacute;ndice de sensibilidad usado para generar las configuraciones vecinas es de utilidad para guiar el proceso de b&uacute;squeda, ya que los eventos que generan m&aacute;s violaciones en las restricciones tienen la prioridad para generar el vecindario. Aunque las pruebas efectuadas mostraron que los mejores resultados se obtienen mediante una lista ordenada de tama&ntilde;o apreciable de los eventos, que se efect&uacute;a seg&uacute;n el &iacute;ndice (10%).</p>      <p>Los movimientos propuestos para la generaci&oacute;n del vecindario tienen la capacidad, junto con las estrategias de <i>B&uacute;squeda Tab&uacute;</i>, de escapar de &oacute;ptimos locales y reducir restricciones duras y blandas, ya que permiten el cambio de salones y horas para cualquier evento. La aplicaci&oacute;n de la estrategia de diversificaci&oacute;n mostr&oacute; ser &uacute;til cuando el proceso de b&uacute;squeda no presenta mejoras en un n&uacute;mero determinado de iteraciones.</p>      <p>En trabajos futuros se pueden incluir restricciones que consideren el grado de satisfacci&oacute;n de los alumnos con los horarios generados, en cuanto a variables como las distancias entre salones para eventos consecutivos en los que participen. Tambi&eacute;n pueden agregarse restricciones para tener bloques de eventos que conformen clases con m&aacute;s de una hora de duraci&oacute;n y eventos que correspondan a clases de una misma materia, las cuales exigen su programaci&oacute;n en bloque o en d&iacute;as diferentes. Debe abordarse tambi&eacute;n el problema de la programaci&oacute;n de horarios de profesores, que es m&aacute;s f&aacute;cil que lo tratado en este trabajo, pero que de manera conjunta con el de asignaci&oacute;n de salones, se vuelve m&aacute;s complejo.</p>      ]]></body>
<body><![CDATA[<p>Esta nueva propuesta del modelo matem&aacute;tico del problema de salones es presentada con el fin de que la comunidad acad&eacute;mica implemente nuevas t&eacute;cnicas de soluci&oacute;n ya sean exactas o metaheur&iacute;sticas.</p> <hr>       <p><font size="3"><b>REFERENCIAS</b></font></p>      <!-- ref --><p><a name="1">&#91;1&#93; </a>Metaheuristics Network. International Timetabling Competition. Disponible en: <a href="http://www.idsia.ch/Files/ttcomp2002/" target="_blank">http://www.idsia.ch/Files/ttcomp2002/</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000155&pid=S0122-3461200800020001100001&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p><a name="2">&#91;2&#93; </a>CARTER, M. W., LAPORTE, G., Recent developments in practical examination timetabling. In: Burke and Ross (1996) pp. 3-21.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000156&pid=S0122-3461200800020001100002&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p><a name="3">&#91;3&#93; </a>WERRA , An introduction to timetabling. European Journal of Operational Research 19 (1985), pp. 151-162.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000157&pid=S0122-3461200800020001100003&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p><a name="4">&#91;4&#93; </a>WHITE, G. M. CHAN P. W., Towards the construction of optimal examination timetables. INFOR 17 (1979), pp. 219-229.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000158&pid=S0122-3461200800020001100004&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p><a name="5">&#91;5&#93; </a>FISHER, J. G., SHIER, D. R., A heuristic procedure for large-scale examination scheduling problems. Technical Report 417, Department of Mathematical Sciences, Clemson University, 1983.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000159&pid=S0122-3461200800020001100005&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p><a name="6">&#91;6&#93; </a>WHITE, G. M., &quot;Constrained satisfaction, not so constrained satisfaction and the timetabling problem&quot;. In: <i>A Plenary Talk in the Proceedings of the 3rd International Conference on the Practice and Theory of Automated Timetabling</i>, University of Applied Sciences, Konstanz, Aug., 16-18, 2000 (2000), pp. 32-47.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000160&pid=S0122-3461200800020001100006&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p><a name="7">&#91;7&#93; </a>BORKE, E. K., NEWALL, J. P., WEARE, R.F., 1996b. A memetic algorithm for University exam timetabling. In: Burke and Ross (1996) pp. 241-250.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000161&pid=S0122-3461200800020001100007&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p><a name="8">&#91;8&#93; </a>SCHAERF, Andrea, A survey of automated timetabling, Technical Report CS-R9567, CWI - Centrum voor Wiskunde en Inform&aacute;tica, 1995.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000162&pid=S0122-3461200800020001100008&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p><a name="9">&#91;9&#93; </a>CARTER, M. W., LAPORTE, G., Recent developments in practical examination timetabling. In: Burke and Ross, pp. 3-21, 1996.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000163&pid=S0122-3461200800020001100009&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p><a name="10">&#91;10&#93; </a>CARTER, M. W., LAPORTE, G., Recent developments in practical course timetabling. In: Burke and Carter, pp. 3-19, 1996.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000164&pid=S0122-3461200800020001100010&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p><a name="11">&#91;11&#93; </a>WERRA, An introduction to timetabling. European Journal of Operational Research, 19, pp. 151-162, 1985.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000165&pid=S0122-3461200800020001100011&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p><a name="12">&#91;12&#93; </a>GLOVER, F., <i>Tabu Search Fundamentals and Uses</i>, University of Colorado, Boulder, Colorado, Apr. 1995.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000166&pid=S0122-3461200800020001100012&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p><a name="13">&#91;13&#93; </a>BAZAN, F. A. <i>Planejamento de sistemas de distribu&ccedil;&atilde;o de energia el&eacute;trica utilizando algoritmo busca tabu,</i> Tesis de Maestr&iacute;a, Universidade Estadual Paulista, 2003.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000167&pid=S0122-3461200800020001100013&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p><a name="14">&#91;14&#93; </a>GALLEGO, R. ESCOBAR, A. TORO, E. <i>T&eacute;cnicas metaheur&iacute;sticas de optimizaci&oacute;n.</i> Universidad Tecnol&oacute;gica de Pereira, 2008.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000168&pid=S0122-3461200800020001100014&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --> ]]></body><back>
<ref-list>
<ref id="B1">
<label>1</label><nlm-citation citation-type="">
<collab>Metaheuristics Network</collab>
<source><![CDATA[International Timetabling Competition]]></source>
<year></year>
</nlm-citation>
</ref>
<ref id="B2">
<label>2</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[CARTER]]></surname>
<given-names><![CDATA[M. W]]></given-names>
</name>
<name>
<surname><![CDATA[LAPORTE]]></surname>
<given-names><![CDATA[G]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Recent developments in practical examination timetabling]]></article-title>
<source><![CDATA[]]></source>
<year>1996</year>
<page-range>3-21</page-range><publisher-name><![CDATA[Burke and Ross]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B3">
<label>3</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[WERRA]]></surname>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[An introduction to timetabling]]></article-title>
<source><![CDATA[European Journal of Operational Research]]></source>
<year>1985</year>
<volume>19</volume>
<page-range>151-162</page-range></nlm-citation>
</ref>
<ref id="B4">
<label>4</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[WHITE]]></surname>
<given-names><![CDATA[G. M]]></given-names>
</name>
<name>
<surname><![CDATA[CHAN]]></surname>
<given-names><![CDATA[P. W]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Towards the construction of optimal examination timetables]]></article-title>
<source><![CDATA[INFOR 17]]></source>
<year>1979</year>
<page-range>219-229</page-range></nlm-citation>
</ref>
<ref id="B5">
<label>5</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[FISHER]]></surname>
<given-names><![CDATA[J. G]]></given-names>
</name>
<name>
<surname><![CDATA[SHIER]]></surname>
<given-names><![CDATA[D. R]]></given-names>
</name>
</person-group>
<source><![CDATA[A heuristic procedure for large-scale examination scheduling problems]]></source>
<year>1983</year>
<publisher-name><![CDATA[Clemson University]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B6">
<label>6</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[WHITE]]></surname>
<given-names><![CDATA[G. M]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Constrained satisfaction, not so constrained satisfaction and the timetabling problem]]></article-title>
<source><![CDATA[A Plenary Talk in the Proceedings of the 3rd International Conference on the Practice and Theory of Automated Timetabling]]></source>
<year>Aug.</year>
<month>, </month>
<day>16</day>
<page-range>32-47</page-range><publisher-loc><![CDATA[Konstanz ]]></publisher-loc>
<publisher-name><![CDATA[University of Applied Sciences]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B7">
<label>7</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[BORKE]]></surname>
<given-names><![CDATA[E. K]]></given-names>
</name>
<name>
<surname><![CDATA[NEWALL]]></surname>
<given-names><![CDATA[J. P]]></given-names>
</name>
<name>
<surname><![CDATA[WEARE]]></surname>
<given-names><![CDATA[R.F]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[A memetic algorithm for University exam timetabling]]></article-title>
<source><![CDATA[]]></source>
<year>1996</year>
<page-range>241-250</page-range><publisher-name><![CDATA[Burke and Ross]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B8">
<label>8</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[SCHAERF]]></surname>
<given-names><![CDATA[Andrea]]></given-names>
</name>
</person-group>
<source><![CDATA[A survey of automated timetabling, Technical Report CS-R9567]]></source>
<year>1995</year>
<publisher-name><![CDATA[Centrum voor Wiskunde en Informática]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B9">
<label>9</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[CARTER]]></surname>
<given-names><![CDATA[M. W]]></given-names>
</name>
<name>
<surname><![CDATA[LAPORTE]]></surname>
<given-names><![CDATA[G]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Recent developments in practical examination timetabling]]></article-title>
<source><![CDATA[]]></source>
<year>1996</year>
<page-range>3-21</page-range><publisher-name><![CDATA[Burke and Ross]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B10">
<label>10</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[LAPORTE]]></surname>
<given-names><![CDATA[G]]></given-names>
</name>
<name>
<surname><![CDATA[CARTER]]></surname>
<given-names><![CDATA[M. W]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Recent developments in practical course timetabling]]></article-title>
<source><![CDATA[]]></source>
<year>1996</year>
<page-range>3-19</page-range><publisher-name><![CDATA[Burke and Carter]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B11">
<label>11</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[WERRA]]></surname>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[An introduction to timetabling]]></article-title>
<source><![CDATA[European Journal of Operational Research]]></source>
<year>1985</year>
<volume>19</volume>
<page-range>151-162</page-range></nlm-citation>
</ref>
<ref id="B12">
<label>12</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[GLOVER]]></surname>
<given-names><![CDATA[F]]></given-names>
</name>
</person-group>
<source><![CDATA[Tabu Search Fundamentals and Uses]]></source>
<year>Apr.</year>
<month> 1</month>
<day>99</day>
<publisher-name><![CDATA[University of Colorado]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B13">
<label>13</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[BAZAN]]></surname>
<given-names><![CDATA[F. A]]></given-names>
</name>
</person-group>
<source><![CDATA[Planejamento de sistemas de distribução de energia elétrica utilizando algoritmo busca tabu]]></source>
<year></year>
</nlm-citation>
</ref>
<ref id="B14">
<label>14</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[GALLEGO]]></surname>
<given-names><![CDATA[R]]></given-names>
</name>
<name>
<surname><![CDATA[ESCOBAR]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
<name>
<surname><![CDATA[TORO]]></surname>
<given-names><![CDATA[E]]></given-names>
</name>
</person-group>
<source><![CDATA[Técnicas metaheurísticas de optimización]]></source>
<year>2008</year>
<publisher-name><![CDATA[Universidad Tecnológica de Pereira]]></publisher-name>
</nlm-citation>
</ref>
</ref-list>
</back>
</article>
