¿Qué es Visa Predict AI?
Visa Predict AI es un proyecto de investigación que aplica inteligencia artificial
para repensar cómo se reparten las 140,000 Green Cards de empleo
que Estados Unidos otorga cada año.
El problema: El sistema actual (FIFO) atiende por orden
de llegada, pero no considera la demanda real. Un ingeniero de India puede esperar
más de una década, mientras países con poca demanda
reciben visas en meses. Además, el FIFO desperdicia
17,540 visas que quedan
sin asignar porque ningún país elegible tiene solicitantes suficientes en esa categoría.
Nuestra propuesta: Usamos un algoritmo bio-inspirado
llamado MOHHO (Multi-Objective Harris Hawks Optimization) que busca optimizar
tres objetivos simultáneamente:
▸ f₁ Reducir la espera promedio ponderada
▸ f₂ Tratar a todos los países con equidad
▸ f₃ Maximizar la utilización (cero visas desperdiciadas)
El resultado: 406 escenarios alternativos de reparto,
cada uno con un balance diferente entre estos tres objetivos. Ninguno es "el mejor" en todo
— el tomador de decisiones elige según sus prioridades.
¿Cómo Funciona MOHHO?
Los halcones de Harris son las únicas aves rapaces que cazan en grupo de forma
cooperativa. Rodean a su presa, la acorralan y atacan desde múltiples ángulos.
El algoritmo HHO imita esta estrategia: un grupo de "halcones virtuales" explora
el espacio de posibles repartos de visas. Cada halcón representa una forma diferente
de distribuir las 140,000 visas. Comparten información y convergen
hacia las mejores soluciones.
La Caza Multiobjetivo
En la naturaleza, los halcones de Harris tienen un solo objetivo: atrapar a la presa.
En nuestro problema, la "presa" tiene tres dimensiones
— hay que perseguirla en tres direcciones a la vez.
f₁ Reducir espera
Un grupo de halcones persigue soluciones que
minimicen la espera promedio. Priorizan a India y
China, que llevan más años en la fila.
f₂ Igualar países
Otro flanco ataca la disparidad: buscan repartos
donde ningún país espere mucho más que otro.
Sacrifican velocidad por justicia.
f₃ Cero desperdicio
El tercer ángulo busca usar todas las visas.
Reasignan visas que el FIFO dejaría vacantes por
topes de país o categoría.
El dilema: Ningún halcón puede "atrapar" los tres objetivos a la vez.
Reducir la espera (f₁) puede aumentar la disparidad (f₂) o desperdiciar visas (f₃).
Por eso el algoritmo no busca una solución perfecta, sino un
frente de Pareto — 406 compromisos diferentes
donde mejorar un objetivo inevitablemente empeora otro.
Pipeline del Algoritmo
Halcón
50 halcones con vectores de 105 números entre 0 y 1
Cada halcón es una propuesta de reparto
SPV
Convertir números decimales a un orden de prioridad
Quién va primero en la fila de visas
Decoder
Repartir visas respetando las 6 reglas legales
Asignación factible garantizada
Evaluar
Calcular f₁ (espera), f₂ (brecha) y f₃ (desperdicio)
Qué tan buena es esta solución
Pareto
Guardar las soluciones que nadie puede superar
406 compromisos óptimos
Este ciclo se repite 500 veces por corrida,
y se ejecuta 30 corridas con semillas diferentes
para verificar consistencia.
Las 6 Estrategias de los Halcones
Exploración
|E| ≥ 1
Buscar en zonas nuevas del espacio. Los halcones vuelan lejos del grupo,
como scouts que exploran territorio desconocido.
Asedio suave
|E| < 1, |E| ≥ 0.5, r ≥ 0.5
Rodear la presa desde lejos. Los halcones ajustan su posición gradualmente
hacia la mejor solución conocida.
Asedio duro
|E| < 1, |E| < 0.5, r ≥ 0.5
Acercarse rápidamente a la presa. Movimientos más agresivos hacia la solución líder.
Picada suave con Lévy
|E| < 1, |E| ≥ 0.5, r < 0.5
Simular que la presa escapa y recalcular. Incluye vuelos de Lévy
para dar saltos largos y evitar quedarse atrapado.
Picada dura con Lévy
|E| < 1, |E| < 0.5, r < 0.5
Ataque final: movimiento preciso con vuelo de Lévy hacia la posición óptima.
Vuelo de Lévy
Componente especial
Patrón de movimiento con pasos largos ocasionales — como un halcón que de repente
vuela lejos del grupo para cubrir más terreno.
La Energía de Escape (E) controla la transición.
E = 2·E₀·(1 − t/T), donde E₀ ∈ [−1, 1] es aleatorio.
Al inicio, |E| puede alcanzar hasta 2 (exploración amplia);
conforme avanzan las iteraciones, la amplitud decrece hasta 0 (explotación pura).
Esto permite al algoritmo primero explorar ampliamente y luego refinar las mejores soluciones.
Parámetros del Experimento
¿Por qué este valor?
Heidari et al. (2019) recomiendan N=30-50 para problemas de dimensión media.
Con dim=105 (nuestros 105 grupos), 50 halcones dan suficiente diversidad sin
desperdicio computacional. Regla empírica: N ≈ 0.5×dim.
¿Por qué este valor?
500 iteraciones garantizan convergencia: nuestras curvas de hipervolumen se estabilizan
al 95% del valor final antes de la iteración 100. Las 400 restantes permiten
explotación fina (Ops 3-6 de HHO). En metaheurísticas, T=500 es estándar
para asegurar que el resultado no dependa de parar demasiado pronto.
¿Por qué este valor?
100 es el valor canónico en MOEA/D y NSGA-II (Deb et al., 2002).
Suficiente para representar un frente triobjetivo con buena diversidad.
Si se llena, se poda por crowding distance — se eliminan las soluciones
más apretadas, conservando los extremos y el knee (punto de equilibrio).
¿Por qué este valor?
30 corridas es el mínimo recomendado por Derrac et al. (2011) para aplicar
pruebas estadísticas no paramétricas (Wilcoxon, Mann-Whitney).
Con 30 muestras el Teorema Central del Límite justifica intervalos de confianza
sobre la media del hipervolumen. Semillas consecutivas: 42, 43, ..., 71.
¿Por qué este valor?
Establecido por la Ley de Inmigración y Nacionalidad (INA) §201(d).
No es un parámetro libre — es un dato fijo del gobierno de EE.UU.
Se mantiene en 140,000 desde 1990. Es la restricción R1 del modelo.
¿Por qué este valor?
Cada combinación país-categoría es una variable de decisión (x₁ a x₁₀₅).
El halcón genera un vector de 105 valores continuos en [0,1], que el SPV
convierte en permutación y el decoder traduce a asignación factible.
dim=105 define el tamaño del espacio de búsqueda.
¿Por qué este valor?
Se seleccionaron los 20 países con mayor backlog documentado por USCIS (Visa Bulletin).
El bloque 'Resto del Mundo' agrupa ~175 países con demanda individual pequeña.
Estos 21 bloques representan >99% de la demanda total de visas EB.
¿Por qué este valor?
INA §202(a)(2): ningún país puede recibir más del 7% del total de visas de inmigración
(familiares + empleo = 366,000). 366,000 × 0.07 = 25,620.
Es la causa estructural del problema: India genera más de la mitad de la demanda EB
pero recibe máximo 7%. Esto crea colas de décadas.
Equipo y Créditos
Investigadores
Yazmín Flores
Javier Rebull
Maestría en Inteligencia Artificial
Aplicada a Datos (MIAAD)
Dirección académica
Mtro. Raúl Gibrán Porras Alaniz
Optimización Inteligente
Universidad Autónoma de
Ciudad Juárez (UACJ)
Stack tecnológico
Python + NumPy
Streamlit + Plotly
MOHHO (implementación propia)
Código fuente: Python 3.12 | Visualización 100% Plotly (zero matplotlib) | Dark-first UI
El Problema en Palabras Simples
Imagina un hospital con 140,000 camas
y 868,098 pacientes de
21 ciudades esperando ingresar.
Algunos llevan 13 años en lista de espera.
Regla actual (FIFO): se atiende por orden de llegada. Suena justo, pero hay una restricción:
ningún barrio puede ocupar más del 7% de las camas.
El resultado: los pacientes de las dos ciudades más grandes (India y China, que suman más del 60% de la demanda)
llenan su cuota en minutos, y sus miles de pacientes restantes siguen esperando.
Mientras tanto, camas asignadas a ciudades pequeñas quedan vacías —
17,540 camas desperdiciadas.
El dilema tiene tres dimensiones:
• Urgencia (f₁):
¿Damos camas a los que más tiempo llevan esperando? Eso favorece a India y China, pero concentra todos los recursos en dos ciudades.
• Equidad (f₂):
¿Repartimos para que todas las ciudades esperen lo mismo? Eso reduce la brecha, pero deja sin atender a los más urgentes.
• Eficiencia (f₃):
¿Llenamos todas las camas? El orden de procesamiento importa: si llenas la cuota de India primero, quedan camas de EB-1 vacías que nadie puede usar.
No existe una solución perfecta que gane en las tres dimensiones a la vez.
Lo que sí existe es un mapa de 406 compromisos óptimos:
cada uno prioriza de forma diferente, y ninguno puede mejorar una dimensión sin empeorar otra.
Eso es el frente de Pareto — y es lo que el algoritmo calcula.
¿Qué Decidimos? (Variable de Decisión)
En lenguaje cotidiano
Para cada combinación de país + categoría (ej. "India EB-2"),
decidimos cuántas visas le damos este año.
Hay 21 países y 5 categorías = 105 grupos.
Cada grupo tiene un número diferente: India EB-2 podría recibir 5,000 visas,
Canadá EB-1 podría recibir 200, etc.
En lenguaje matemático
xg ∈ ℤ⁺₀ : visas asignadas al grupo g
El vector x = (x1, x2, ..., x105)
tiene 105 números enteros no negativos.
Cada xg dice cuántas visas recibe el grupo g.
Los Tres Objetivos (¿Qué Queremos Lograr?)
Queremos tres cosas a la vez, pero están en conflicto: si priorizas a India (que espera más),
otros países se quedan sin visas y la desigualdad crece. Si repartes equitativamente,
India sigue esperando décadas y se desperdician visas al chocar con límites por país.
No hay solución perfecta — hay 406 compromisos.
Objetivo 1 (f₁): Reducir la Espera
En simple: darle visas a la gente que lleva más años esperando.
Si India lleva 13 años y Canadá 4, priorizamos a India.
f₁(x) = Σg
(ng − xg) · wg
/ Σg ng
ng = cuántas personas esperan en el grupo g
xg = cuántas visas le damos al grupo g
wg = años que llevan esperando
(ng − xg) = personas que se quedan sin visa
La fórmula dice: de los que no recibieron visa, ¿cuántos años de espera acumulan?
Dividimos entre el total para normalizar. Queremos que sea lo más bajo posible.
Objetivo 2 (f₂): Reducir la Desigualdad
En simple: que la espera sea parecida entre países.
Si India espera 13 años y Canadá 1, la brecha es 12 — queremos reducirla.
W̄c = Σ xg·wg
/ Σ xg
(por país c)
f₂(x) = max |W̄c1 − W̄c2|
W̄c = espera promedio de las visas que le dimos al país c
Si un país no recibe visas: W̄c = su espera máxima (castigo)
La fórmula busca el par de países con la mayor diferencia de espera.
Esa brecha máxima es f₂. Queremos que sea lo más baja posible.
Objetivo 3 (f₃): Minimizar el Desperdicio de Visas
En simple: usar la mayor cantidad posible de las 140,000 visas disponibles.
Cada visa no asignada es una oportunidad perdida.
V = 140,000 visas disponibles por año
Σ xg = total de visas efectivamente asignadas
FIFO desperdicia 17,540 visas
porque choca con límites por país antes de agotar el presupuesto.
Queremos que f₃ sea lo más bajo posible.
¿Por qué No se Puede Ganar en los Tres?
Estrategia A: "Ayudar a los que más esperan"
Damos todas las visas posibles a India y China primero.
Se reduce mucho la espera global, pero Canadá, Alemania y otros
con poca espera se quedan sin nada.
Estrategia B: "Tratar a todos igual"
Repartimos visas para que todos los países tengan esperas similares.
Muy equitativo, pero India sigue con colas de décadas porque no recibe suficientes.
Ninguna estrategia gana en los tres: A es mejor en f₁ pero peor en f₂;
B es mejor en f₂ pero peor en f₁; y las soluciones que maximizan utilización (f₃ bajo)
no siempre minimizan espera o disparidad. Esto se llama conflicto estructural
y es la razón por la que no hay UNA solución óptima, sino un frente de 406 compromisos.
¿Por qué 3 Objetivos?
El tercer objetivo f₃ = V − Σxg mide las visas desperdiciadas.
Los datos empíricos muestran que f₃ varía significativamente entre soluciones:
FIFO (sistema actual)
f₃ = 17,540
Desperdicia 17,540
visas por chocar con límites por país
MOHHO (406 soluciones Pareto)
f₃: 0 a 23,048
Visas usadas: 116,952 a 140,000
Promedio: 133,036 visas (95%)
Mejor utilización (f₃ mínimo)
f₃ = 0
140,000 visas asignadas
(100% utilización)
¿Por qué restaurar f₃ como objetivo?
f₃ (visas no usadas) varía significativamente entre soluciones — de 0 a 23,048.
Las soluciones que priorizan equidad (f₂ bajo) tienden a usar menos visas porque
reparten entre más países y chocan con más límites. Esto convierte a f₃ en un
objetivo genuinamente en conflicto con f₂.
Decisión: se modela como triobjetivo min{f₁, f₂, f₃}.
El frente de Pareto pasa de ser una curva 2D a una superficie 3D
con 406 soluciones no dominadas. El presupuesto total de 140,000 visas
se sigue respetando como restricción R1 (Σxg ≤ V),
mientras que f₃ mide cuánto de ese presupuesto se logra asignar efectivamente.
Las 6 Reglas del Juego (Restricciones)
No podemos repartir visas como se nos antoje. La ley de inmigración de EE.UU.
impone reglas estrictas. El decoder garantiza R1–R5 por construcción;
R6 es una regla operativa post-optimización.
Presupuesto anual:
No puedes dar más visas de las que existen.
Solo hay 140,000 visas EB por año. Ni una más.
Σ xg ≤ 140,000
Límite por país (7%):
Ningún país puede acaparar todo.
Cada país recibe máximo 7% del total (25,620). Excepción: "Resto del Mundo" (bloque agregado) puede recibir más si las visas no se agotan en los 20 países individuales. India, con más de la mitad de la demanda, tiene colas de décadas.
Σ xg ≤ 25,620 por país (excepto RdM)
Límite por categoría:
Cada tipo de visa tiene su tope.
EB-1 (extraordinarios), EB-2 (profesionales), etc. tienen cupos propios, ajustados por spillover.
Σ xg ≤ Kjeff por categoría
No dar de más:
No puedes dar más visas de las que piden.
Si Canadá EB-5 pide 100, no puedes darle 200.
xg ≤ ng
Enteros:
No hay media visa.
Cada visa es un permiso real — no se puede fraccionar.
xg ∈ enteros ≥ 0
FIFO interno:
Dentro de cada grupo, los más antiguos primero.
Aunque reordenamos ENTRE grupos, DENTRO de cada grupo se respeta el orden de llegada. Esta regla es operativa — no la impone el optimizador sino la implementación posterior.
Orden por fecha de prioridad
Spillover: Las Visas que Sobran se Pasan
Ejemplo: EB-4 (visas especiales) y EB-5 (inversores) tienen poca demanda.
Sus visas sobrantes suben a EB-1. Si a EB-1 le sobran, bajan
a EB-2, y de EB-2 a EB-3. Así las visas no se desperdician.
→
→
EB-2
Recibe sobrante de EB-1
→
EB-3
Recibe sobrante de EB-2
Ver fórmulas de spillover
S₄ = max(0, K₄ − D₄),
S₅ = max(0, K₅ − D₅)
K₁eff = K₁ + S₄ + S₅
S₁ = max(0, K₁eff − D₁)
K₂eff = K₂ + S₁,
S₂ = max(0, K₂eff − D₂)
K₃eff = K₃ + S₂
¿Cómo Encuentra las Soluciones? (Codificación en 3 Capas)
El algoritmo HHO está inspirado en halcones de Harris que cazan en grupo.
Cada halcón representa una posible forma de repartir visas. Pero los halcones
"piensan" en números decimales, y nosotros necesitamos decisiones enteras.
Aquí está el truco en 3 pasos:
Paso 1: El Halcón Vuela
H = (0.72, 0.15, 0.91, ...)
El halcón tiene 105 números entre 0 y 1.
Los mueve usando 6 estrategias de caza
(exploración, asedio, picada, vuelo de Lévy...).
Paso 2: Convertir a Orden (SPV)
π = argsort(H) → (2, 1, 3, ...)
Ordenamos los grupos de menor a mayor valor.
El grupo con el número más chico va primero
en la fila de las visas.
Paso 3: Repartir (Decoder Greedy)
xg = min(ng, Vrest, cappaís, capcat)
Recorremos la fila y damos visas hasta agotar.
Cada grupo recibe el mínimo entre su demanda,
visas restantes, cupo de país y cupo de categoría.
Conexión: Modelo Matemático ↔ Metaheurística HHO
En la naturaleza, los halcones de Harris cazan conejos en equipo usando distintas estrategias.
El algoritmo traduce cada elemento de la caza a un componente del modelo matemático:
🦅 Halcón (posición H)
→ Vector continuo
Cada halcón es un vector H ∈ ℝ¹⁰⁵ (un número real por cada uno de los 105 grupos país-categoría).
No es una solución directamente — es un código que el decodificador SPV+Greedy traduce a una asignación factible.
🐇 Presa (líder)
→ Solución no dominada
En HHO mono-objetivo, la presa es el mejor individuo. En MOHHO, la presa se elige
aleatoriamente del archivo de Pareto, con preferencia por soluciones en zonas
poco densas (crowding distance). Así los halcones exploran todo el frente, no solo un extremo.
⚡ Energía de escape (E)
→ Balance exploración/explotación
E = 2·E₀·(1 − t/T), con E₀ aleatorio en [−1, 1].
Al inicio |E| puede alcanzar hasta 2: los halcones exploran
posiciones lejanas (búsqueda global). Conforme avanzan las iteraciones, la amplitud de |E| decrece:
los halcones explotan la vecindad de la presa (refinamiento local).
Esto es lo que hace que HHO converja.
💨 Vuelo de Lévy
→ Saltos largos ocasionales
Cuando |E| < 1 y r < 0.5, el halcón puede hacer una “picada rápida” con salto de Lévy:
pasos cortos frecuentes + saltos largos raros. Esto evita que el algoritmo se quede atrapado
en óptimos locales, crucial para encontrar las 406 soluciones diversas del frente.
📂 Archivo externo
→ Frente de Pareto
Las mejores soluciones no dominadas se guardan en un archivo de tamaño 100. Cuando se llena,
se eliminan las soluciones en zonas densas (menor crowding distance). Esto garantiza diversidad en el frente final.
⚙️ Decodificador SPV+Greedy
→ Factibilidad garantizada
El halcón vuela libremente en ℝ¹⁰⁵ sin preocuparse por restricciones.
La regla SPV (Smallest Position Value) convierte esos números en un orden de prioridad,
y el decoder greedy reparte visas respetando R1–R5 por construcción.
No hay soluciones inválidas.
Ejemplo Paso a Paso
Paso 1:
El halcón genera: H = (0.72,
0.15,
0.91,
0.03,
0.58)
Paso 2 (SPV):
Ordenamos de menor a mayor → π = (4, 2, 5, 1, 3)
El grupo 4 (valor 0.03) va primero,
luego el 2 (0.15), etc.
Paso 3 (Decoder):
Recorremos π y repartimos:
• Grupo 4: pide 8,000 → le damos min(8000, Vrest, cupo_país, cupo_cat)
• Grupo 2: pide 15,000 → le damos lo que se pueda sin violar R1-R5
• ... y así hasta agotar las 140,000 visas.
Propiedad clave: cualquier orden que genere el halcón produce una asignación
factible (satisface R1-R5). No se necesitan penalizaciones — la factibilidad está garantizada por diseño.
Paso 4 (Evaluar):
Calculamos los tres objetivos sobre la asignación resultante x:
• f₁ = Σ(ng − xg) · wg / Σ ng
• f₂ = max|W̄c1 − W̄c2| entre todos los pares de países
• f₃ = V − Σ xg (visas sin asignar)
Ejemplo con Números Reales
El algoritmo evaluó las tres funciones objetivo para cada solución. Estos son los resultados
de cuatro soluciones reales del experimento:
Comparación de soluciones extremas del frente de Pareto vs. FIFO
| Solución |
f₁ (espera) |
f₂ (disparidad) |
f₃ (desperdicio) |
| Mejor f₁ |
7.186 años |
10.744 años |
16,280 |
| Mejor f₂ |
7.507 años |
2.379 años |
8,664 |
| Mejor f₃ |
7.257 años |
9.361 años |
0 |
| FIFO (actual) |
7.214 años |
12.638 años |
17,540 |
¿Por qué ninguna es la “mejor”?
Mejor-f₁ tiene la menor espera (7.186) pero desperdicia 16,280 visas.
Mejor-f₃ no desperdicia ninguna visa pero su espera es 7.257.
Mejor-f₂ tiene la menor brecha (2.379) pero la peor espera (7.507).
Las tres son óptimas — cada una gana en un objetivo y pierde en otro.
Eso es el frente de Pareto.
¿Qué es el Frente de Pareto?
Imagina que comparas dos repartos de visas, A y B:
• Si A tiene menor espera, menor brecha Y menos desperdicio que B → A es claramente mejor.
Decimos que A domina a B.
• Si A tiene menor espera PERO mayor brecha o más desperdicio → ninguno domina al otro.
Ambos son válidos, solo son compromisos diferentes.
El frente de Pareto es el grupo de soluciones que nadie puede superar en los tres
objetivos a la vez. Son las "mejores opciones disponibles" — 406
en nuestro caso.
Ver definición formal de dominancia
a ≻ b ⟺
∀m ∈ {1,2,3}: fm(a) ≤ fm(b)
∧ ∃m: fm(a) < fm(b)
a domina a b si es al menos igual en los tres objetivos y estrictamente mejor en al menos uno.
Frente de Pareto = { x | no existe x' que domine a x }
¿Cómo Sabemos si las Soluciones son Buenas? (Hipervolumen)
El hipervolumen (HV) es como medir el "volumen" que cubre el frente de Pareto
en el espacio tridimensional de f₁ × f₂ × f₃. Si el frente se expande (mejores soluciones),
el volumen crece.
• Mayor HV = mejor: las soluciones cubren más espacio de opciones.
• Lo calculamos para cada una de las 30 corridas del algoritmo para verificar que es
consistente (no fue suerte de una sola vez).
• HV medio de nuestro modelo: 1,785,802.75
con desviación estándar de solo 27,830.57 — muy estable.
Glosario
Inmigración
Green Card (Tarjeta de Residencia)
Permiso de residencia permanente en EE.UU. Se emiten 140,000 visas de empleo al año
en 5 categorías (EB-1 a EB-5). Es lo que reparte nuestro modelo.
Sistema actual
FIFO (First In, First Out)
El sistema vigente: quien llegó primero se atiende primero. Simple pero injusto —
ignora cuánto llevas esperando y genera colas de décadas para India y China.
Nuestro algoritmo
MOHHO
Multi-Objective Harris Hawks Optimization. Algoritmo de IA inspirado en la caza cooperativa
de halcones de Harris. Encuentra 406 formas alternativas de repartir visas, cada una
con un balance diferente entre espera (f₁), equidad (f₂) y utilización (f₃).
Objetivo 1
f₁ — Carga de espera
Mide cuántos años de espera quedan sin resolver. Minimizarlo prioriza dar visas
a la gente que lleva más tiempo en la fila (India, China).
Objetivo 2
f₂ — Brecha entre países
Mide la mayor diferencia de espera entre cualquier par de países.
Minimizarlo busca que todos los países esperen tiempos similares — equidad pura.
Objetivo 3
f₃ — Desperdicio de visas
Mide cuántas de las 140,000 visas quedan sin asignar (f₃ = V − Σx).
Minimizarlo maximiza la utilización del presupuesto anual. FIFO desperdicia
17,540 visas; MOHHO puede llegar hasta f₃ = 0.
Concepto clave
Frente de Pareto
El grupo de soluciones que nadie puede superar en los tres objetivos a la vez.
Si una solución tiene menos espera, otra tendrá menos brecha o menos desperdicio —
no se puede ganar en todo. Nuestro frente tiene 406 puntos.
Punto especial
Knee Point (Equilibrio)
El punto del frente de Pareto donde un poquito más de espera produce mucha más equidad
(o viceversa). Es el compromiso más eficiente entre los tres objetivos.
Inmigración
Categorías EB
EB-1: personas extraordinarias (premios Nobel, etc).
EB-2: profesionales con maestría. EB-3: trabajadores calificados.
EB-4: inmigrantes especiales (religiosos, traductores militares).
EB-5: inversores ($800k+).
Ley migratoria
Spillover
Si una categoría no usa todas sus visas, el sobrante pasa a otra.
EB-4/5 tienen poca demanda, así que sus visas extras suben a EB-1,
luego bajan a EB-2 y EB-3.
Ley migratoria
Límite del 7%
Ningún país puede recibir más del 7% del total (25,620 visas/año).
India tiene más de la mitad de la demanda pero recibe máximo 7%.
Esta es la causa principal del problema.
Métrica
Hipervolumen (HV)
Mide qué tan buenas son las soluciones: el 'volumen' del espacio triobjetivo cubierto por el frente de Pareto.
Mayor volumen = mejores soluciones. Lo usamos para comparar las 30 corridas del algoritmo.
Técnica
SPV
Smallest Position Value (Bean, 1994). Truco matemático para convertir números
decimales (que maneja el halcón) en un orden de prioridad (que necesita el decoder).
Componente
Decodificador Greedy
Recibe un orden de prioridad y reparte visas uno por uno, tomando el mínimo entre demanda,
visas restantes, cupo de país y cupo de categoría. Cualquier orden produce un reparto válido (R1-R5).
Técnica HHO
Vuelo de Lévy
Patrón de movimiento con pasos cortos frecuentes y saltos largos ocasionales.
Evita que los halcones se queden atrapados en soluciones mediocres.
Experimento
Convergencia
Cómo mejora el algoritmo con el tiempo. Al inicio explora mucho (HV sube rápido),
luego se estabiliza (encontró las mejores soluciones).
Nuestro MOHHO converge al 95% en las primeras ~100 iteraciones.