miércoles, 16 de mayo de 2012

Proyecto AYDA A-2012

Asignación de cupos en las universidades

Asignación de cupos en las universidades

Leandro Rabindranath León - Alejandro Mujica

Aclaratoria

Aunque en términos ingenieriles, prácticos y políticos1, este proyecto es muy realista, pues aborda un problema actual y real, muy serio, de la educación venezolana, la narrativa empleada en la formulación de este proyecto debe considerarse, al momento actual, como ficción.

Trate de asumir a este proyecto como de interés nacional, que su logro incidirá en el buen destino de unos cuantos bachilleres venezolanos, y especialmente de país.

Lea completa y detallamente este enunciado. Sientase libre de plantear preguntas o sugerencias. En pos del registro, plantee su pregunta o sugerencia a través de la sección de comentarios del blog. No use otro medio para esto (email, facebook, etc).

Contents

1  El problema

1.1  Preámbulo

Como bien se sabe, nuestro país es rentista en el sentido de que la mayor parte de los ingresos que motorizan su economía provienen de la renta minera y no de la producción autónoma y autóctona en torno a bienes venezolanos. La gran mayoría de los bienes (y mucha parte de los servicios) son de manufactura extranjera.

Después de más de 100 años de rentismo y de numerosos ensayos por fomentar la producción venezolana, algunas autoridades del gobierno actual están (¡por fin!) comenzando fuertemente a sospechar que nuestra dependencia sobre las importaciones comienza primariamente por nuestra dependencia de personal educado. Estas autoridades piensan que para la producción se requiere inteligencia y educación.

Así pues, después de décadas de abandono del sistema educativo, del cual sólo se han podido beneficiar los sectores de clase media en adelante, los cuales no sobrepasan el 20% de la población, las autoridades susodichas están decididas a que el sistema educativo alcance y beneficie en mayor medida al restante 80%. Aparte de razones de justicia muy obvias (bueno al menos para algunos), las autoridades entienden que la producción (y el mercado endógeno) requiere del concurso del 100% de la población y no del 20% (o menos) actual.

1.2  Lineamientos políticos

Aunque obviamente el problema de la educación venezolana comienza desde la primaria y es allí donde es más grave, en este proyecto sólo se abordará la educación superior; específicamente la asignación de cupos de todas las carreras universitarias de las universidades subvencionadas por el estado venezolano. Para ello, el órgano ejecutivo encargado (teóricamente el Ministerio de Educación de Superior), ha asumido los siguientes lineamientos:

  1. Puesto que es el estado quien aporta los recursos presupuestarios a las universidades y éstos son patrimonio público de la población venezolana (no de la Universidad), será el estado, y no las Universidades, quién efectúe la asignación de cupos a los bachilleres.

    Por supuesto, esto no impide que la Universidad especifique un perfil mínimo deseado para un eventual estudiante.

    La idea de este lineamiento es potenciar la justicia y planificación de todo el país.

  2. Las universidades son autónomas en todo su ejercicio (incluida su ejecución presupuestaria), pero, a efectos de rendir cuentas a país, todos los años el ministerio de educación superior realiza una auditoría. Esto se hace mediante una muestra estadística suficientemente representativa de los egresados de cada universidad y verifica si, en efecto, el egresado cumplió con los requerimientos de egreso (revisión de su desempeño y examen de suficiencia).

    El Ministerio de Educación Superior está dispuesto a tolerar hasta un máximo de 5% de error en la auditoría. Si una Universidad sobrepasa este porcentaje de error, entonces el Ministerio de Educación Superior está dispuesto a solicitar su revisión y eventual intervención, pues en los términos del Ministerio de Educación Superior estaría fallando en su misión.

    El sentido de este lineamiento es garantizar la autonomía sin que ésta se convierta en una excusa de la Universidad para no cumplir su misión fundamental. El Ministerio de Educación Superior ahora piensa que las cuentas se rinden en términos de los resultados (la suficiencia y calidad de los egresados, entre otras cosas) y no meramente del gasto presupuestario.

  3. Puesto que un cupo universitario es costeado por el estado y éste se considera sumamente valioso, el Ministerio de Educación Superior le exigirá a cada universidad un rendimiento por estudiante de al menos 80%, es decir, la Universidad tiene la obligación de aplicar medidas de bajo rendimiento a aquellos estudiantes que estén por debajo del 80% de rendimiento. El rendimiento se considera desde dos perspectivas la duración de la carrera en períodos y la cantidad total de materias reprobadas en la carrera. Así, si una carrera tiene una duración de 10 semestres, entonces la cantidad máxima de semestres que, sin causa justificada, puede permanecer un estudiante en la Universidad es de 12 semestres. Del mismo modo, si una carrera tiene 40 materias, entonces la cantidad máxima de materias que se podrían reprobar es de 8.

    La idea de este lineamiento es liberar el cupo en caso de errores de planificación.

  4. El Ministerio de Educación Superior ofrecerá cursos propedéuticos a los bachilleres con bajo rendimiento y de bajo nivel socioeconómico.

    La idea de este lineamiento es potenciar la posibilidad de logro en la carrera universitaria para aquellos bachilleres que históricamente han sido excluidos de la enseñanza superior.

1.3  Factores de incidencia en la asignación de cupos

En las subsecciones siguientes se enuncian y describen los factores que el Ministerio de Educación Superior consideraría al momento de efectuar la asignación anual de bachilleres a carreras universitarias.

1.3.1  Promedio de notas

El promedio de notas en el bachillerato incide proporcionalmente en la probabilidad de que a un estudiante se le adjudique un cupo. A mayor promedio mayor probabilidad de asignación. La idea es ponderar el esfuerzo y rendimiento del bachiller.

En lo que sigue, el promedio se denomina Prom:

Prom = Promedio de notas en el bachillerato     (1)

1.3.2  Nivel socioeconómico

Uno de los dramas del sistema de educación venezolana es que su acceso y calidad depende mucho de la condición socioeconómica. Numerosos estudios indician que cuanto mayor es la condición socioeconómica mayor es la posibilidad de un ciudadano de recibir educación. Similarmente, se ha descubierto que el rendimiento escolar tiende a ser mejor conforme es más alta la condición socioeconómica.

Puede decirse, como aproximación, que los sectores A,B y C representan el 20%, mientras que los D y E restantes el 80%. Vivimos en un país donde sólo el 20 % de la población tiene las condiciones adecuadas de educación, entre ellas la universitaria.

Es una política vigente el realizar el máximo esfuerzo por que los ciudadanos pertenecientes a los niveles socioeconómicos más bajos sean incluidos en el sistema de educación superior. Bajo ese espíritu, la tabla 1 muestra los factores de ponderación según el nivel socioeconómica.


Nivel socioeconómicoPonderación
A5%
B10%
C10%
D45%
E30%
Table 1: Ponderación a los niveles socioeconómicos

Estas ponderaciones son modificables y el sistema resultante debe permitir sus ajustes.

El nivel socioeconómico se define como ns:

ns = Ponderación del nivel socioeconómico     (2)

1.3.3  Distancia

La distancia geográfica desde el lugar de origen a la Universidad es un factor que también se debe considerar al momento de asignar un cupo.

Este factor se denomina D y es la distancia euclidiana desde el lugar de origen del bachiller a la Universidad en donde se formaría.

D = Distancia euclidiana entre el lugar de origen y la Universidad     (3)

1.3.4  Condiciones especiales

Bachilleres en condiciones especiales de discapacidad o provenientes de las etnias indígenas deben tener una ponderación mayor.

El factor se denomina ce y se define como:

ce = 

   0si el bachiller es de condición especial
   1de lo contrario   
    (4)

1.3.5  Cantidad de intentos de asignación de cupo

Puesto que existen circunstancias en las cuales un bachiller se queda completamente sin cupo, y considerando que el ocio es demasiado costoso para la sociedad, la cantidad de intentos en los cuales un bachiller no ha logrado cupo es un factor a considerar. Este factor se denomina n:

n = Cantidad de intentos del bachiller para ingresar a la Universidad  , n ≥ 1     (5)

1.3.6  Índice académico de la universidad vs el de la OPSU

La política actual se fundamenta en un modelo multivariable bajo el cual, luego de evaluar algunas variables por bachiller, se calcula un índice académico I entre 0 y 100. Por lo general, los parámetros de cálculo para este índice varían según el año.

Lo esencial en este caso es considerar el índice académico como incidente para el otorgamiento de cupo, así como el valor requerido por la carrera/Universidad.

Por cada carrera la Universidad asigna un índice mínimo de ingreso Imin y un cupo cap.

El algoritmo actual consiste en asignarle cupo a los cap bachilleres solicitantes cuyo Imin es más alto. Aunque el modelo multivariable y el algoritmo están diseñados con fuerte pretensión de inclusión, éstos no consideran el coste social que podría tener la asignación de cupos.

Puesto que se plantea que sea el Ministerio de Educación Superior estrictamente quien asigne los cupos, un factor de coste importante es la diferencia entre el índice mínimo Imin solicitado por la Universidad y el índice multivariable del estudiante.

Sea esta diferencia:

ΔI = Imin − I     (6)

La idea de este factor es considerar como “costoso” el que el Ministerio de Educación Superior asigne a un estudiante que no cumpla con el perfil solicitado por la Universidad.

1.3.7  Duración de la carrera

La duración en años de la carrera es un factor de coste. Mayor sea la duración mayor será el coste y se define como:

t = Promedio de duración en años de la carrera     (7)

1.3.8  Costo de asignación de cupo por bachiller

El coste de asignación de cupo de un bachiller a una carrera se determina según la siguiente fórmula:

Coste = 
α
Prom
 + 
β
ns
 + γ D + δ ce +
є
n
 + θ ΔI + κ t       (8)

Las letras griegas designan “pesos” del factor; e decir, la importancia que se le daría al factor. La idea es ajustar los pesos según estudios y simulaciones posteriores.

Para facilitar la comprensión, veamos cómo se interpreta cada sumando de la fórmula:

  1. α/Prom: si α ≥ 1, entonces cuanto más alto sea el promedio, menor el cociente α/Prom. De este modo se considera más costoso el otorgar cupo a un bachiller con bajo promedio sobre uno con alto.
  2. β/ns: si β≥ 0, entonces cuanto más alto sea el nivel socioeconómico mayor será el radio y más costoso se considera el cupo.

    Note que si uno o ambos de los pesos α y β se hacen mayores que uno, entonces el costo del factor se invierte. Por ejemplo, si β < 1, entonces el costo es menor conforme aumenta la clase social.

  3. γ D: cuanto más distante esté el bachiller de su lugar de origen más alto será este producto y más costoso se considera la asignación.
  4. δ ce: puesto que los bachilleres con condiciones especiales no se consideran costosos (o de coste menor que los normales), entonces este producto es menor, y por consiguiente el coste, para los bachilleres con condiciones especiales.
  5. є/n: si є>0, entonces cuanto más años infructuosos tenga un bachiller sin ingresar a la Universidad menos costoso se considerará su ingreso y más posibilidades tendrá éste de ingresar.
  6. θ ΔI: cuanto más debajo esté el índice académico del bachiller respecto al declarado por la Universidad, mayor será el producto y mayor impacto tendrá su ingreso sobre el coste global. Del mismo modo, cuanto más por arriba esté el índice del bachiller respecto al de la universidad, menor será el coste; de hecho, en estos casos es negativo.
  7. κ t: cuanto más alta sea la duración promedio mayor será el producto y por consiguiente el coste.

El fin de la fórmula es intentar tener una idea del coste relativo, no meramente económico, que acarrea al país la asignación de un cupo de Universidad. La fórmula en cuestión serviría como un medio para comparar diversos esquemas de asignaciones de cupos así como algoritmos que efectúen asignaciones al menor coste global. Los valores exactos de los pesos (letras griegas) serían escogido luego de estudios y eventualmente sujetos a consulta y aprobación popular.

Nótese que la fórmula (8) permite “cuantificar” un coste entre distintos esquemas de asignaciones (variación de los pesos -letras griegas-), así como condiciones distintas entre los bachilleres.

Note también cómo la fórmula se adapta a diversas interpretaciones del coste, el cual es bastante relativo y depende mucho de la “ideología” de los actores ejecutivos. Por ejemplo, desde una perspectiva en la cual domine fuertemente la inversión presupuestaria, un ejecutivo podría considerar que un bachiller de nivel socioeconómico alto es menos costoso que uno de nivel bajo, pues éste tendría mejores facilidades de manutención (no acarrearía subsidio de beca, comedor o vivienda); también se podría razonar que cuanto más alto sea el nivel socioeconómico mejor educado estará el bachiller y mejor y en menos tiempo éste se formará. Finalmente, nuestro hipotético actor ejecutivo podría argüir, aparte de lo anterior, que este bachiller será mejor inversión, que le rendirá mejores dividendos al país.

Como se ve, este criterio es totalmente opuesto al actual y podría fijarse en la fórmula ajustando el valor de β < 1.

Ahora bien, otra interpretación, la cual podría ser la actual, es que puesto los sectores de niveles altos tienen más posibilidad de encontrar educación superior en predios privados y que ello le resulta menos costoso al estado. Más importante, la exclusión de los sectores de niveles bajos potencia problemas sociales más complejos de resolver y mucho más costosos (delincuencia, embarazos tempranos, alcoholismo). Y quizá más importante aún, la exclusión de los niveles bajos se efectúa sobre la mayoría de la población, lo cual, aparte de cercenar el potencial productivo de la nación (sólo el 20% podría producir bienes de valor intelectual), representa una gravísima injusticia.

Si un factor no desea ser considerado en el coste, entonces basta con colocarle como peso el valor cero. También, si según sea la circunstancia un factor se considera muy importante, entonces su peso se puede asignar muy alto o bajo según que sea éste divisor o no. Por ejemplo, puesto que actualmente el índice de la Universidad se toma mucho en consideración, el Ministerio de Educación Superior podría considerar en la primera asignación de cupos un valor de θ bastante alto, de manera tal que el criterio de la Universidad sea fuertemente considerado.

2  Modelo de red de flujo

En esta sección se especifica un modelo de red de flujo con costes destinado a calcular una asignación máxima de cupos al menor coste posible; coste en los cánones de la fórmula (8).

2.1  Nodo Carrera/Universidad

Se tienen en total M conjuntos de carreras/Universidad. Un nodo carrera/Universidad ncu tiene una capacidad de cupo de cap(ncu) correspondiente a la cantidad de cupos disponibles para el año el curso en la susodicha carrera. También, este nodo tiene un índice mínimo preferido llamado Imincu, correspondiente al valor Imin de la carrera/Universidad.

Por ejemplos, la siguiente figura muestra algunos nodos carrera:

Estos nodos indican, por ejemplo, que Física en la Universidad Simón Bolívar tiene un cupo de 50 bachilleres y que solicita un índice académico mínimo de 80. Parecido ocurre con los demás nodos y otros posibles que por razones de espacio no están colocados en la figura.

La información realista de los nodos/carrera puede ser obtenida en:

http://loe.opsu.gob.ve/carreras.php.

Por cada nodo carrera/Universidad se asocian los siguientes factores de importancia:

  1. Ce: coste económico que representa la carrera/Universidad para el estado.
  2. IU: “importancia estratégica” que le da el estado a la carrera/universidad según los lineamientos políticos actuales.

Así, el coste total de la carrera/Universidad se calcula de la siguiente forma:

COST_U  = σ Ce + 
τ
IU
      (9)

Donde σ y τ son los pesos que el Ministerio de Educación Superior le otorga a la carrera. Por ejemplo, si el estado considera que son sumamente importante las carreras vinculadas al petróleo, entonces éste les asignará valores de IU altos, de manera tal que el coste disminuya y el algoritmo de maximización tienda a asignar bachilleres, aun si éstos tienen las carreras como segundas o terceras opciones. Parecido, bajo la presunción de que un estudiante que solicite cupo en una Universidad privada tiene los medios para costearla, entonces el estado puede asignarle un valor de σ alto para la Universidad. La diferencia entre σ y τ determinaría la prioridad del estado para cada coste.

En un modelo de red de flujo, los nodos carrera/Universidad se traducen a pares de nodos cuya capacidad se corresponde con el cupo de la carrera. Para la figura anterior, la transformación sería la siguiente:

2.2  Nodo bachiller

Cada bachiller registra sus datos de forma manual o automatizada e inscribe en la OPSU entre 1 y m carreras posibles según su voluntad (actualmente el puede seleccionar hasta un máximo de 6 carreras). Un sistema automatizado calcula, por cada carrera, el coste según la fórmula (8) que tendría asignarle la carrera al estudiante. cada carrera que inscribe un bachiller tiene una prioridad en el sentido de que él prefiere una sobre la otra.

2.3  Red global de flujo

Hay dos modelos posibles de red según que se incluyan o no todas las carreras seleccionadas por el estudiante.

El propósito de la red global de flujo es calcular la máxima asignación posible de bachilleres a carreras/Universidad que tenga el menor coste total posible.

El coste total posible es la suma de todos los costes por bachiller una vez que ya les ha sido asignada su carrera.

2.3.1  Red global con una sola carrera por bachiller

La primera manera de calcular el coste mínimo consiste en conectar la carrera más prioritaria de cada bachiller directamente a los nodos carrera/Universidad. En este caso una red de N estudiantes y M carreras/Universidad se representaría así:

Según la carrera más prioritaria que seleccione un bachiller, éste se conecta al nodo carrera/Universidad con capacidad 1 y coste Ci calculado según la fórmula de coste (8) para el bachiller.

Así, esta red se maximiza el flujo al mínimo coste, lo que da la máxima asignación de cupos de carreras a la mayor cantidad de bachilleres posible y al mínimos coste según la suma total de los costes (8).

Después de ejecutada esta asignación, se construye una nueva red con los bachilleres sobrantes (aquellos que el proceso anterior no les haya otorgado cupo), y las carreras sobrantes (la que aún les quede cupo). En esta segunda red se conectan las carreras/Universidad más prioritaria que le quede al bachiller y que sea conectable al nodo carrera/Universidad.

El proceso se repite hasta que ya no sea posible construir más redes; bien sea por que todos los bachilleres obtienen cupo, porque todos los cupos han sido cubiertos o porque no es posible conectar mas bachilleres a carreras/Universidad (sobran bachilleres y carreras con cupo que no se pueden conectar porque los bachilleres no las escogieron en su inscripción).

2.3.2  Red con todas las carreras por bachiller

En este enfoque, en lugar de realizar diversas corridas, todas las carreras inscritas por los bachilleres son conectadas a los nodos carrera/Universidad. Para ponderar la prioridad de la carrera, a la fórmula de coste (8) se le añade un nuevo sumando que representa el coste de asignarle al bachiller carreras que para él son de menos prioridad. Tal coste se designa Prio y es un número entero correspondiente al orden de prioridad de la carrera. Por ejemplo, si el bachiller inscribe 4 carreras en la OPSU, entonces la carrera con prioridad 1 es la más importante y así sucesivamente hasta la cuarta carrera con prioridad 4, la cual es la menos prioritaria.

Con la ponderación de la prioridad el coste de asignación se transforma en:

Costeλ= Coste + λ Prio = 
α
Prom
 +
β
ns
 + γ D + δ ce + 
є
n
 + θ ΔI + κ t + λ Prio       (10)

El peso λ representa la importancia que le da el Ministerio de Educación Superior al deseo del estudiante.

Así, la red de flujo se interpreta en algo más o menos como:

Note la presencia de varias conexiones entre los estudiantes y las carreras. El sumando λ Prio potencia que al estudiante se le seleccione la carrera de su preferencia. Sin embargo, el algoritmo podría asignarle otra carrera (de su escogencia) si se considerase menos costoso en global.

2.4  Algoritmo de asignación actual

Adicional a las alternativas anteriores está el algoritmo actual, el cual sólo considera el índice académico y del cual algunos creen que no da idea acerca del coste global social de la asignación.

Para comprender la diferencia entre los esquemas anteriores y el empleado actualmente, es importante recapitular el esquema actual.

En primer lugar, el algoritmo de asignación actual sólo cuantifica el índice I, el cual, si bien considera factores socioeconómicos y demás cosas por el estilo, no mide el coste que acarrea para la nación el efectuar una determinada asignación, así como tampoco la considera al momento de efectuar la asignación.

Grosso modo, el algoritmo actual se puede resumir bajo lo siguiente:

  1. Se calculan los índices académicos multivariables de todos los bachilleres (estos ya están dados por el sistema).
  2. Por cada carrera/Universidad se escogen los primeros bachilleres que tengan índice superior al exigido por la Universidad y que hayan seleccionado como primera opción la carrera en cuestión. Esta asignación se realiza hasta agotarse el cupo.
  3. El procedimiento se repite para las carreras/Universidad restantes.
  4. Cuando se hayan asignado todas las carreras y bachilleres con su primera prioridad, el procedimiento se repite con las carreras disponibles (las que aún tienen cupo) y las segundas opciones de los bachilleres.

El procedimiento continua hasta que ya no sea posible efectuar más asignaciones.

3  El trabajo

En este trabajo se pretende construir un prototipo de sistema programado que lea los datos de bachilleres y carreras/Universidad y realice distintas asignaciones según los tres métodos y con diversos ajustes de los pesos α, β,γ, δ,є,θ y λ.

El fin del sistema es estudiar diversas asignaciones y descubrir los valores de los pesos según las circunstancias políticas del momento.

3.1  Entrada

La entrada se divide en dos tipos: bachilleres y conjuntos carreras/Universidad. Ambas entradas son archivos en formato csv.

El sistema debe estar preparado para manejar una escala promedio de 700.000 bachilleres y 10.000 pares distintos de carrera/Universidad.

3.1.1  Carreras/Universidad

Para las universidades se maneja un sólo archivo cuyos campos son: nombre de la Universidad, nombre de la carrera, código único de la dupla carrera/Universidad, cantidad de cupos disponibles, duración de la carrera en meses, coordenadas latitudinales del lugar donde se encuentra la carrera, índice académico solicitado por la Universidad, coste económico que representa la carrera para el país (Ce) y la importancia estratégica que se le otorgue a la carrera (IU).

Así, por ejemplo, una fila de este archivo podría ser algo como:

ULA, Ingeniería de Sistemas, 476, 20, 60, XX, YY, 90.3, 12, 10
                                          **  **

Esta fila indicaría la Universidad de Los Andes, la carrera de Ingeniería de Sistemas cuyo código único (carrera/Universidad) es 476, capacidad de cupos 20, de 60 meses de duración, situada en las coordenadas geográficas XX y YY, con un índice académico solicitado de ingreso de 90.3, un coste económico anual de 12 (las unidades no importan siempre y cuando sean las mismas) y una importancia estratégica de 10.

Los asteriscos señalado en el ejemplo no son parte de la entrada; se usan para señalar los campos de coordenadas, los cuales aún no han sido definidos. Por los momentos, asuma que son coordenadas euclidianas positivas respecto a un punto (0,0) de referencia.

3.1.2  Bachilleres

Para los bachilleres se manejan dos tipos de archivos:

  1. Registro de bachilleres, el cual está compuesto por el número de cédula, apellidos, nombres y un número único de registro.
  2. Registro de datos ingreso, compuesto por el número único de registro, promedio de notas, nivel socioeconómico, coordenadas latitudinales de su lugar de origen, condición especial, intentos de ingreso, índice académico y una lista de m códigos únicos de carrera/Universidad correspondiente a la selección del bachiller por orden de prioridad que escogió el bachiller.

    Un ejemplo de fila de este archivo podría ser:

    17662938, 14.2, C, 09 19 04 N, 70 36 13 W, 1, 1, 75.3, 476, 478, 299, 352, 192, 102
    

    Esta fila indicaría a un bachiller con número de registro 17662938, un promedio de notas de 14.2, de nivel socioeconómico C, proveniente de Valera, cuyas coordenadas latitudinales son 09 19 04 N y 70 36 13 W, sin una condición especial, en su primer intento de ingreso a la Universidad, con un índice académico OPSU de 75.3 y con solicitudes de cupo, por orden de prioridad, las carreras/Universidad cuyos códigos son 476, 478, 299, 352, 192 y 102.

El sistema es independiente del primer archivo.

La idea de esta separación es que los datos de identidad, aunque de patrimonio público, son confidenciales.

3.2  Estudios preprocesamiento

Con los datos suministrados de bachilleres y carreras/Universidad, se requiere conocer algunas distribuciones y tendencias que proporcionen una idea del problema previo al proceso de asignación.

3.2.1  Estadísticas descriptivas

Se desean estadísticas descriptivas (promedio, mediana, moda, desviación) sobre el promedio de notas y el índice académico.

Se desea observar la repartición de estas estadísticas según los niveles socioeconómicos y radio latitudinales.

3.2.2  Ordenamiento de la demanda

A nivel nacional, por universidades, y por carreras/Universidad, se desean conocer reparticiones de la demanda, discernidas por nivel socioeconómico, rango de promedio de notas, índices académicos, valores de los costes Coste y Costeλ.

Por ejemplo, del total de bachilleres, se quisiera conocer las cantidades y porcentajes que solicitan Ingeniería de Sistemas discernidas por condición socioeconómica.

Otro ejemplo sería establecer unos rangos de promedios, por instancia [10-14], [15-18] y [19-20], y con ellos discernir cómo se distribuye la demanda sobre la carrera de Ingeniería de Sistemas de la ULA.

3.2.3  Ordenamiento de la oferta/demanda

Por Universidad y por carrera se desean conocer ordenamientos de oferta y su respectiva demanda.

3.3  Procesamiento

El sistema debe leer y validar los archivos de registro de datos de ingreso y el de carreras/Universidad.

Según sea la selección del usuario, el sistema debe calcular una asignación.

En caso de emplear una asignación por el modelo de red de flujo, el sistema debe construir la red, calcular el coste -fórmulas (8) y (10)- y luego calcular la asignación.

3.4  Interfaz

La interfaz del sistema debe permitir ajustar los parámetros de las fórmulas de costes (8), (10) y (9), así como las ponderaciones para los niveles socioeconómicos.

Una vez leídos los respectivos datos a través de los archivos especificados, con la excepción de los nombres de carreras, bachilleres, universidades y códigos únicos de bachilleres y carreras/Universidad, se debe estar en la capacidad de modificar, cualquier otro dato de un bachiller en particular o de la carrera. Del mismo modo, debe poderse insertar y eliminar nuevos bachilleres y carreras.

Se deben manejar, como unidades u objetos, conjuntos de archivos de entrada, y las combinaciones de pesos y niveles socioeconómicos empleadas, los procesos de asignación empleados y los distintos archivos de salida generados. Las estadísticas pueden manejarse dentro del mismo sistema u otro separado2.

En general la interfaz debe permitir la carga de archivos, estudios, ajuste de parámetros y pesos, decisión sobre el método de asignación y el guardado y recuperación de sesiones de trabajo.

3.5  Salida

El resultado fundamental es un archivo en formato csv contentivo de las asignaciones según sea al método empleado.

Cada línea del archivo de salida debe contener el número único de registro del bachiller, la carrera/Universidad asignada y el coste de la asignación.

3.6  Estudios postprocesamiento

A partir del archivo de salida, se requieren, como mínimo, los siguientes estudios.

Cada estudio debe estar acompañado de la mayor cantidad posible de indicadores estadísticos.

3.6.1  Discrepancia con el bachiller

Se desean conocer a diversos niveles, nacional, por Universidad y por Universidad/carrera, la distribución de asignaciones según las prioridades inscritas por el bachiller discriminadas por nivel socioeconómico y rangos de notas.

Por ejemplo, para la carrera de Ingeniería de Sistema de la ULA, se quisiera conocer una diagrama de torta que exprese cuantos bachilleres y cuál porcentaje, provienen por su primera opción. Cuantos por la segunda opción y así sucesivamente.

3.6.2  Discrepancia con el criterio carrera/Universidad

Se desea conocer cuál es la proporción de bachilleres que hubiera admitido la Universidad según sus criterio versus la proporción que no hubiera admitido. Esto se desea conocer en general para el país, Universidad y carrera/Universidad.

3.6.3  Porcentaje de cupos asignados por condición socioeconómica y por condición especial

Se desea conocer cuál es el porcentaje de bachilleres asignados de la condición socioeconómica A, B, C, D, E según se requiera, también conocer el porcentaje de bachilleres de condición especial admitidos.

3.6.4  Ofertas vacantes

Ordenamiento de ofertas vacantes; es decir, cupos disponibles.

3.6.5  Demandas insatisfechas

Ordenamiento de demandas insatisfechas según diversas discriminaciones: nivel socioeconómico, rango de promedios, radio latitudinal, etc.

4  Condiciones y requerimientos

4.1  Conformación de los grupos

Máximo cuatro personas, se debe seleccionar un gerente por grupo, habrá reuniones con los gerentes cada dos o tres semanas según sea necesario para discusiones acerca de los avances.

4.2  C++

El sistema debe ser programado en el lenguaje de programación C++.

4.3  QT

La interfaz del sistema programada debe estar realizada en QT versión 4 o superior.

4.4  Biblioteca Aleph-w

Las redes de flujo y otras estructuras de datos y algoritmos deben estar modelizadas y resolverse en Aleph-w. No está permitido usar bibliotecas externas, aunque puede escribir las suyas y/o modificar o extender Aleph-w para corregirle errores o mejorarla. Transgresión de esta condición acarrea cero en la evaluación.

4.5  Sistema operativo

Aleph-w ha sido probado para los compiladores Intel y GNU. Como tal, el sistema operativo de soporte es Linux. Sin embargo, a condición de que Ud. se haga responsable por la portatibilidad,es permitido emplear un compilador distinto; por ejemplo Visual C++ de Microsoft.

En caso de apegarse por Visual C++ tenga en cuenta lo siguiente:

  1. Si se requieren hacer modificaciones sobre la biblioteca, ud tiene la obligación de notificar las modificaciones y su justificación.
  2. La versión de prueba es la 10.0.3. Por versiones anteriores o superiores no se asume responsabilidad alguna en caso de falla de compilación.

4.6  Evaluación

La evaluación se hará por módulos. A la excepción de la interfaz, los módulos serán líneas de comandos con sus respectivos parámetros de entrada y salida. Los nombres de los comandos, los parámetros de entrada y salida junto con sus nombres y los formatos de salida de los módulos de preprocesamiento y postprocesaminto serán definidos en las reuniones.

Las reuniones, cuando se requiera, se harán los viernes de 10 a 11:30 AM. Si no puede asistir en este horario, entonces no asuma la responsabilidad de gerenciar el proyecto. La primera reunión se efectuará el viernes 18 de mayo.

Cada módulo será evaluado del siguiente modo:

VelocidadConsumo memoriaDiseño
50 %30 %20 %

Los tres tipos evaluaciones, velocidad, consumo de memoria y diseño se harán por medidas de rendimiento sobre entrada y salida correctas. Si el programa no genera la salida correcta, entonces la calificación es cero. Por favor, tome muy en cuenta esto porque no habrán excepciones.

Si modulo es declarado correcto (genera correctamente la salida), entonces se efectuarán medidas de rendimiento sobre la velocidad y consumo de memoria para diversas entradas. Por cada entrada se efectuarán al menos tres ejecuciones y sólo se tomará la más rápida. Los promedios de velocidad y consumo de memoria se promediarán y se le otorgará una puntuación en unidades directas; la velocidad será en segundos y microsegundos, el consumo de memoria en cantidad de bytes de consumo (incluyendo el código ejecutable).

El diseño tendrá dos apreciaciones, una manual y otra automática. La automática consistirá en estudiar (con las herramientas apropiadas) el grafo de llamadas de en ejecución del módulo. Este grafo será cotejado con los módulos de los otros grupos para pasar un test plagio. La apreciación manual consistirá en revisar el código fuente y otros documentos que se anexen. Del diseño se otorgará una calificación entre 0 y 20 puntos llamada Nota_d.

La nota por la velocidad (tmin)será de 20 puntos al módulo más rápido entre todos los entregados. Los módulos restantes se calificarán con la nota normalizada al más rápido:

  Nota_t = 
tmin
tmódulo
× 20

Por ejemplo, si el módulo más rápido tiene un promedio de velocidad de t=6,36 s, entonces, otro módulo cuya velocidad promedio sea de 9 segundos tendrá 14.13 puntos.

La nota por el consumo de memoria M es similar:

   Nota_m = 
Mmin
Mmódulo
× 20

La nota del módulo será entonces:

   Nota = 0.5×Nota_t + 0.3× Nota_m + 0.2×Nota_d 

MóduloPonderación %Fecha de entrega
Interfaz (GUI)10En cada avance
Preprocesamiento1501/06/2012
Asignación 11022/06/2012
Asignación 21513/07/2012
Asignación 32027/07/2012
Postprocesamiento2522/06/2012
Manual de referencia y de usuario527/07/2012
Table 2: Ponderación y fecha de entrega de los módulos

Los módulos se envían en tar por email con el subject AYDA-modulo-1 (sin acentos) a las direcciones leandro.r.leon@gmail.com y aledrums@gmail.com. No olvide colocar el subject como se solicita, pues de lo contrario se arriesga a pérdida del email.

El tar del módulo sólo debe contener fuentes y el makefile. La compilación del módulo debe estar atada make all.

Está permitido compartir (si se desea) ideas de diseño, de algoritmos y de estructuras de datos. Sin embargo, está prohibido compartir código con otro grupo o recibir código de otra fuente. Tenga siempre en cuenta que violar esta regla es considerado un fraude que de detectarse acarrearía la anulación del proyecto.

5  Especificaciones técnicas de los módulos

Está sección se irá aumentando conforme vaya avanzando el proyecto. Su propósito es fijar las condiciones de entrega de cada módulo.

5.1  Módulo de preprocesamiento

El archivo ejecutable debe llamarse pre. Asegúrese de que el makefile tenga la opción make pre para generar el ejecutable pre.

pre está destinado a ejecutarse en dos fases.

5.1.1  Primera fase

En esta fase pre recibe dos archivos de entrada:

./pre -F<archivo-estudiantes> -U<archivo-carreras> -o<archivo-salida>

Por omisión, <archivo-salida> se llama pre-1.txt ; esto quiere decir que si no se especifica la opción -o<archivo-salida> entonces éste será pre-1.txt.

En cada línea del archivo de salida debe ir, por cada estudiante del archivo de estudiantes toda esa fila concatenada con la fila de la carrera 1, otra para la carrera 2 y así sucesivamente para las m carreras que solicitó y debe estar ordenado por id de estudiante como clave primaria y por orden de opción de carrera como clave secundaria.

Ejemplo genérico:

Línea de estudiante 1, Línea de la carrera que solicitó como primera opción
Línea de estudiante 1, Línea de la carrera que solicitó como segunda opción
...
Línea de estudiante 2, Línea de la carrera que solicitó como primera opción
Línea de estudiante 2, Línea de la carrera que solicitó como segunda opción
.
.
.
Línea de estudiante N, Línea de la carrera que solicitó como primera opción
Línea de estudiante N, Línea de la carrera que solicitó como segunda opción
...

5.1.2  Segunda fase

La segunda fase consiste en procesar el archivo de la fase anterior para obtener estadísticas.

Básicamente, la interfaz puede describirse así:

./pre [-f<archivo-entrada>] [parámetros-coste | filtros] [-o<archivo-salida>]

Note que todos los parámetros de pre son opcionales. Si sólo se ejecuta ./pre, entonces se asume como archivo de entrada pre-1.txt, parámetros de coste en 1 y estadísticas sobre todo el archivo.

Las estadísticas descriptivas son la media, mediana, moda, varianza y desviación, las cuales siempre se deben poner, en el orden ya dado, separadas por comas, en la última línea del archivo de salida.

Las líneas antecesoras a las estadísticas contienen líneas del <archivo-entrada> que encajan con los criterios “filtro” más los costes según las fórmulas (8) y (10) de cada carrera seleccionada por el estudiante.

Parámetros

  Los parámetros corresponden a los valores de las letras griegas de las fórmulas (8) y (10) respectivamente. Por omisión estos valores son 1.

A continuación se presentan las convecciones para estos parámetros:

  1. -lvalor o --lambda=valor para el modificador lambda
  2. -avalor o --alfa=valor para el modificador alfa
  3. -bvalor o --beta=valor para el modificador beta
  4. -gvalor o --gamma=valor para el modificador gamma
  5. -dvalor o --delta=valor para el modificador delta
  6. -evalor o --epsilon=valor para el modificador epsilon
  7. -tvalor o --theta=valor para el modificador theta
  8. -kvalor o --kappa=valor para el modificador kappa
Filtros

  Los filtros especifican subconjuntos de los estudiantes y carreras para los cuales se desea calcular sus estadísticas. A continuación se describen los distintos tipos de filtros y sus valores en la línea de comandos:

  • -s<rango> o --estudiante=<rango> filtrado por id de estudiante.
  • -Sid o --seleccion=id id de carrera seleccionada
  • -nnivelsocio-económico o --nivel=nivel-socioeconómico
  • -unombre-universidad o --universidad=nombre-universidad filtrado por nombre de la Universidad. Si el nombre de la Universidad posee espacios en blanco, entonces éste debe ponerse entre comillas.
  • -Cnombre-carrera o --carrera=nombre-carrera filtrado por nombre de carrera (también puede estar entre comillas).
  • -p<rango> o --promedio=<rango> filtrado por promedio de notas
  • -iid o --id-carrera=id filtrado por id de la carrera
  • -I<rango> o --indice=<rango> filtrado por índice académico
  • -O<rango> o --opcion=rango filtrado por cantidades de intentos de asignación de cupo en universidad.
  • -d o --condicion-especial filtrado por condición especial
  • -# o --intentos=número-intentos filtrado por cantidad de años solicitando cupo

Las opciones con “rangos”, que se especifican mediante <rango>, especifican rango numéricos según el tipo de filtro especificado. En caso del promedio, por ejemplo, -s12,15 indica en rango de promedios entre 12 y 15 puntos. Si sólo se desea una nota específica, entonces se puede colocar sin coma; por ejemplo -s16 para indicar los promedios de 16 puntos (aunque note que en el caso del promedio esto puede no tener muchos sentido pues éstos se dan hasta con dos decimales). Intervalos abiertos se especifican con el guión -. Por ejemplo, para filtrar los estudiantes con más de 16 puntos se puede indicar -s16,-.

Ejemplos

  Para filtrar los bachilleres que solicitan cupo para Ingeniería de Sistemas con condición socioeconómica C que tengan un promedio de notas como mínimo de 14 puntos, la línea de ejecución es la siguiente:

pre --carrera="Ingenieria de Sistemas" --nivel=C --promedio=14,-  

O usando las versiones abreviadas:

pre -C"Ingenieria de Sistemas" -nC -p14,-  
    

Para filtrar los bachilleres con alguna condición especial que solicitan cupo en la Universidad de Los Andes y tienen más de 3 intentos solicitando cupo, la línea de ejecución es la siguiente:

pre --universidad="Universidad de Los Andes" --condicion-especial=0 --intentos=3,-

O usando las versiones abreviadas:

pre -u"Universidad de Los Andes" -d 0 -# 3,- 

5.2  Módulo de conectividad y 1ra asignación

5.2.1  Módulo de conectividad

El fin de esta fase es reducir la escala de cálculo, y por consiguiente el tiempo de ejecución y memoria, del grafo de selecciones estudiantes a carreras.

Para ello, se debe construir un grafo (no dirigido) de las selecciones. Luego se ejecuta el cálculo de los componentes inconexos (vea la clase Inconnected_Components). El resultado es un conjunto de grafos inconexos que puede tratarse y calcularse separadamente bajo cualquier esquema de asignación.

El módulo de esta fase se llama:

./subgrafos -f archivo-estudiantes [-m carreras] [-o archivo-salida]

El archivo de estudiantes junto con sus selecciones es imperativo. La opción -m es la cantidad de selecciones que se considerará en el conectividad, la cual por omisión es 1.

Note que cuanto menor es -m mayor es la probabilidad de inconectividad del grafo.

La opción -o indica que la salida debe enviarse hacia al archivo especificado en archivo-salida. Si no se especifica, entonces la salida es hacia stdout.

El formato de salida es prácticamente cada fila del archivo de estudiantes con una columna concatenada correspondiente al “color” del bloque inconexo dónde se encuentra. Coloque simplemente un número entre 1 y el número de bloques inconexos. No use el valor cero como color y recuerde que será la última columna y que estará separada por coma.

5.2.2  1ra asignación

En esta fase se deberá efectuar la asignación al estilo que se presume es el actual y explicado en § 2.4.

El nombre del módulo es:

asigna-1 -f archivo-estudiantes 
   

1
En realidad se trata de la misma cosa
2
Aquí podría ser más fácil desarrollar un módulo en Python o R.

This document was translated from LATEX by HEVEA.

viernes, 11 de mayo de 2012

Segundo proyecto práctico de AYDA-2012

Segundo proyecto práctico de AYDA-2012 - Postgrado de Computación
Segundo proyecto práctico para de Análisis y Diseño de Algoritmos
Postgrado de Computación de la Universidad de Los Andes

Contents

1  El trabajo

El fin de este trabajo es instrumentar versiones del quicksort de alto desempeño. Para medir objetivamente las bondades de tus instrumentaciones se elaborarán los productos enunciados en las subsecciones siguientes.

Para una evaluación objetiva y en pos del enriquecimiento del curso, es esencial que los productos sean en y para la biblioteca ℵω. En este sentido, debes emplear las siguientes clases:

  • Slink
  • Dlink
  • DynArray<T>

Las evaluación del proyecto se realizará con la versión 1.1-a, la cual se puede descargar del siguiente enlace:

Toma muy seriamente en consideración que la evaluación se hará en función del desempeño de tu programa. En ese sentido, se te recomienda estudies muy bien el quicksort, especialmente sus mejoras: escogencia del pivote, manejo de claves repetidas, minimización del consumo de pila, eliminación de la recursión y uso de otros métodos de ordenamiento para particiones pequeñas.

Eventualmente, puedes considerar aprovechar el paralelismo.

1.1  Quicksort sobre arreglos

1.1.1  Arreglos estáticos

En este caso debes instrumentar la siguiente primitiva:

 template <typename T, class Compare>
void fquicksort(T a[], size_t n, Compare & cmp);

 template <typename T, class Compare>
void fquicksort(T a[], size_t n, Compare && cmp = Compare);

La cual ordena el arreglo comprendido entre 0 y n-1.

1.1.2  Quicksort sobre arreglos dinámicos

En este caso debes instrumentar las siguientes primitivas:

 template <typename T, class Compare>
void fquicksort(DynArray<T> & a, Compare & cmp);

 template <typename T, class Compare>
void fquicksort(DynArray<T> & a, Compare && cmp = Compare());

La cual ordena el arreglo dinámicos entre 0 y a.size() -1).

1.2  Quicksort sobre listas

A efectos de lograr versiones generales, el ordenamiento sobre listas se efectúa desde enlaces (simples o dobles) y no desde nodos.

Los datos de los nodos se acceden cuando se requiere comparar. Esto se hace mediante la clase Compare.

1.2.1  Quicksort sobre listas simples

En este caso debes instrumentar las siguientes primitivas:

    template <class Compare>
void fquicksort(Slink & list, Compare & cmp);

    template <class Compare>
void fquicksort(Slink & list, Compare && cmp = Compare);

La cual ordena la lista simplemente enlazada cuyo nodo cabecera es list.

En este caso, la clase de comparación sigue el siguiente esquema:

class Mi_Compare
{
public:

  bool operator () (Slink * link1, Slink * link2);
};

Desde el operador () se acceden los datos de los nodos y se comparan. Examine en la biblioteca el fuente de la clase quicksort(Dlink & list, Compare && cmp) para tener una mejor idea de su utilización.

1.2.2  Quicksort sobre listas dobles

En este caso debes instrumentar las siguientes primitivas:

    template <class Compare>
void fquicksort(Dlink & list, Compare & cmp);

    template <class Compare>
void fquicksort(Dlink & list, Compare && cmp = Compare);

La cual ordena la lista doblemente enlazada cuyo nodo cabecera es list.

En este caso, la clase de comparación sigue el siguiente esquema:

class Mi_Compare
{
public:

  bool operator () (Dlink * link1, Dlink * link2);
};

Desde el operador () se acceden los datos de los nodos y se comparan.

1.3  Conjuntos

Como mencionado en clase, el proceso de partición del quicksort puede usarse para instrumentar el problema fundamental mediante arreglos.

En este caso, debes instrumentar el tipo DynSetDynArray<T><,> el cual representa un conjunto dinámico de elementos de tipo Key, Compare.

Para esta clase debes sustentarte sobre la clase DynArray<T>.

Salvando las partes pertinentes a la estructura de dato, la interfaz de DynSetDynArray<T><d>ebe ser idéntica a al tipo DynSetTree. Estudia los fuentes para que entiendas la interfaz.

2  Evaluación

La Evaluación se hará según la tabla 1.


ProblemaVelocidad %Memoria %Diseño %Totales %
Arreglos133420
Listas dobles173424
Listas simples203528
Conjunto1011720
Totales602020100
Table 1: Ponderaciones y perspectivas de evaluación

Por cada problema se ejecutarán tres pruebas variando la escala de la entrada logarítmicamente. Los tres tipos de pruebas se dividen en

  1. Claves únicas
  2. Claves repetidas
  3. Permutaciones pseudoordenadas o sesgadas

Cada prueba se repetirá varias veces. En lo que atañe a la velocidad se tomará el mejor tiempo. En cuanto a la memoria, se tomará mayor consumo (el cual es penalizante).

A efectos de que puedas afinar tu proyecto, los archivos de prueba junto con algunas muestras de entrada se repartirán prontamente.

El diseño se efectuará mediante inspección del fuente. En el caso del conjunto, es imperativo que entregues un documento corto que explique las principales decisiones de diseño.

Las evaluaciones sobre velocidad y consumo de memoria son exactamente proporcionales al rendimiento. El trabajo con mayor velocidad de ejecución tendrá 20 ptos y los restantes se calificarán proporcionalmente. El mismo criterio ocurrirá con el mínimo consumo de memoria.

El diseño será evaluado por el profesor.

3  Condiciones

  1. El proyecto es individual.
  2. Aunque puedes discutir tus criterios de diseño con tus compañeros, no está permitido intercambiar código fuente.
  3. La fecha de entrega es el lunes 4 de junio hasta las 11:59 pm. Puedes enviar el trabajo por email a leandro.r.leon@gmail.com con el subject AYDA: proyecto 2. Por favor, no olvides especificar este subject porque si no arriesgas que no se localice el trabajo al momento de la corrección.
  4. La penalidad por el retardo es de un punto por día hasta un máximo de 7 días. Esto se debe a que no se pueden calificar los proyectos hasta no tener la totalidad de ellos. A partir del lunes 11 de junio no se aceptarán más proyectos.
  5. Los métodos de ordenamiento y el conjunto deben realizarse sobre y con las clases especificadas de ℵω.

This document was translated from LATEX by HEVEA.