La función de Griewank es una función de prueba común en optimización. Se define como:
\[ f(\mathbf{x}) = 1 + \frac{1}{4000} \sum_{i=1}^d x_i^2 - \prod_{i=1}^d \cos\left(\frac{x_i}{\sqrt{i}}\right) \]
Su gradiente tiene componentes:
\[ \frac{\partial f}{\partial x_i} = \frac{x_i}{2000} - \frac{\prod_{j=1}^d \cos\left( \frac{x_j}{\sqrt{j}} \right)}{\cos\left( \frac{x_i}{\sqrt{i}} \right)} \times \frac{\sin\left( \frac{x_i}{\sqrt{i}} \right)}{\sqrt{i}} \] Donde: - \(d\) es la cantidad de dimensiones. - El dominio típico es \(x_i \in [-600, 600]\). - El mínimo global está en \(\mathbf{x} = (0,0,\ldots,0)\).
knitrEn el primer chunk se define las opciones globales de
knitr (para mostrar o no el código, mensajes y warnings),
se crea un directorio temporal para almacenar archivos intermedios y
cargamos todas las librerías que usaremos más adelante (visualización
2D/3D, animaciones, optimización, etc.).
Se implementa la función de Griewank para evaluar el valor objetivo
de cualquier vector x, requisito previo indispensable para
todos los algoritmos de optimización.
Aquí se define la función que devuelve el gradiente de Griewank, necesario para el descenso por gradiente.
Fig 1. Descenso de gradiente Griewank (2D)
## Óptimo encontrado en la iteración: 200
## Coordenadas (x1, x2): -254.3516 341.9444
## Valor Griewank: 45.41822
Fig 2. Descenso de gradiente Griewank (3D)
## Óptimo encontrado en la iteración: 1000
## Coordenadas (x1, x2, x3): -254.3503 341.9331 -108.7581
## Valor Griewank (3D): 48.37507
Fig 3. Optimización GA Griewank (2D)
## Primer óptimo encontrado en la iteración: 187
## Coordenadas (x, y): 0.01274637 0.01105165
## Valor Griewank: 0.0001118371
## | Local search = -0.06162464
## | Local search = -0.02958663
## | Local search = -0.02958663
## | Local search = -0.02958663
## | Local search = -0.06162464
## | Local search = -0.02958663
## | Local search = -0.02958663
## | Local search = -0.02958663
## | Local search = -0.02958663
## | Local search = -0.02958663
## | Local search = -0.02958663
## | Final local search = -0.00739604
Fig 4. Optimización GA Griewank (3D)
## Primer óptimo encontrado en la iteración: 220
## Coordenadas (x, y): -2.962725 -4.329653
## Valor Griewank: 0.02810254
Fig 5. Optimización PSO Griewank (2D)
## Primer óptimo encontrado en la iteración: 7051
## Coordenadas (x, y): 0.05415174 -0.1194739
## Valor Griewank: 0.005031305
Fig 6. Optimización PSO Griewank (3D)
## Primer óptimo encontrado en la iteración: 7745
## Coordenadas (x, y): -3.069045 -4.527993
## Valor Griewank: 0.01193609
## Iteration: 1 bestvalit: 1.858679 bestmemit: 52.879230 -33.133094
## Iteration: 2 bestvalit: 1.236365 bestmemit: -38.102280 -19.646541
## Iteration: 3 bestvalit: 1.029369 bestmemit: 7.927455 1.975890
## Iteration: 4 bestvalit: 0.634864 bestmemit: 9.573241 -48.956346
## Iteration: 5 bestvalit: 0.634864 bestmemit: 9.573241 -48.956346
## Iteration: 6 bestvalit: 0.157683 bestmemit: -3.686243 -4.585381
## Iteration: 7 bestvalit: 0.157683 bestmemit: -3.686243 -4.585381
## Iteration: 8 bestvalit: 0.157683 bestmemit: -3.686243 -4.585381
## Iteration: 9 bestvalit: 0.157683 bestmemit: -3.686243 -4.585381
## Iteration: 10 bestvalit: 0.153975 bestmemit: 6.362271 0.760187
## Iteration: 11 bestvalit: 0.153975 bestmemit: 6.362271 0.760187
## Iteration: 12 bestvalit: 0.127702 bestmemit: 6.465113 -18.052020
## Iteration: 13 bestvalit: 0.127702 bestmemit: 6.465113 -18.052020
## Iteration: 14 bestvalit: 0.127702 bestmemit: 6.465113 -18.052020
## Iteration: 15 bestvalit: 0.127702 bestmemit: 6.465113 -18.052020
## Iteration: 16 bestvalit: 0.127702 bestmemit: 6.465113 -18.052020
## Iteration: 17 bestvalit: 0.034531 bestmemit: -9.483555 -4.585381
## Iteration: 18 bestvalit: 0.034531 bestmemit: -9.483555 -4.585381
## Iteration: 19 bestvalit: 0.034531 bestmemit: -9.483555 -4.585381
## Iteration: 20 bestvalit: 0.034531 bestmemit: -9.483555 -4.585381
## Iteration: 21 bestvalit: 0.034531 bestmemit: -9.483555 -4.585381
## Iteration: 22 bestvalit: 0.016091 bestmemit: -3.138448 4.624953
## Iteration: 23 bestvalit: 0.016091 bestmemit: -3.138448 4.624953
## Iteration: 24 bestvalit: 0.016091 bestmemit: -3.138448 4.624953
## Iteration: 25 bestvalit: 0.016091 bestmemit: -3.138448 4.624953
## Iteration: 26 bestvalit: 0.016091 bestmemit: -3.138448 4.624953
## Iteration: 27 bestvalit: 0.016091 bestmemit: -3.138448 4.624953
## Iteration: 28 bestvalit: 0.016091 bestmemit: -3.138448 4.624953
## Iteration: 29 bestvalit: 0.016091 bestmemit: -3.138448 4.624953
## Iteration: 30 bestvalit: 0.016091 bestmemit: -3.138448 4.624953
## Iteration: 31 bestvalit: 0.016091 bestmemit: -3.138448 4.624953
## Iteration: 32 bestvalit: 0.016091 bestmemit: -3.138448 4.624953
## Iteration: 33 bestvalit: 0.016091 bestmemit: -3.138448 4.624953
## Iteration: 34 bestvalit: 0.014077 bestmemit: -6.192121 0.037358
## Iteration: 35 bestvalit: 0.014077 bestmemit: -6.192121 0.037358
## Iteration: 36 bestvalit: 0.014077 bestmemit: -6.192121 0.037358
## Iteration: 37 bestvalit: 0.014077 bestmemit: -6.192121 0.037358
## Iteration: 38 bestvalit: 0.014077 bestmemit: -6.192121 0.037358
## Iteration: 39 bestvalit: 0.014077 bestmemit: -6.192121 0.037358
## Iteration: 40 bestvalit: 0.014077 bestmemit: -6.192121 0.037358
## Iteration: 41 bestvalit: 0.014077 bestmemit: -6.192121 0.037358
## Iteration: 42 bestvalit: 0.014077 bestmemit: -6.192121 0.037358
## Iteration: 43 bestvalit: 0.014077 bestmemit: -6.192121 0.037358
## Iteration: 44 bestvalit: 0.014077 bestmemit: -6.192121 0.037358
## Iteration: 45 bestvalit: 0.014077 bestmemit: -6.192121 0.037358
## Iteration: 46 bestvalit: 0.014077 bestmemit: -6.192121 0.037358
## Iteration: 47 bestvalit: 0.014077 bestmemit: -6.192121 0.037358
## Iteration: 48 bestvalit: 0.014077 bestmemit: -6.192121 0.037358
## Iteration: 49 bestvalit: 0.014077 bestmemit: -6.192121 0.037358
## Iteration: 50 bestvalit: 0.014077 bestmemit: -6.192121 0.037358
## Iteration: 51 bestvalit: 0.014077 bestmemit: -6.192121 0.037358
## Iteration: 52 bestvalit: 0.014077 bestmemit: -6.192121 0.037358
## Iteration: 53 bestvalit: 0.013877 bestmemit: -3.094796 -4.586258
## Iteration: 54 bestvalit: 0.013877 bestmemit: -3.094796 -4.586258
## Iteration: 55 bestvalit: 0.013850 bestmemit: 3.206400 -4.568935
## Iteration: 56 bestvalit: 0.010378 bestmemit: 6.261909 0.037358
## Iteration: 57 bestvalit: 0.010378 bestmemit: 6.261909 0.037358
## Iteration: 58 bestvalit: 0.010378 bestmemit: 6.261909 0.037358
## Iteration: 59 bestvalit: 0.010378 bestmemit: 6.261909 0.037358
## Iteration: 60 bestvalit: 0.010378 bestmemit: 6.261909 0.037358
## Iteration: 61 bestvalit: 0.010378 bestmemit: 6.261909 0.037358
## Iteration: 62 bestvalit: 0.003491 bestmemit: -0.080694 0.030742
## Iteration: 63 bestvalit: 0.003491 bestmemit: -0.080694 0.030742
## Iteration: 64 bestvalit: 0.003491 bestmemit: -0.080694 0.030742
## Iteration: 65 bestvalit: 0.003491 bestmemit: -0.080694 0.030742
## Iteration: 66 bestvalit: 0.003491 bestmemit: -0.080694 0.030742
## Iteration: 67 bestvalit: 0.003491 bestmemit: -0.080694 0.030742
## Iteration: 68 bestvalit: 0.003491 bestmemit: -0.080694 0.030742
## Iteration: 69 bestvalit: 0.003491 bestmemit: -0.080694 0.030742
## Iteration: 70 bestvalit: 0.000383 bestmemit: -0.017119 0.030742
## Iteration: 71 bestvalit: 0.000383 bestmemit: -0.017119 0.030742
## Iteration: 72 bestvalit: 0.000383 bestmemit: -0.017119 0.030742
## Iteration: 73 bestvalit: 0.000383 bestmemit: -0.017119 0.030742
## Iteration: 74 bestvalit: 0.000383 bestmemit: -0.017119 0.030742
## Iteration: 75 bestvalit: 0.000383 bestmemit: -0.017119 0.030742
## Iteration: 76 bestvalit: 0.000383 bestmemit: -0.017119 0.030742
## Iteration: 77 bestvalit: 0.000383 bestmemit: -0.017119 0.030742
## Iteration: 78 bestvalit: 0.000383 bestmemit: -0.017119 0.030742
## Iteration: 79 bestvalit: 0.000383 bestmemit: -0.017119 0.030742
## Iteration: 80 bestvalit: 0.000383 bestmemit: -0.017119 0.030742
## Iteration: 81 bestvalit: 0.000383 bestmemit: -0.017119 0.030742
## Iteration: 82 bestvalit: 0.000383 bestmemit: -0.017119 0.030742
## Iteration: 83 bestvalit: 0.000383 bestmemit: -0.017119 0.030742
## Iteration: 84 bestvalit: 0.000383 bestmemit: -0.017119 0.030742
## Iteration: 85 bestvalit: 0.000383 bestmemit: -0.017119 0.030742
## Iteration: 86 bestvalit: 0.000383 bestmemit: -0.017119 0.030742
## Iteration: 87 bestvalit: 0.000383 bestmemit: -0.017119 0.030742
## Iteration: 88 bestvalit: 0.000383 bestmemit: -0.017119 0.030742
## Iteration: 89 bestvalit: 0.000383 bestmemit: -0.017119 0.030742
## Iteration: 90 bestvalit: 0.000383 bestmemit: -0.017119 0.030742
## Iteration: 91 bestvalit: 0.000383 bestmemit: -0.017119 0.030742
## Iteration: 92 bestvalit: 0.000383 bestmemit: -0.017119 0.030742
## Iteration: 93 bestvalit: 0.000383 bestmemit: -0.017119 0.030742
## Iteration: 94 bestvalit: 0.000383 bestmemit: -0.017119 0.030742
## Iteration: 95 bestvalit: 0.000383 bestmemit: -0.017119 0.030742
## Iteration: 96 bestvalit: 0.000211 bestmemit: -0.017119 -0.015998
## Iteration: 97 bestvalit: 0.000211 bestmemit: -0.017119 -0.015998
## Iteration: 98 bestvalit: 0.000211 bestmemit: -0.017119 -0.015998
## Iteration: 99 bestvalit: 0.000211 bestmemit: -0.017119 -0.015998
## Iteration: 100 bestvalit: 0.000211 bestmemit: -0.017119 -0.015998
Fig 7. Optimización DE Griewank (2D)
## Primer óptimo encontrado en la iteración: 99
## Coordenadas (x, y): -4.475499 4.437552
## Valor Griewank: 1.553212
## Iteration: 1 bestvalit: 8.689304 bestmemit: 155.065358 -2.967279 -85.894189
## Iteration: 2 bestvalit: 2.232990 bestmemit: 11.923856 -66.961109 -40.066941
## Iteration: 3 bestvalit: 1.586562 bestmemit: -5.126980 -24.728727 -44.546763
## Iteration: 4 bestvalit: 1.586562 bestmemit: -5.126980 -24.728727 -44.546763
## Iteration: 5 bestvalit: 1.586562 bestmemit: -5.126980 -24.728727 -44.546763
## Iteration: 6 bestvalit: 1.586562 bestmemit: -5.126980 -24.728727 -44.546763
## Iteration: 7 bestvalit: 1.473801 bestmemit: 47.817596 11.643302 20.779680
## Iteration: 8 bestvalit: 1.060696 bestmemit: -25.350653 11.643302 -26.235332
## Iteration: 9 bestvalit: 1.060696 bestmemit: -25.350653 11.643302 -26.235332
## Iteration: 10 bestvalit: 0.947173 bestmemit: -31.195186 8.427949 -34.133964
## Iteration: 11 bestvalit: 0.947173 bestmemit: -31.195186 8.427949 -34.133964
## Iteration: 12 bestvalit: 0.713554 bestmemit: -16.205390 -7.507784 6.655311
## Iteration: 13 bestvalit: 0.298729 bestmemit: -9.278781 21.850400 -0.855794
## Iteration: 14 bestvalit: 0.298729 bestmemit: -9.278781 21.850400 -0.855794
## Iteration: 15 bestvalit: 0.298729 bestmemit: -9.278781 21.850400 -0.855794
## Iteration: 16 bestvalit: 0.298729 bestmemit: -9.278781 21.850400 -0.855794
## Iteration: 17 bestvalit: 0.210544 bestmemit: 3.304248 21.656363 0.100311
## Iteration: 18 bestvalit: 0.210544 bestmemit: 3.304248 21.656363 0.100311
## Iteration: 19 bestvalit: 0.210544 bestmemit: 3.304248 21.656363 0.100311
## Iteration: 20 bestvalit: 0.210544 bestmemit: 3.304248 21.656363 0.100311
## Iteration: 21 bestvalit: 0.210544 bestmemit: 3.304248 21.656363 0.100311
## Iteration: 22 bestvalit: 0.210544 bestmemit: 3.304248 21.656363 0.100311
## Iteration: 23 bestvalit: 0.178214 bestmemit: -3.606848 4.175933 0.577544
## Iteration: 24 bestvalit: 0.178214 bestmemit: -3.606848 4.175933 0.577544
## Iteration: 25 bestvalit: 0.178214 bestmemit: -3.606848 4.175933 0.577544
## Iteration: 26 bestvalit: 0.178214 bestmemit: -3.606848 4.175933 0.577544
## Iteration: 27 bestvalit: 0.134456 bestmemit: 12.911073 8.782467 -0.278942
## Iteration: 28 bestvalit: 0.100616 bestmemit: 6.189443 -17.596960 0.100311
## Iteration: 29 bestvalit: 0.100616 bestmemit: 6.189443 -17.596960 0.100311
## Iteration: 30 bestvalit: 0.100616 bestmemit: 6.189443 -17.596960 0.100311
## Iteration: 31 bestvalit: 0.100616 bestmemit: 6.189443 -17.596960 0.100311
## Iteration: 32 bestvalit: 0.100616 bestmemit: 6.189443 -17.596960 0.100311
## Iteration: 33 bestvalit: 0.100616 bestmemit: 6.189443 -17.596960 0.100311
## Iteration: 34 bestvalit: 0.100616 bestmemit: 6.189443 -17.596960 0.100311
## Iteration: 35 bestvalit: 0.100616 bestmemit: 6.189443 -17.596960 0.100311
## Iteration: 36 bestvalit: 0.100616 bestmemit: 6.189443 -17.596960 0.100311
## Iteration: 37 bestvalit: 0.080758 bestmemit: 12.445690 8.782467 -0.278942
## Iteration: 38 bestvalit: 0.080758 bestmemit: 12.445690 8.782467 -0.278942
## Iteration: 39 bestvalit: 0.080758 bestmemit: 12.445690 8.782467 -0.278942
## Iteration: 40 bestvalit: 0.050599 bestmemit: -3.227521 -8.932620 5.118431
## Iteration: 41 bestvalit: 0.050599 bestmemit: -3.227521 -8.932620 5.118431
## Iteration: 42 bestvalit: 0.050599 bestmemit: -3.227521 -8.932620 5.118431
## Iteration: 43 bestvalit: 0.050599 bestmemit: -3.227521 -8.932620 5.118431
## Iteration: 44 bestvalit: 0.050599 bestmemit: -3.227521 -8.932620 5.118431
## Iteration: 45 bestvalit: 0.050599 bestmemit: -3.227521 -8.932620 5.118431
## Iteration: 46 bestvalit: 0.050599 bestmemit: -3.227521 -8.932620 5.118431
## Iteration: 47 bestvalit: 0.039137 bestmemit: 6.170619 -4.647519 -5.459460
## Iteration: 48 bestvalit: 0.039137 bestmemit: 6.170619 -4.647519 -5.459460
## Iteration: 49 bestvalit: 0.039137 bestmemit: 6.170619 -4.647519 -5.459460
## Iteration: 50 bestvalit: 0.039137 bestmemit: 6.170619 -4.647519 -5.459460
## Iteration: 51 bestvalit: 0.039137 bestmemit: 6.170619 -4.647519 -5.459460
## Iteration: 52 bestvalit: 0.039137 bestmemit: 6.170619 -4.647519 -5.459460
## Iteration: 53 bestvalit: 0.039137 bestmemit: 6.170619 -4.647519 -5.459460
## Iteration: 54 bestvalit: 0.039137 bestmemit: 6.170619 -4.647519 -5.459460
## Iteration: 55 bestvalit: 0.039137 bestmemit: 6.170619 -4.647519 -5.459460
## Iteration: 56 bestvalit: 0.039137 bestmemit: 6.170619 -4.647519 -5.459460
## Iteration: 57 bestvalit: 0.039137 bestmemit: 6.170619 -4.647519 -5.459460
## Iteration: 58 bestvalit: 0.039137 bestmemit: 6.170619 -4.647519 -5.459460
## Iteration: 59 bestvalit: 0.039137 bestmemit: 6.170619 -4.647519 -5.459460
## Iteration: 60 bestvalit: 0.039137 bestmemit: 6.170619 -4.647519 -5.459460
## Iteration: 61 bestvalit: 0.039137 bestmemit: 6.170619 -4.647519 -5.459460
## Iteration: 62 bestvalit: 0.039137 bestmemit: 6.170619 -4.647519 -5.459460
## Iteration: 63 bestvalit: 0.039137 bestmemit: 6.170619 -4.647519 -5.459460
## Iteration: 64 bestvalit: 0.039137 bestmemit: 6.170619 -4.647519 -5.459460
## Iteration: 65 bestvalit: 0.039137 bestmemit: 6.170619 -4.647519 -5.459460
## Iteration: 66 bestvalit: 0.039137 bestmemit: 6.170619 -4.647519 -5.459460
## Iteration: 67 bestvalit: 0.039137 bestmemit: 6.170619 -4.647519 -5.459460
## Iteration: 68 bestvalit: 0.039137 bestmemit: 6.170619 -4.647519 -5.459460
## Iteration: 69 bestvalit: 0.039137 bestmemit: 6.170619 -4.647519 -5.459460
## Iteration: 70 bestvalit: 0.039137 bestmemit: 6.170619 -4.647519 -5.459460
## Iteration: 71 bestvalit: 0.039137 bestmemit: 6.170619 -4.647519 -5.459460
## Iteration: 72 bestvalit: 0.039137 bestmemit: 6.170619 -4.647519 -5.459460
## Iteration: 73 bestvalit: 0.039137 bestmemit: 6.170619 -4.647519 -5.459460
## Iteration: 74 bestvalit: 0.039137 bestmemit: 6.170619 -4.647519 -5.459460
## Iteration: 75 bestvalit: 0.039137 bestmemit: 6.170619 -4.647519 -5.459460
## Iteration: 76 bestvalit: 0.039137 bestmemit: 6.170619 -4.647519 -5.459460
## Iteration: 77 bestvalit: 0.039137 bestmemit: 6.170619 -4.647519 -5.459460
## Iteration: 78 bestvalit: 0.039137 bestmemit: 6.170619 -4.647519 -5.459460
## Iteration: 79 bestvalit: 0.039137 bestmemit: 6.170619 -4.647519 -5.459460
## Iteration: 80 bestvalit: 0.039137 bestmemit: 6.170619 -4.647519 -5.459460
## Iteration: 81 bestvalit: 0.039137 bestmemit: 6.170619 -4.647519 -5.459460
## Iteration: 82 bestvalit: 0.032112 bestmemit: 0.101452 -4.320949 5.693730
## Iteration: 83 bestvalit: 0.029383 bestmemit: -6.169287 4.458273 5.356707
## Iteration: 84 bestvalit: 0.029383 bestmemit: -6.169287 4.458273 5.356707
## Iteration: 85 bestvalit: 0.029383 bestmemit: -6.169287 4.458273 5.356707
## Iteration: 86 bestvalit: 0.029383 bestmemit: -6.169287 4.458273 5.356707
## Iteration: 87 bestvalit: 0.015271 bestmemit: -3.202881 4.287618 -0.036768
## Iteration: 88 bestvalit: 0.015271 bestmemit: -3.202881 4.287618 -0.036768
## Iteration: 89 bestvalit: 0.015271 bestmemit: -3.202881 4.287618 -0.036768
## Iteration: 90 bestvalit: 0.015271 bestmemit: -3.202881 4.287618 -0.036768
## Iteration: 91 bestvalit: 0.015271 bestmemit: -3.202881 4.287618 -0.036768
## Iteration: 92 bestvalit: 0.015271 bestmemit: -3.202881 4.287618 -0.036768
## Iteration: 93 bestvalit: 0.015271 bestmemit: -3.202881 4.287618 -0.036768
## Iteration: 94 bestvalit: 0.015271 bestmemit: -3.202881 4.287618 -0.036768
## Iteration: 95 bestvalit: 0.015271 bestmemit: -3.202881 4.287618 -0.036768
## Iteration: 96 bestvalit: 0.015271 bestmemit: -3.202881 4.287618 -0.036768
## Iteration: 97 bestvalit: 0.015271 bestmemit: -3.202881 4.287618 -0.036768
## Iteration: 98 bestvalit: 0.015271 bestmemit: -3.202881 4.287618 -0.036768
## Iteration: 99 bestvalit: 0.015271 bestmemit: -3.202881 4.287618 -0.036768
## Iteration: 100 bestvalit: 0.015271 bestmemit: -3.202881 4.287618 -0.036768
Fig 8. Optimización DE Griewank (3D)
## Primer óptimo encontrado en la iteración: 98
## Coordenadas (x, y): -5.469686 -5.335941
## Valor Griewank: 2.057722
El descenso por gradiente mostró una gran eficiencia en términos de número de evaluaciones de la función objetivo: con apenas unas pocas miles de llamadas (alrededor de 800 en 2D y 6 000 en 3D, considerando la estimación de evaluaciones necesarias para aproximar numéricamente cada componente del gradiente), alcanzó su criterio de parada. Sin embargo, al aplicarse sobre la superficie altamente multimodal de la función de Griewank, quedó “atrapado” en mínimos locales lejanos al óptimo global, deteniéndose en valores cercanos a 45–48 en lugar de 0. Este comportamiento refleja que el descenso por gradiente explota eficazmente la información local y converge rápidamente cuando la función es suave o casi convexa, pero carece de un mecanismo intrínseco para explorar regiones lejanas en busca del mínimo global a menos que se complemente con reinicios o estrategias de exploración adicionales.
Los métodos heurísticos sacrificaron parte de la eficiencia local para ganar capacidad exploratoria global. El Algoritmo Genético (GA), con poblaciones de 100 individuos durante 200 generaciones en 2D (≈20 000 evaluaciones) y de 150 durante 300 en 3D (≈45 000 evaluaciones), logró los valores finales más cercanos a cero (f≈1.1×10⁻⁴ en 2D y f≈0.028 en 3D). El PSO, con entre 7 000 y 8 000 evaluaciones, alcanzó también soluciones de alta calidad (f≈0.005 en 2D y f≈0.012 en 3D). La Evolución Diferencial (DE), con un coste moderado de unas 8 000 evaluaciones, obtuvo mejoras sobre el gradiente (f≈1.55 en 2D, f≈2.06 en 3D) pero no tan fino como GA o PSO. En conjunto, estos heurísticos demostraron que su exploración poblacional puede escapar de los pozos locales de Griewank y acercarse al mínimo global, a costa de un mayor presupuesto computacional.
La función de las seis jorobas de camello (Six-Hump Camel) es una función frecuentemente utilizada para evaluar el desempeño de algoritmos de optimización en espacios de búsqueda no triviales. es una función no convexa, multimodal y polinómica de grado cuatro.
Se define como:
\[ f(\mathbf{x}) = \left( 4 - 2.1x_1^2 + \frac{x_1^4}{3} \right)x_1^2 + x_1x_2 + \left( -4 + 4x_2^2 \right)x_2^2 \]
La función presenta seis regiones prominentes (jorobas) en su superficie, siendo esta una función no convexa, dando lugar a múltiples mínimos locales y dos mínimos globales bien definidos. Simon Fraser University. (s.f.).
Para esta definición:
-La primera parte de la función, depende de x1 y genera curvaturas multiples.
-La segunda parte de la función x1 y x2 es un acoplamiento lineal
-La tercera parte de la función x2 agrega simetría
-Sus dos mínimos globales son (x1,x2)=(0.0898, -0.7126) y (x1,x2)=(-0.0898, 0.7126) con valor aproximado: \[f(x_1, x_2) \approx -1.0316\]
Fig 9. Función Six hump camel (2D)
Para gráficar y un entendimiento más fácil x1 = x y x2 = y
Así:
\[ f(x, y) = \left(4 - 2.1\, x^2 + \frac{x^4}{3}\right)x^2 + x\,y + \left(-4 + 4\, y^2\right)y^2 \]
El gradiente es el vector de derivadas parciales: \[ \nabla (x, y) = \left( \frac{\partial f}{\partial x}, \frac{\partial f}{\partial y} \right) \] - La derivada con respecto a x es: \[ \frac{\partial f}{\partial x} = 8x - 8.4x^3 + 2x^5 + y \] - La derivada con respecto a y es: \[ \frac{\partial f}{\partial y} = x + 16y^3 - 8y \]
Fig 10. Descenso por gradiente Six hump camel (2D)
## iter x y f
## 240 239 -0.08709228 0.7123408 -1.031599
## 241 240 -0.08715570 0.7123481 -1.031600
## 242 241 -0.08721767 0.7123552 -1.031602
En la figura podemos observar el método de descenso por gradiente, un algoritmo de optimización iterativo que busca encontrar el mínimo de una función diferenciable. Consiste en calcular el gradiente, que indica la dirección de mayor incremento, y actualizar los parámetros en sentido opuesto, es decir, moviéndose hacia la dirección de mayor descenso—mediante una tasa de aprendizaje que regula el tamaño de cada paso. Este proceso se repite hasta que las actualizaciones son mínimas.(IBM, s.f.)
- En esta representación gráfica podemos observar que partiendo desde un punto aleatorio del plano, el descenso por gradiente generalmente busca el minimo local más cercano, en este caso encontró uno de los dos minimos globales que tiene esta función ubicado en (x,y)=(-0.0898, 0.7126)
- El descenso por gradiente puede o no encontrar el valor óptimo global de la función de las seis jorobas de camello, ya que este se “guiará” por el minimo local más cercano. Así que depende mucho de su condición inicial, en este caso, aleatoria.
Fig 11. Descenso por gradiente Six hump camel (3D)
- En tres dimensiones podemos ver una condición inicial diferente a la del gráfico en dos dimensiones. Esta condición inicial aleatoria se generó más cerca del minimo local (x,y)=(−0.08984, 0.71266) por lo tanto, el descenso por gradiente va a este punto mínimo local y no a uno de los minimos globales.
“La función Six Hump Camel posee seis mínimos locales, de los cuales dos son mínimos globales. Este comportamiento multimodal la hace especialmente útil como caso de prueba en estudios y algoritmos de optimización, ya que permite evaluar la capacidad de estos para evitar converger únicamente en mínimos locales no globales.” (Simon Fraser University, s.f.).
- La línea azul ilustra el recorrido desde el punto de partida en el plano xyz hasta el mínimo local obtenido por el descenso por gradiente. Aunque es un mínimo, no es el global, lo que significa que existen otros puntos donde la función toma un valor inferior que sí son totalmente óptimos
Fig 12. Método de enjambre de particulas (PSO) (2D)
En la figura se puede observar el proceso de optimización por enjambre de particulas en dos dimensiones en el cual en este caso se generaron 50 particulas en posiciones aleatorias dentro del dominio y cada particula con una velocidad inicial aleatoria
El algoritmo PSO guía mediante un equilibrio entre exploración y explotación. Es decir, cada partícula se mueve en el espacio de búsqueda basándose en tres componentes:
-Inercia: Conserva una parte de su velocidad actual.
-Atracción personal (pbest): Se dirige hacia la mejor posición que ha encontrado.
-Atracción social (gbest): Se mueve hacia la mejor posición encontrada por todo el enjambre.
En el proceso, cuando alguna partícula descubre una buena solución (un valor bajo de la función en nuestro problema de minimización), esa posición se convierte en el “global best”. Una vez que se determina un gbest, las demás partículas se ven atraídas hacia esa región, lo que provoca que eventualmente converjan entorno a esa solución. Huang, H., Qiu, J., & Riedl, K. (2023).
En este caso el gbest (global best) ubicado en (x,y)=(-0.0898, 0.7126) quien es el que se identifica como el primer óptimo de la función en esta condición aleatoria en especifico.
Fig 13. Método de enjambre de particulas (PSO) (3D)
En esta representación en tres dimensiones con una condición inicial aleatoria diferente a la de dos dimensiones, las particulas convergen en el segundo minimo global que posee la función de las seis jorobas de camello, exactamente en (x,y,z)=(0.0898, -0.7126, 0) en este caso, el minimo global óptimo. El cambio a tres dimensiones no supuso una diferencia mayor a su comportamiento comparado al de dos dimensiones.
Fig 14. Método de evolución diferencial (DE) (2D)
En la figura se usa como método de optimización el algoritmo de evolución diferencial DE el cual se caracteriza por utilizar una población de soluciones candidatas que evolucionan mediante operadores de mutación, cruce (recombinación) y selección. A diferencia de otros algoritmos evolutivos, DE genera nuevas soluciones perturbando vectores existentes mediante diferencias escaladas entre otros miembros de la población. Storn, R., & Price, K. (1997).
Esto quiere decir que el algoritmo de evolución diferencial sirve para encontrar los mejores valores posibles de la función, en este caso sus dos minimos globales que posee.
Para entender la figura y el algoritmo se tiene que: - Primero, se asigna aleatoriamente una población o candidatos dentro del dominio de la función.
- Luego, en cada iteración del algoritmo DE cada agente crea una versión modificada del mismo, que se mezcla con otros tres agentes/miembros de la población al azar en cualquier parte del plano.
- Este agente mutado se mezcla con el agente original, mezclando su información. Si esta información se define como un punto más bajo en el plano, este lo reemplaza, si no, el antiguo se queda.
- El proceso se repite hasta que a través de cada iteración (generaciones) el grupo se va acercando cada vez al punto más bajo, en este caso el minimo global. Storn, R., & Price, K. (1997).
En la figura se puede percibir que en menos de 50 iteraciones se llegó a los dos minimos globales, además de como cada punto rojo (población) se cruzaba y mutaba para encontrar estos mínimos.
De los anteriores algoritmos de optimización DE es el único quien logró encontrar los dos mínimos globales de la función de las seis jorobas de camello.
Fig 15. Método de evolución diferencial (DE) (3D)
En tres dimensiones se amplía la búsqueda y adaptación de la Evolución Diferencial a un espacio de mayor dimensión, introduce operaciones vectoriales en tres componentes Cada candidato es ahora un vector (x,y,z) y proporciona una visualización que proyecta información de la tercera dimensión a través del color. Los pasos fundamentales (mutación, cruce y selección) se mantienen, pero se ejecutan en un espacio más complejo. También se nota a medida de cada iteración como cambia el color en los agentes y descienden a los dos minimos globales hasta llegar al 0 en z.
Fig 16. Método de algoritmos geneticos (GA) (2D)
Los Algoritmos Genéticos (Genetic Algorithms) son técnicas de optimización inspiradas en el proceso de evolución natural. Al igual que la selección natural en la biología, simulan cómo evolucionan las soluciones “mejores” con el tiempo. Holland, J. H. (1975).
En este caso, el algoritmo se prueba con 50 individuos dentro de la población los cuales son representados por cada punto generado en la figura de manera aleatoria. A cada punto se le asigna un “valor” evaluando su función de aptitud o “fitness” (en esta situación se usa la función negativa porque se quiere encontrar es el minimo)
- Los “puntos” escogidos son aquellos con menor valor(según esta situación ya que se busca encontrar el minimo)
- Estos “puntos” o individuos dentro de la población que ya fueron elegidos, se cruzan y dan lugar a hijos con mejores caracteristicas, esto, sucediendo de generación en generación mejorando con cada iteración.
Esto da lugar a que el algoritmo encuentre el minimo global optimo según las generaciones.
Fig 17. Método de algoritmos geneticos (GA) (3D)
En la figura 10 donde se hace el recorrido del método de descenso por gradiente con condición inicial aleatoria en dos dimensiones, se aprecia que para alcanzar el valor objetivo f(x,y)≈−1.0316 tomó 241 iteraciones exactamente, Esto, solo en el caso de esta seed ya que en el caso de recorrido del algoritmo en tres dimensiones (figura 11) el método de descenso por gradiente se atascó en uno de los mínimos locales que posee la función de las seis jorobas de camello. Por lo tanto este método requiere condiciones especiales para que encuentre el valor objetivo óptimo porque depende de que tan cerca la condición aleatoria esté a uno de los dos minimos globales o minimos locales de la función para que descienda a estos.
Usando el método de algoritmos evolutivos (GA) para una población de 50 individuos, en dos dimensiones y tres dimensiones se llegó a la conclusión que en la generación numero 17 el algoritmo pudo alcanzar el valor objetivo de la función sin atascarse en mínimos locales. Se tiene en cuenta también que no converje al mismo tiempo en los dos minimos globales que tiene la función si no al primero que encuentra.
Por optimización mediante PSO se alcanzó el valor objetivo por primera vez a partir de la iteración 18 (con una población de 50 y una inercia de 0.5) la cual a partir de esta iteración se presenta un mejor fitness igual a −1.0316. En todos los casos de condición aleatoria el enjambre de particulas llegó a uno de los dos minimos globales.Por lo tanto, se concluye a partir de esto que:
- En dos y tres dimensiones el algoritmo PSO siempre encontró el valor objetivo, pero no los dos mínimos globales al mismo tiempo que presenta la función de las seis jorobas de camello.
- Con un ajuste de la inercia en el algoritmo a 0.5 se logró que todas las particulas converjan al primer minimo global encontrado por una de ellas.
- A comparación del algoritmo de descenso por gradiente, la optimización por PSO si va exactamente a el valor óptimo de la función sin tener en cuenta una condición inicial aleatoria que lo beneficie.
Por optimización mediante DE se logró el valor objetivo en alrededor de 43 iteraciones con una población de 50 individuos. Tanto como en dos dimensiones y tres dimensiones el algoritmo encontró los dos mínimos globales de la función de una forma eficiente, dejando pasar mínimos locales y encontrando el valor óptimo de la función. A diferencia de los otros métodos heuristicos y metodo por descenso del gradiente presentados en este trabajo, el algoritmo de evolución diferencial fue el único en encontrar los dos mínimos globales de la función de las seis jorobas de camello
Un vendedor debe hacer un recorrido por todas y cada de las 13 ciudades principales de Colombia.
Utilice colonias de hormigas y algoritmos genéticos para encontrar el orden óptimo. El costo de desplazamiento entre ciudades es la suma del valor de la hora del vendedor (es un parámetro que debe estudiarse), el costo de los peajes y el costo del combustible. Cada equipo debe definir en qué carro hace el recorrido el vendedor y de allí extraer el costo del combustible.
Adicionalmente represente con un gif animado o un video cómo se comporta la mejor solución usando un gráfico del recorrido en el mapa de Colombia.
En primer lugar el análisis de la ruta más óptima para este problema se hará con las siguientes 13 ciudades (DANE, 2020):
La ubicación de cada una de estas ciudades se muestra a continuación:
## numeric(0)
Teniendo en cuenta que el costo del desplazamiento entre ciudades es la suma del valor de la hora del vendedor, el costo de los peajes y el costo del combustible, se calculó el tiempo entre cada trayecto de acuerdo a datos de Google Maps, el costo de los peajes de acuerdo con ___, y el costo del combustible teniendo en cuenta el vehículo selesccionado para hacer el recorrido.
Para el cálculo del salario del vendedor se creó una matriz con los tiempos de viaje en cada trayecto usando una API de Google Maps, como se muestra a continuación:
## Bogotá Medellín Cali Barranquilla Bucaramanga Manizales
## Bogotá 0.000000 8.577500 9.209167 18.046111 8.977222 7.231389
## Medellín 8.586389 0.000000 7.096389 13.138333 6.698611 3.833056
## Cali 8.832500 7.044167 0.000000 19.933889 13.198333 4.461389
## Barranquilla 19.952778 13.209722 20.148611 0.000000 12.478333 16.885556
## Bucaramanga 8.699444 6.720278 13.659444 12.593889 0.000000 10.396111
## Manizales 7.240000 3.818611 4.466389 16.708333 9.545833 0.000000
## Pereira 6.576111 4.130000 3.477778 17.019722 10.553333 1.204167
## Cúcuta 11.370278 11.300278 18.239167 15.609722 4.702500 14.975833
## Pasto 16.361111 14.572778 8.262222 27.462500 20.726944 11.990000
## Ibagué 4.227778 7.258889 5.499722 17.376389 8.580000 4.333056
## Montería 14.388889 7.683611 14.622778 6.358611 10.275000 11.359444
## Cartagena 18.485278 11.780278 19.018611 2.298333 11.480000 15.755278
## Villavicencio 3.173611 11.503056 11.337222 20.971389 12.076389 10.077222
## Pereira Cúcuta Pasto Ibagué Montería Cartagena
## Bogotá 6.869167 11.558611 16.792778 4.008611 12.503889 16.653611
## Medellín 4.148889 11.557500 14.957778 6.720000 7.596111 11.745556
## Cali 3.403889 18.057500 8.643889 4.945278 14.391667 18.541389
## Barranquilla 17.201389 15.216111 28.010000 18.316667 6.309167 2.563889
## Bucaramanga 10.711944 4.953889 21.520833 10.238056 10.200278 11.596389
## Manizales 1.206944 14.404722 12.327778 3.778056 11.166111 15.315833
## Pereira 0.000000 15.412222 11.339167 2.688889 11.477778 15.627222
## Cúcuta 15.291944 0.000000 26.100556 14.818056 14.325556 14.612222
## Pasto 10.932500 25.586111 0.000000 12.473889 21.920278 26.070000
## Ibagué 3.159722 13.438889 13.360833 0.000000 11.834167 15.983889
## Montería 11.675278 13.914444 22.484167 12.790556 0.000000 4.508611
## Cartagena 16.071111 14.217778 26.880000 16.887222 4.449444 0.000000
## Villavicencio 8.997222 14.657778 18.921111 6.136667 15.429444 19.578889
## Villavicencio
## Bogotá 2.996111
## Medellín 11.284722
## Cali 10.758056
## Barranquilla 21.958056
## Bucaramanga 11.691944
## Manizales 9.590833
## Pereira 8.501667
## Cúcuta 14.362778
## Pasto 18.286667
## Ibagué 6.153333
## Montería 16.431944
## Cartagena 20.528333
## Villavicencio 0.000000
Luego se multiplicó cada valor de esta matriz por el salario por hora del vendedor, que de acuerdo con (Salario Para Transporte De Carga En Colombia - Salario Medio, n.d.) es de 1’700.000 COP por mes, por lo que la hora sería a aproximadamente 9.700 COP, quedando de la siguiente forma:
\[ Costo_{vendedor} = tiempos \times 9700 \]
Siguiendo lo anterior la matríz de salarios del vendedor en pesos colombianos es la siguiente:
## Bogotá Medellín Cali Barranquilla Bucaramanga Manizales
## Bogotá 0.00 83201.75 89328.92 175047.28 87079.06 70144.47
## Medellín 83287.97 0.00 68834.97 127441.83 64976.53 37180.64
## Cali 85675.25 68328.42 0.00 193358.72 128023.83 43275.47
## Barranquilla 193541.94 128134.31 195441.53 0.00 121039.83 163789.89
## Bucaramanga 84384.61 65186.69 132496.61 122160.72 0.00 100842.28
## Manizales 70228.00 37040.53 43323.97 162070.83 92594.58 0.00
## Pereira 63788.28 40061.00 33734.44 165091.31 102367.33 11680.42
## Cúcuta 110291.69 109612.69 176919.92 151414.31 45614.25 145265.58
## Pasto 158702.78 141355.94 80143.56 266386.25 201051.36 116303.00
## Ibagué 41009.44 70411.22 53347.31 168550.97 83226.00 42030.64
## Montería 139572.22 74531.03 141840.94 61678.53 99667.50 110186.61
## Cartagena 179307.19 114268.69 184480.53 22293.83 111356.00 152826.19
## Villavicencio 30784.03 111579.64 109971.06 203422.47 117140.97 97749.06
## Pereira Cúcuta Pasto Ibagué Montería Cartagena
## Bogotá 66630.92 112118.53 162889.94 38883.53 121287.72 161540.03
## Medellín 40244.22 112107.75 145090.44 65184.00 73682.28 113931.89
## Cali 33017.72 175157.75 83845.72 47969.19 139599.17 179851.47
## Barranquilla 166853.47 147596.28 271697.00 177671.67 61198.92 24869.72
## Bucaramanga 103905.86 48052.72 208752.08 99309.14 98942.69 112484.97
## Manizales 11707.36 139725.81 119579.44 36647.14 108311.28 148563.58
## Pereira 0.00 149498.56 109989.92 26082.22 111334.44 151584.06
## Cúcuta 148331.86 0.00 253175.39 143735.14 138957.89 141738.56
## Pasto 106045.25 248185.28 0.00 120996.72 212626.69 252879.00
## Ibagué 30649.31 130357.22 129600.08 0.00 114791.42 155043.72
## Montería 113250.19 134970.11 218096.42 124068.39 0.00 43733.53
## Cartagena 155889.78 137912.44 260736.00 163806.06 43159.61 0.00
## Villavicencio 87273.06 142180.44 183534.78 59525.67 149665.61 189915.22
## Villavicencio
## Bogotá 29062.28
## Medellín 109461.81
## Cali 104353.14
## Barranquilla 212993.14
## Bucaramanga 113411.86
## Manizales 93031.08
## Pereira 82466.17
## Cúcuta 139318.94
## Pasto 177380.67
## Ibagué 59687.33
## Montería 159389.86
## Cartagena 199124.83
## Villavicencio 0.00
Para calcular el costo del combustible, primero se creó la matriz de distancias en kilómetros usando una API de Google Maps, como se muestra a continuación:
## Bogotá Medellín Cali Barranquilla Bucaramanga Manizales
## Bogotá 0.000 417.481 458.065 1031.865 397.691 292.735
## Medellín 417.643 0.000 435.431 757.549 382.925 222.528
## Cali 447.213 436.690 0.000 1190.940 761.751 260.576
## Barranquilla 1084.736 775.897 1209.163 0.000 696.208 996.260
## Bucaramanga 397.323 382.414 815.680 678.754 0.000 602.777
## Manizales 292.816 223.365 258.579 977.615 507.782 0.000
## Pereira 306.893 240.304 209.055 994.553 557.359 53.340
## Cúcuta 567.848 579.058 1012.324 768.323 197.783 799.421
## Pasto 823.277 812.754 385.581 1567.004 1137.814 636.640
## Ibagué 201.412 359.844 261.148 1032.582 509.888 172.881
## Montería 749.832 456.592 889.858 355.453 606.446 676.954
## Cartagena 998.540 705.300 1136.174 128.704 622.505 923.270
## Villavicencio 120.953 532.176 546.401 1146.559 517.879 409.555
## Pereira Cúcuta Pasto Ibagué Montería Cartagena
## Bogotá 316.705 568.423 779.875 201.485 731.138 980.257
## Medellín 239.279 580.658 808.736 349.545 456.822 705.941
## Cali 208.947 959.483 381.282 252.616 890.213 1139.332
## Barranquilla 1013.011 786.102 1582.468 1028.506 372.461 141.135
## Bucaramanga 619.528 198.492 1188.985 540.293 605.889 623.087
## Manizales 53.264 705.515 631.884 163.530 676.888 926.007
## Pereira 0.000 755.092 582.360 112.296 693.826 942.945
## Cúcuta 816.172 0.000 1385.629 736.937 703.956 712.656
## Pasto 585.011 1335.547 0.000 628.680 1266.277 1515.395
## Ibagué 119.788 707.620 634.453 0.000 731.856 980.974
## Montería 693.706 706.422 1263.163 709.201 0.000 252.270
## Cartagena 940.022 712.400 1509.479 957.909 248.372 0.000
## Villavicencio 405.041 688.611 868.211 289.820 845.833 1094.951
## Villavicencio
## Bogotá 122.056
## Medellín 532.086
## Cali 535.507
## Barranquilla 1142.977
## Bucaramanga 519.321
## Manizales 446.422
## Pereira 395.188
## Cúcuta 689.846
## Pasto 911.571
## Ibagué 289.706
## Montería 823.672
## Cartagena 1072.379
## Villavicencio 0.000
Luego, se seleccionó el modelo de vehículo que conducirá el vendedor, en este caso será una Renault Kangoo 1.5 que tiene un consumo de combustible de 4,5 litros cada 100 km de acuerdo con la empresa Renault. Adicionalmente, teniendo en cuenta que en Colombia el precio de la gasolina es de en promedio 15.827 COP el galón (Creg, 2025), y un galón tiene 3,78 litros, entonces, el precio de la gasolina por litro es de 4.187 COP. Por lo anterior, la ecuación para calcular el costo del combustible en cada ruta es:
\[ Costo_{combustible} = distancia [km] \times \frac{4,5}{100} [l/km] \times 4187 [COP/l] \]
Por lo anterior, la matríz final de costos de combustible se presenta a continuación:
## Bogotá Medellín Cali Barranquilla Bucaramanga Manizales
## Bogotá 0.00 78659.68 86306.32 194418.84 74930.95 55155.67
## Medellín 78690.21 0.00 82041.73 142733.59 72148.81 41927.61
## Cali 84261.64 82278.95 0.00 224390.96 143525.31 49096.43
## Barranquilla 204380.53 146190.63 227824.45 0.00 131176.03 187710.33
## Bucaramanga 74861.61 72052.53 153686.35 127887.43 0.00 113572.23
## Manizales 55170.93 42085.32 48720.16 184197.33 95673.75 0.00
## Pereira 57823.24 45276.88 39389.10 187388.70 105014.80 10050.06
## Cúcuta 106991.08 109103.21 190737.03 144763.58 37265.28 150622.91
## Pasto 155117.74 153135.04 72649.24 295247.06 214381.22 119952.53
## Ibagué 37949.04 67800.01 49204.20 194553.94 96070.55 32573.37
## Montería 141279.60 86028.78 167662.60 66972.68 114263.52 127548.29
## Cartagena 188139.91 132889.10 214072.22 24249.76 117289.28 173957.92
## Villavicencio 22789.36 100269.94 102950.14 216028.91 97576.17 77166.31
## Pereira Cúcuta Pasto Ibagué Montería Cartagena
## Bogotá 59671.97 107099.42 146940.15 37962.80 137757.37 184695.12
## Medellín 45083.75 109404.68 152377.99 65859.52 86072.12 133009.87
## Cali 39368.75 180780.99 71839.25 47596.64 167729.48 214667.24
## Barranquilla 190866.47 148113.41 298160.71 193785.96 70177.24 26591.95
## Bucaramanga 116728.37 37398.87 224022.61 101799.31 114158.58 117398.94
## Manizales 10035.74 132929.61 119056.42 30811.50 127535.85 174473.61
## Pereira 0.00 142270.66 109725.36 21158.25 130727.23 177664.98
## Cúcuta 153779.05 0.00 261073.29 138849.98 132635.87 134275.08
## Pasto 110224.85 251637.09 0.00 118452.74 238585.58 285523.15
## Ibagué 22569.86 133326.22 119540.46 0.00 137892.65 184830.22
## Montería 130704.62 133100.50 237998.86 133624.11 0.00 47531.45
## Cartagena 177114.25 134226.85 284408.49 180484.42 46797.01 0.00
## Villavicencio 76315.80 129744.64 163583.98 54606.44 159367.62 206305.19
## Villavicencio
## Bogotá 22997.18
## Medellín 100252.98
## Cali 100897.55
## Barranquilla 215354.01
## Bucaramanga 97847.87
## Manizales 84112.60
## Pereira 74459.35
## Cúcuta 129977.33
## Pasto 171753.65
## Ibagué 54584.96
## Montería 155192.16
## Cartagena 202052.29
## Villavicencio 0.00
Teniendo en cuenta los datos suministrados por (Peajes, 2025) se creó la siguiente matriz con los costos de peaje en COP por cada ruta:
## Tiempo Bogotá Medellín Cali Barranquilla Bucaramanga Manizales
## 1 Bogotá 0 23800 21400 17900 16200 14400
## 2 Medellín 23800 0 20200 19200 18500 12600
## 3 Cali 21400 20200 0 10400 10900 10400
## 4 Barranquilla 17900 19200 10400 0 10900 10600
## 5 Bucaramanga 16200 18500 10900 10900 0 10800
## 6 Manizales 14400 12600 10400 10600 10800 0
## 7 Pereira 15200 14200 10500 10600 10800 10500
## 8 Cúcuta 11700 17000 10300 10600 10800 10500
## 9 Pasto 13300 19800 12700 12700 10800 10500
## 10 Ibagué 11700 15200 10400 10600 10800 10500
## 11 Montería 15900 20200 10500 10600 10800 10500
## 12 Cartagena 19400 21400 10400 10600 10800 10500
## 13 Villavicencio 13900 12600 10400 10600 10800 10500
## Pereira Cúcuta Pasto Ibagué Montería Cartagena Villavicencio
## 1 15200 11700 13300 11700 15900 19400 13900
## 2 14200 17000 19800 15200 20200 21400 12600
## 3 10500 10300 12700 10400 10500 10400 10400
## 4 10600 10600 12700 10600 10600 10600 10600
## 5 10800 10800 10800 10800 10800 10800 10800
## 6 10500 10500 10500 10500 10500 10500 10500
## 7 0 10300 10300 10300 10300 10300 10300
## 8 10300 0 10300 10300 10300 10300 10300
## 9 10300 10300 0 10300 10300 10300 10300
## 10 10300 10300 10300 0 10300 10300 10300
## 11 10300 10300 10300 10300 0 10300 10300
## 12 10300 10300 10300 10300 10300 0 10300
## 13 10300 10300 10300 10300 10300 10300 0
Finalmente, la matriz de costos final se calcula de la siguiente forma:
\[ Costo_{total} = Costo_{vendedor} + Costo_{combustible} + Costo_{peajes} \]
## Bogotá Medellín Cali Barranquilla Bucaramanga Manizales
## Bogotá 0.00 185661.43 197035.23 387366.1 178210.01 139700.14
## Medellín 185778.18 0.00 171076.70 289375.4 155625.34 91708.25
## Cali 191336.89 170807.36 0.00 428149.7 282449.15 102771.90
## Barranquilla 415822.48 293524.94 433665.97 0.0 263115.86 362100.22
## Bucaramanga 175446.22 155739.23 297082.96 260948.2 0.00 225214.51
## Manizales 139798.93 91725.84 102444.13 356868.2 199068.33 0.00
## Pereira 136811.52 99537.88 83623.54 363080.0 218182.13 32230.47
## Cúcuta 228982.78 235715.91 377956.94 306777.9 93679.53 306388.49
## Pasto 327120.51 314290.99 165492.80 574333.3 426232.59 246755.53
## Ibagué 90658.49 153411.23 112951.51 373704.9 190096.55 85104.01
## Montería 296751.82 180759.81 320003.54 139251.2 224731.02 248234.90
## Cartagena 386847.11 268557.79 408952.75 57143.6 239445.28 337284.11
## Villavicencio 67473.39 224449.58 223321.20 430051.4 225517.14 185415.36
## Pereira Cúcuta Pasto Ibagué Montería Cartagena
## Bogotá 141502.89 230917.95 323130.1 88546.32 274945.1 365635.15
## Medellín 99527.98 238512.43 317268.4 146243.52 179954.4 268341.76
## Cali 82886.47 366238.74 168385.0 105965.84 317828.6 404918.71
## Barranquilla 368319.94 306309.69 582557.7 382057.62 141976.2 62061.67
## Bucaramanga 231434.23 96251.59 443574.7 211908.44 223901.3 240683.91
## Manizales 32243.10 283155.41 249135.9 77958.64 246347.1 333537.19
## Pereira 0.00 302069.21 230015.3 57540.47 252361.7 339549.04
## Cúcuta 312410.91 0.00 524548.7 292885.12 281893.8 286313.64
## Pasto 226570.10 510122.37 0.0 249749.46 461512.3 548702.15
## Ibagué 63519.16 273983.44 259440.5 0.00 262984.1 350173.94
## Montería 254254.81 278370.61 466395.3 267992.50 0.0 101564.98
## Cartagena 343304.02 282439.29 555444.5 354590.48 100256.6 0.00
## Villavicencio 173888.86 282225.09 357418.8 124432.10 319333.2 406520.41
## Villavicencio
## Bogotá 65959.46
## Medellín 222314.79
## Cali 215650.69
## Barranquilla 438947.15
## Bucaramanga 222059.73
## Manizales 187643.68
## Pereira 167225.51
## Cúcuta 279596.28
## Pasto 359434.32
## Ibagué 124572.29
## Montería 324882.02
## Cartagena 411477.12
## Villavicencio 0.00
## [1] "Ruta cerrada:"
## $tour
## [1] 1 13 10 7 6 3 9 2 5 8 12 4 11
##
## $distance
## [1] 190.5323
##
## $tour
## [1] 1 13 10 7 6 3 9 2 5 8 12 4 11
Gráfico
## Generación 1 : Mejor costo = 2172297.71238833
## Generación 2 : Mejor costo = 2430026.47026944
## Generación 3 : Mejor costo = 2724549.76080778
## Generación 4 : Mejor costo = 2283951.24055667
## Generación 5 : Mejor costo = 2457936.6816
## Generación 6 : Mejor costo = 2311094.81782222
## Generación 7 : Mejor costo = 2271320.55635222
## Generación 8 : Mejor costo = 2271320.55635222
## Generación 9 : Mejor costo = 2271320.55635222
## Generación 10 : Mejor costo = 2271320.55635222
## Generación 11 : Mejor costo = 2271320.55635222
## Generación 12 : Mejor costo = 2271320.55635222
## Generación 13 : Mejor costo = 2436313.77227
## Generación 14 : Mejor costo = 2436313.77227
## Generación 15 : Mejor costo = 2672225.46690167
## Generación 16 : Mejor costo = 2525578.29092444
## Generación 17 : Mejor costo = 2525578.29092444
## Generación 18 : Mejor costo = 2402621.31950333
## Generación 19 : Mejor costo = 2742172.97034667
## Generación 20 : Mejor costo = 2584812.55708611
## Generación 21 : Mejor costo = 2330499.20682333
## Generación 22 : Mejor costo = 2330499.20682333
## Generación 23 : Mejor costo = 2309728.00835778
## Generación 24 : Mejor costo = 2429482.03772611
## Generación 25 : Mejor costo = 2612827.49839389
## Generación 26 : Mejor costo = 2695556.69052833
## Generación 27 : Mejor costo = 2721071.56136278
## Generación 28 : Mejor costo = 2755857.86579778
## Generación 29 : Mejor costo = 2755857.86579778
## Generación 30 : Mejor costo = 2729571.06832833
## Generación 31 : Mejor costo = 2501453.04112944
## Generación 32 : Mejor costo = 2603863.89988833
## Generación 33 : Mejor costo = 2559922.39429889
## Generación 34 : Mejor costo = 2559922.39429889
## Generación 35 : Mejor costo = 2505598.60077056
## Generación 36 : Mejor costo = 2398641.14848611
## Generación 37 : Mejor costo = 2428795.25626556
## Generación 38 : Mejor costo = 2351145.54617833
## Generación 39 : Mejor costo = 2214879.00741056
## Generación 40 : Mejor costo = 2509816.68121667
## Generación 41 : Mejor costo = 2400193.65343833
## Generación 42 : Mejor costo = 2324145.24431556
## Generación 43 : Mejor costo = 2400193.65343833
## Generación 44 : Mejor costo = 2335291.47796556
## Generación 45 : Mejor costo = 2400193.65343833
## Generación 46 : Mejor costo = 2411591.59586222
## Generación 47 : Mejor costo = 2325476.32788833
## Generación 48 : Mejor costo = 2217604.61174056
## Generación 49 : Mejor costo = 2408631.75130556
## Generación 50 : Mejor costo = 2306235.61877833
## Generación 51 : Mejor costo = 2306235.61877833
## Generación 52 : Mejor costo = 2450244.48298444
## Generación 53 : Mejor costo = 2675889.96988722
## Generación 54 : Mejor costo = 2544403.29188278
## Generación 55 : Mejor costo = 2491042.00198778
## Generación 56 : Mejor costo = 2441207.76716833
## Generación 57 : Mejor costo = 2791340.78917778
## Generación 58 : Mejor costo = 2603047.44081111
## Generación 59 : Mejor costo = 2411310.10088444
## Generación 60 : Mejor costo = 2001761.04675722
## Generación 61 : Mejor costo = 2001761.04675722
## Generación 62 : Mejor costo = 1959353.66140167
## Generación 63 : Mejor costo = 2610038.82732278
## Generación 64 : Mejor costo = 2509600.38266111
## Generación 65 : Mejor costo = 2557451.39110944
## Generación 66 : Mejor costo = 2398578.86016222
## Generación 67 : Mejor costo = 2387192.21744611
## Generación 68 : Mejor costo = 2288813.802705
## Generación 69 : Mejor costo = 2291674.74942222
## Generación 70 : Mejor costo = 2291674.74942222
## Generación 71 : Mejor costo = 2238903.90452056
## Generación 72 : Mejor costo = 2394554.33708944
## Generación 73 : Mejor costo = 2394554.33708944
## Generación 74 : Mejor costo = 2489654.21374222
## Generación 75 : Mejor costo = 2595765.93301278
## Generación 76 : Mejor costo = 2523240.93455556
## Generación 77 : Mejor costo = 2523240.93455556
## Generación 78 : Mejor costo = 2266468.062765
## Generación 79 : Mejor costo = 2449438.46253944
## Generación 80 : Mejor costo = 2481580.80852444
## Generación 81 : Mejor costo = 2481580.80852444
## Generación 82 : Mejor costo = 2127427.28114056
## Generación 83 : Mejor costo = 2424300.29277111
## Generación 84 : Mejor costo = 2581559.58724722
## Generación 85 : Mejor costo = 2638411.27599667
## Generación 86 : Mejor costo = 2846617.22092833
## Generación 87 : Mejor costo = 2749982.49894556
## Generación 88 : Mejor costo = 2559087.42223167
## Generación 89 : Mejor costo = 2147754.18716611
## Generación 90 : Mejor costo = 2147754.18716611
## Generación 91 : Mejor costo = 2600515.58346944
## Generación 92 : Mejor costo = 2602883.89923889
## Generación 93 : Mejor costo = 2536886.36828222
## Generación 94 : Mejor costo = 2460103.11892111
## Generación 95 : Mejor costo = 2460103.11892111
## Generación 96 : Mejor costo = 2460103.11892111
## Generación 97 : Mejor costo = 2366585.86915222
## Generación 98 : Mejor costo = 2609407.53325167
## Generación 99 : Mejor costo = 2556917.91184833
## Generación 100 : Mejor costo = 2609407.53325167
## Mejor ruta encontrada: 1 11 3 8 2 6 5 7 12 13 4 10 9
## Costo total de la ruta: 1959354
## Generación en la que se encontró el mejor costo: 62
Repositorio Github: https://github.com/AlejandroTorradoCalderon/Optimizacion-heuristica-RNA