6. Conclusions and recommendations
6.2 Recommendations
Public Tamano_Poblacion As Integer'Determina el tamaño de la población que se desea examinar, es decir el número de cromosomas por cada experimento.
Public Probabilidad_Cruce As Double'Parámetro que se establece
Public Probabilidad_Mutacion As Double'Valor de probabilidad para realizar la mutación a cada bit del cromosoma Public Generaciones As Integer'Determina el número de evoluciones que se realizaran
Public Numero_de_Experimentos As Integer'Almacena el número de experimentos que debe ejecutar el programa. Public cuantooficinas As Integer'Determina cuantas oficinas están solicitando contingencias
Public recursos_i() As Long'Almacena las cedulas de los funcionarios que seencuentran disponibles para el cubrimiento Public contingencias_j() As Long'Almacena el código de la oficina y contingencia concatenados
Publicpoblacion() As Long'Matriz de población (asignación de Recursos i a la contingencia j Public cuantorecursos As Integer'Variable que representa el número de recursos disponibles Public Numero_Generaciones As Integer'Determinael número de evoluciones que se realizaran Public TREC_k() As Variant'Cantidad de recursos disponibles de tipo k
Public COST_jk() As Variant'Costo de cubrir la oficina que presentó la contingencia j con un recurso de tipo k Public NOCU_j() As Variant'Matrizde Costo de No cubrir la contingencia j
Public CUTI_k() AsVariant'Matriz relación de Costo de Utilizar un recurso k
Public ponderacion_distancia AsInteger'Variable parametrica para relacionar la distancia del recurso a la oficina Public valor_cromosoma() AsLong'Matriz que almacena el valor de la F.O. de cada gen
Public funcion_objetivo() AsLong'Matriz que almacena los datos de la F.O. por cada cromosoma (individuo) Public mejor_valor AsDouble'Mejor valor de la F.O. en toda la población
Public mejor_individuo AsInteger'Mejor individuo de la F.O. en toda la población Public peor_valor AsDouble'Peorvalor de la F.O. en toda la población
Public peor_individuo AsInteger'Peor individuo de la F.O. en toda la población Publicprobabilidades() AsDouble'Probabilidades de selección
Public Individuos_Selectos() As Integer'Vector que almacena los individuos que se seleccionaran para formar la siguiente población Public Individuos_a_Cruzar AsInteger'Determina el número de cromosomas de la población que se utilizarán para el cruce
Public poblacion_nueva() As Integer'Matriz donde se almacena la nueva población
109
Public Individuos_que_se_Cruzan() As Integer'Vector que almacena el índice de los cromosomas que se cruzan PublicMejorMejorCromosoma() As Integer'Almacenael mejor cromosoma encontrado para cada experimento PublicMejorCromosoma() As Integer'Almacena los mejores cromosomas encontrados en cada generación
PublicExperimentoMejorEncontrado() AsDouble'Almacena la función objetivo del mejor valor encontrado en cada experimento. Public pena As Integer
PublicEvolucion() As Double'Vector que almacena el valor de la función objetivo del mejor individuo de la población encontrado en una generación
Public TiempoInicio As Single
Public tiempoCorrida As Single'Tiempo de corrida (en segundos) para correr un experimento
PublicTiempos() As Single'Matriz donde se guardan los tiempos de corrida para cada una de los experimentos
SubPrincipal() Call Limpiar_Hoja Call datos_entrada
ReDim funcion_objetivo(Tamano_Poblacion)
ReDimMejorCromosoma(Numero_Generaciones, cuantooficinas - 1)
ReDimEvolucion(Numero_Generaciones)
ReDimMejorMejorCromosoma(Numero_de_Experimentos, cuantooficinas - 1)
ReDimprobabilidades(Tamano_Poblacion) ReDim Individuos_Selectos(Tamano_Poblacion) ReDim Individuos_que_se_Cruzan(Tamano_Poblacion) ReDimSecuencia(Tamano_Poblacion) ReDimFactibilidadExperimento(Numero_de_Experimentos) ReDimExperimentoMejorEncontrado(Numero_de_Experimentos) ReDimTiempos(Numero_de_Experimentos)
For Experimento = 1 To Numero_de_Experimentos
TiempoInicio = Timer 'Tiempo de inicio de la corrida
110 For ite = 1 To Numero_Generaciones
Call f_objetivo Call calcule_mejor_peor_valor Evolucion(ite) = mejor_valor For i = 1 To cuantooficinas - 1 MejorCromosoma(ite, i) = poblacion(mejor_individuo, i) Next i Call calcule_probabilidades_seleccion Call Seleccione_Ruleta Call asignar_poblacion_nueva Call seleccione_individuos_cruce Call Cruce_Individuos_que_se_Cruzan Call Mutacion_Global Call asignar_poblacion_nueva_actual Next ite
tiempoCorrida = Timer - TiempoInicio 'Calcula el tiempo de corrida para cada experimento
Tiempos(Experimento) = tiempoCorrida 'Almacena los tiempos de corrida para cada experimento' aux = columnas(1000, 100000)
Call Guardar_Evolucion(Experimento, Numero_Generaciones) Next Experimento
Call Escribir_resultado(Timer - TiempoInicio) EndSub
_______________________________________________________________________________________________________ Sub datos_entrada() 'Lee los datos de inicio
111
'Lee los parámetros
Sheets("Parámetros").Select Tamano_Poblacion = Range("B4") Probabilidad_Cruce = Range("B5") Probabilidad_Mutacion = Range("B6") Numero_Generaciones = Range("B7") Numero_de_Experimentos = Range("B8")
'Lee las definiciciones
Sheets("Definiciones").Select tipo_contingencias = Range("E13") tipo_recursos = Range("B15")
pena = Range("E14") ' Guarda el valor de no cubrir una contingencia que tiene 2 recursos 'Columnas
Sheets("Columnas").Select Range("A1").Select
Range(Selection, Selection.End(xlDown)).Select columnas = Range(Selection, Selection.End(xlToRight)) cuantocolumnas = UBound(columnas)
'--- 'TREC_k= Total de Recursos de tipo k Disponibles para cubrir contingencias 'Guarda los el número de Recursos en el arreglo
ReDim TREC_k(tipo, 2)
Sheets("Definiciones").Select
ponderacion_distancia = Range("B16") 'Guarda en una variable la ponderación dada a la distancia por los metros
112 Range(Selection, Selection.End(xlDown)).Select
TREC_k = Range(Selection, Selection.End(xlToRight)) cuantoTREC_k = UBound(TREC_k)
cuanto2TREC_k = UBound(TREC_k, 2)
'k1=Supernumerario ,k2=Temporal, k3=SENA, k4=Horas Extras, k5=Cubierto por otra oficina
Sheets("Recursos").Select Range("A3").Select
Range(Selection, Selection.End(xlDown)).Select recursos = Range(Selection, Selection.End(xlToRight)) cuantorecursos = UBound(recursos)
cuantorecursos2 = UBound(recursos, 2)
'--- 'GUARDAR OFICINAS EN OFICINAS
Sheets("Oficinas").Select Range("A2").Select
Range(Selection, Selection.End(xlDown)).Select oficinas = Range(Selection, Selection.End(xlToRight)) cuantooficinas = UBound(oficinas)
cuantooficinas2 = UBound(oficinas, 2)
'--- 'COST_(j,k)= Costo de cubrir la contingencia j con un recurso tipo k
Sheets("Definiciones").Select Range("B19").Select
Range(Selection, Selection.End(xlDown)).Select
COST_jk = Range(Selection, Selection.End(xlToRight)) 'Almacena la tabla de relación de costos de utilizar para cubrir la contingencia con el tipo de recurso k
cuantoCOST_jk = UBound(COST_jk) ' cuanto2COST_jk = UBound(COST_jk, 2)
113
'NOCU_j= Costo de No cubrir la Contingencia j
ReDim NOCU_j(tipo_contingencias, 2)
Sheets("Definiciones").Select Range("B31").Select
Range(Selection, Selection.End(xlDown)).Select
NOCU_j = Range(Selection, Selection.End(xlToRight)) 'Almacena la tabla de relación de costos de utilizar àra cubrir la contingencia con el tipo de recurso k
cuantoNOCU_j = UBound(NOCU_j) ' cuanto2NOCU_j = UBound(NOCU_j, 2)
'--- 'CUTI_k= Costo de utilizar el recurso tipo k
ReDim CUTI_k(tipo_recursos, 2)
Sheets("Definiciones").Select Range("I20").Select
Range(Selection, Selection.End(xlDown)).Select
CUTI_k = Range(Selection, Selection.End(xlToRight)) 'Almacena la tabla de relación de costos de utilizar para cubrir la contingencia con el tipo de recurso k
cuantocuti_k = UBound(CUTI_k) ' cuanto2cuti_k = UBound(CUTI_k, 2)
'---
'Guarda los datos de los funcionarios en lista de recursos_i -
ReDim recursos_i(cuantorecursos, 4)
For i = 1 To cuantorecursos
114
recursos_i(i, 2) = recursos(i, 3) 'Guarda en Recursos el Tipo de Cargo
recursos_i(i, 3) = recursos(i, 5) 'Guarda en Recursos la Cordenada x
recursos_i(i, 4) = recursos(i, 6) 'Guarda en Recursos la cordenada y
Next i
ReDim contingencias_j(cuantooficinas, 7)
For j = 1 To cuantooficinas - 1
contingencias_j(j, 1) = oficinas(j + 1, 1) 'Guarda en Contingencias_j el número decontingencia
contingencias_j(j, 2) = oficinas(j + 1, 6) 'Guarda en Contingencias_j el tipo decontingencia
contingencias_j(j, 3) = oficinas(j + 1, 7) 'Guarda en Contingencias_j el Cargosolicitado por la contigencia
contingencias_j(j, 4) = oficinas(j + 1, 20) 'Guarda en Contingencias_j la distanciade la oficina que presento la contingencia
contingencias_j(j, 5) = oficinas(j + 1, 21) 'Guarda en Contingencias_j la distancia de la oficina que presento la contingencia
contingencias_j(j, 6) = oficinas(j + 1, 22) 'Calficación por cubrir la contingencia j
contingencias_j(j, 7) = oficinas(j + 1, 9) 'Guarda en Contingencias_j Cantidad de Funcionarios en el cargo k
Next j End Sub
_______________________________________________________________________________________________________
Sub generar_poblacion_inicial()
ReDimpoblacion(Tamano_Poblacion, cuantooficinas - 1)
ReDimesta(cuantorecursos) 'Matriz creada para ir alimentando cada vez que se use un recurso '---Genera Aleatorio para la población inicial
For i = 1 To Tamano_Poblacion
115
If contingencias_j(m, 7) - 1 = 1 Then
cont = 0
DoWhile cont < 1 'Intenta buscar la asignación aleatoria "cont" veces
Randomize cont = cont + 1
aux = Genere_aleatorio_entre(1, cuantorecursos)
Ifesta(aux) < 1 Then'Valida que el aleatorio generado no se encuentre repetido
esta(aux) = esta(aux) + 1 'Si el recurso es usado se le suma 1
poblacion(i, m) = recursos_i(aux, 1) cont = 1 EndIf Loop End If Next m
For j = 1 To cuantooficinas - 1 'El límite del tamaño está dado por el número de Contingencias u Oficinas
cont = 0
DoWhile cont < 1 'Intenta buscar la asignación aleatoria "cont" veces
Randomize cont = cont + 1
aux = Genere_aleatorio_entre(0, cuantorecursos)
Ifesta(aux) < 1 Then'Valida que el aleatorio generado no se encuentre repetido
esta(aux) = esta(aux) + 1 'Si el recurso es usado se le suma una a esta()
poblacion(i, j) = recursos_i(aux, 1) cont = 1
116 EndIf
Loop Next j
'--- Revisa si hay recursos que no fueron usados
n = Genere_aleatorio_entre(1, cuantooficinas - 1) 'Genera un Aleatorio para que revise desde un punto al azar si hay Recursos no Asignados
DoWhile n <> 0 'El ciclo parte desde un número en cuenta regresiva Ifpoblacion(i, n) = 0 Then
m = 0
DoWhile m < cuantorecursos 'Este ciclo termina hasta que examine todos los recursos que no fueron asignados
m = m + 1
Ifesta(m) = 0 Then'Valida en la matriz esta() si es usado el recursos
poblacion(i, n) = recursos_i(m, 1) esta(m) = 1 m = cuantorecursos + 1 EndIf Loop EndIf n = n - 1 Loop
For p = 1 To cuantorecursos 'Llena de 0 la matriz esta
117
Next p
Next i
End Sub
_______________________________________________________________________________________________________
'Genera números aleatorios entre dos números Function Genere_aleatorio_entre(a, b)
Genere_aleatorio_entre = Int((b - a + 1) * Rnd + a)
End Function
_______________________________________________________________________________________________________
Sub decodificar_cromo()
ReDim valor_cromosoma(Tamano_Poblacion, cuantooficinas - 1)
For i = 1 To Tamano_Poblacion
For j = 1 To cuantooficinas - 1
Ifpoblacion(i, j) <> 0 Then'Valida si le fue asignado un recurso
DIST_ij = 0 Costo_asignar_jk = 0 Costo_Utilizar_k = 0 CALI_jg = 0 costo_no_cubrir = 0 cont = 0 recurso = poblacion(i, j)
118 m = 0
'F.O para el cromosoma para calculara DIST_ij: Distancia i al recurso j DoWhile m < cuantorecursos
m = m + 1 n = 0
If recurso = recursos_i(m, 1) Then
recurso_utilizado = m
dist_recurso_oficina = Math.Abs(recursos_i(m, 3) - contingencias_j(j, 4)) + Math.Abs(recursos_i(m, 4) - contingencias_j(j, 5)) DIST_ij = -dist_recurso_oficina * 10
m = cuantorecursos + 1
End If Loop
'---
'F.O para el cromosoma para calculara COSTO_ASIGNAR_jk: cONTINGENCIA TIPO J A RECURSO TIPO K
Costo_Asignar_J = recursos_i(recurso_utilizado, 2) Costo_Asignar_K = contingencias_j(j, 2)
Costo_asignar_jk = COST_jk(Costo_Asignar_J + 1, Costo_Asignar_K + 1) 'Se coloca + 1 debido a que en la fila y columna 1 están los títulos
'.---
'F.O para el cromosoma CUTI_k×X?_(i,j,g,k) )Costo de utilizar el recurso k
Tipo_Recurso_k = recursos_i(recurso_utilizado, 2) Costo_Utilizar_k = CUTI_k(Tipo_Recurso_k, 2)
'.---
119 CALI_jg = contingencias_j(j, 6)
valor_cromosoma(i, j) = DIST_ij + Costo_asignar_jk + Costo_Utilizar_k + CALI_jg
Else
'.---
'F.O para el cromosoma 'NOCU?_j×Y_(j,g) Costo de no Cubrir la Contingencia j
Tipo_contingencia = contingencias_j(j, 2) costo_no_cubrir = NOCU_j(Tipo_contingencia, 2) valor_cromosoma(i, j) = costo_no_cubrir End If Next j Next i EndSub _______________________________________________________________________________________________________ Sub f_objetivo() Call decodificar_cromo ReDim funcion_objetivo(Tamano_Poblacion) For i = 1 To Tamano_Poblacion suma = 0 For j = 1 To cuantooficinas - 1
If contingencias_j(j, 7) - 1 < 2 Then'Si se le asigna a una contingencia que tiene menos de dos recursos se le resta pena a su valor total Ifpoblacion(i, j) = 0 Then
suma = suma - pena
120
Else
suma = valor_cromosoma(i, j) + suma
End If Next j funcion_objetivo(i) = suma Next i EndSub _______________________________________________________________________________________________________ Sub calcule_mejor_peor_valor()
'Calcula el mejor y peor individuo de la poblacion
mejor_valor = funcion_objetivo(1) mejor_individuo = 1
peor_valor = funcion_objetivo(1) peor_individuo = 1
For i = 2 To Tamano_Poblacion
If funcion_objetivo(i) > mejor_valor Then mejor_valor = funcion_objetivo(i) mejor_individuo = i
End If
If funcion_objetivo(i) < peor_valor Then peor_valor = funcion_objetivo(i) peor_individuo = i
End If Next i
121 End Sub
_______________________________________________________________________________________________________ Sub calcule_probabilidades_seleccion()
'Procedimiento que determina la probabilidades de selección con base al peor valor de la función objetivo
suma = 0
For i = 1 To Tamano_Poblacion
'Se suma 2 para que no se genere una división por cero para el peor individuo
suma = suma + peor_valor + 2 - funcion_objetivo(i) Next i
'Se calculan las probabilidades de selección, de tal manera que los individuos con menor función objetivotendrán mayor probabilidad de ser escogidos
For i = 1 To Tamano_Poblacion
probabilidades(i) = (-funcion_objetivo(i) + peor_valor + 1) / suma Next i
End Sub
_______________________________________________________________________________________________________
Sub Seleccione_Ruleta()
For i = 1 To Tamano_Poblacion
u = Rnd() 'Se genera un valor aleatoria entre 0 y 1
suma = probabilidades(1) j = 1
'Determina cual individuo seleccionar de acuerdo a la probabilidad acumulada While suma < u And j < Tamano_Poblacion
122 j = j + 1
suma = suma + probabilidades(j)
Wend Individuos_Selectos(i) = j Next i EndSub _______________________________________________________________________________________________________ Sub asignar_poblacion_nueva()
ReDim poblacion_nueva(Tamano_Poblacion, cuantooficinas - 1)
For i = 1 To Tamano_Poblacion
'Asigna los indviduos seleccionados a una nueva poblacion For j = 1 To cuantooficinas - 1 poblacion_nueva(i, j) = poblacion(Individuos_Selectos(i), j) Next j Next i End Sub _______________________________________________________________________________________________________ Sub seleccione_individuos_cruce() Individuos_a_Cruzar = 0 For c = 1 To Tamano_Poblacion u = Rnd
123 If u < Probabilidad_Cruce Then Individuos_a_Cruzar = Individuos_a_Cruzar + 1 Individuos_que_se_Cruzan(Individuos_a_Cruzar) = c End If Next c
'Procedimiento que garantiza que el numero de individuos a cruzar sea par If (Individuos_a_Cruzar Mod 2 = 1) Then
u = Rnd
If u < 0.5 Then
Individuos_a_Cruzar = Individuos_a_Cruzar + 1
Individuos_que_se_Cruzan(Individuos_a_Cruzar) = Genere_aleatorio_entre(1, TamanoPoblacion)
Else Individuos_a_Cruzar = Individuos_a_Cruzar - 1 End If End If End Sub _______________________________________________________________________________________________________
'Este metodo selecciona los papas para realizar los cruces Sub Cruce_Individuos_que_se_Cruzan()
'Asigna la secuencia de cruce
For i = 1 To Individuos_a_Cruzar
Secuencia(i) = Individuos_que_se_Cruzan(i)
Next i
124 dim_t = Individuos_a_Cruzar
'Recorre todos los individuos a cruzar While dim_t > 0
'Obtiene el papa 1 de manera aleatoria
pindice_1 = Genere_aleatorio_entre(1, dim_t)
'Reformula la secuncia eliminado el papa1
Papa_1 = Secuencia(pindice_1)
For i = pindice_1 To dim_t - 1 Secuencia(i) = Secuencia(i + 1)
Next i
'Pega en la secuencia lo que queda de la secuancia despues de sacar el papa1
dim_t = dim_t - 1
'Obtiene el papa 2 de manera aleatoria descartando el papa1
pindice_2 = Genere_aleatorio_entre(1, dim_t) Papa_2 = Secuencia(pindice_2)
'Mira la secuencia descartando el último individuo que se repite 'esto sucede porque se necesita ahorar tiempo
For i = pindice_2 To dim_t - 1 Secuencia(i) = Secuencia(i + 1)
125 dim_t = dim_t - 1
'Llama la funcion de cruce
Call Cruce_entre_Papas(Papa_1, Papa_2)
Wend End Sub
_______________________________________________________________________________________________________
Sub Cruce_entre_Papas(Papa_1, Papa_2)
ReDimesta2(cuantorecursos)
posicion = Genere_aleatorio_entre(1, cuantooficinas - 1) For i = posicion To cuantooficinas - 1
Temporal = poblacion_nueva(Papa_1, i) poblacion_nueva(Papa_1, i) = poblacion_nueva(Papa_2, i) poblacion_nueva(Papa_2, i) = Temporal Next i For i = 1 To cuantorecursos esta2(i) = 0 Next i For j = 1 To cuantooficinas - 1 pos = poblacion_nueva(Papa_1, j) If pos <> 0 Then
126 esta2(pos) = esta2(pos) + 1 End If Next j For i = 1 To cuantooficinas - 1 aux = poblacion_nueva(Papa_1, i) Ifesta2(aux) > 1 Then no_encontro = 0 m = 0 DoWhile m < cuantorecursos m = m + 1 noesta = esta2(m) If noesta = 0 Then poblacion_nueva(Papa_1, i) = m esta2(m) = esta2(m) + 1 m = cuantorecursos + 1 no_encontro = 1 End If
If m = cuantorecursos And no_encontro = 0 Then poblacion_nueva(Papa_1, i) = 0 End If
Loop
127 EndIf
Next i
'''''''''VALIDA SI ESTA REPETIDO EN EL PAPA 2
For i = 1 To cuantorecursos esta2(i) = 0 Next i For j = 1 To cuantooficinas - 1 pos = poblacion_nueva(Papa_2, j) If pos <> 0 Then esta2(pos) = esta2(pos) + 1 End If Next j For i = 1 To cuantooficinas - 1 aux = poblacion_nueva(Papa_2, i) If esta2(aux) > 1 Then no_encontro = 0 m = 0 DoWhile m < cuantorecursos m = m + 1 noesta = esta2(m) If noesta = 0 Then poblacion_nueva(Papa_2, i) = m esta2(m) = esta2(m) + 1
128 m = cuantorecursos + 1
no_encontro = 1 End If
If m = cuantorecursos And no_encontro = 0 Then poblacion_nueva(Papa_2, i) = 0 End If Loop esta2(aux) = esta2(aux) - 1 End If Next i End Sub _______________________________________________________________________________________________________ Sub asignar_poblacion_nueva_actual() For c = 1 To Tamano_Poblacion For i = 1 To cuantooficinas - 1 poblacion(c, i) = poblacion_nueva(c, i) Next i Next c End Sub _______________________________________________________________________________________________________ Sub Guardar_Evolucion(Experimento, Numero_Generaciones)
'Guarda la evolución
Dim MejorEncontrado As Double MejorEncontrado = Evolucion(1)
129 For i = 1 To cuantooficinas - 1
MejorMejorCromosoma(Experimento, i) = MejorCromosoma(1, i) Next i
For iteracion = 2 To Numero_Generaciones
IfEvolucion(iteracion) > MejorEncontrado Then 'es signo > debido a que es maximización MejorEncontrado = Evolucion(iteracion) For i = 1 To cuantooficinas - 1 MejorMejorCromosoma(Experimento, i) = MejorCromosoma(iteracion, i) Next i End If Next iteracion ExperimentoMejorEncontrado(Experimento) = MejorEncontrado EndSub ____________________________________________________________________________________________________
'Intercambia genes de un cromosoma
Sub Mutacion_Global()
For c = 1 To Tamano_Poblacion u = Rnd
If u < Probabilidad_Mutacion Then
cambio1 = Genere_aleatorio_entre(1, cuantooficinas - 1) cambio2 = Genere_aleatorio_entre(1, cuantooficinas - 1) Temporal = poblacion_nueva(c, cambio1)
130 poblacion_nueva(c, cambio2) = Temporal
EndIf Next c End Sub
_______________________________________________________________________________________________________ Sub Escribir_resultado(ByVal tiempoCorrida As Single)
Dim mejor AsDouble Dim position AsInteger Sheets("Columnas").Select Range("A1").Select
Range(Selection, Selection.End(xlDown)).Select columnas = Range(Selection, Selection.End(xlToRight)) cuantocolumnas = UBound(columnas)
mejor = ExperimentoMejorEncontrado(1) position = 1
For e = 1 To Numero_de_Experimentos
If mejor >ExperimentoMejorEncontrado(e) Then mejor = ExperimentoMejorEncontrado(e) position = e
End If Next e
'Selecciona la hoja de Solucion
131 For i = 1 To cuantooficinas - 1
Range("A" & i + 6) = i
Range("B" & i + 6) = contingencias_j(i, 1)
Range("c" & i + 6) = MejorMejorCromosoma(position, i) Next i
Range("B6") = "Contingencia" Range("C6") = "Recurso"
Range("B2") = "Función Objetivo"
Range("C2") = ExperimentoMejorEncontrado(position) Range("B3") = "Tiempo de Corrida"
Range("C3") = tiempoCorrida Range("B6").Select Range(Selection, Selection.End(xlToRight)).Select Application.CutCopyMode = False With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = 255 .TintAndShade = 0 .PatternTintAndShade = 0 End With With Selection.Font .ThemeColor = xlThemeColorDark1 .TintAndShade = 0 End With Selection.Font.Bold = True Selection.Borders(xlDiagonalDown).LineStyle = xlNone
132 Selection.Borders(xlDiagonalUp).LineStyle = xlNone WithSelection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With WithSelection.Borders(xlEdgeTop) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With WithSelection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With WithSelection.Borders(xlEdgeRight) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With WithSelection.Borders(xlInsideVertical) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlInsideHorizontal)
133 .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With Range("B2").Select Range(Selection, Selection.End(xlDown)).Select Application.CutCopyMode = False With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = 255 .TintAndShade = 0 .PatternTintAndShade = 0 End With With Selection.Font .ThemeColor = xlThemeColorDark1 .TintAndShade = 0 End With Selection.Font.Bold = True Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone WithSelection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With WithSelection.Borders(xlEdgeTop) .LineStyle = xlContinuous
134 .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With WithSelection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With WithSelection.Borders(xlEdgeRight) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With WithSelection.Borders(xlInsideVertical) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With WithSelection.Borders(xlInsideHorizontal) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With End Sub _______________________________________________________________________________________________________
135
Sub Limpiar_Hoja()
'Borra el contenido de las celdas que estan en el rango especificado Sheets("Solucion").Select
Range("A1:C1020").ClearContents
136
ANEXO 10: ESCENARIOS DISEÑADOS PARA PROBAR LAS SOLUCIONES DEL