Преглед на файлове

Mejora de seleccion de combos + algo de accidentales

dacowars преди 1 месец
родител
ревизия
3e8f08da7b
променени са 2 файла, в които са добавени 84 реда и са изтрити 48 реда
  1. 12 0
      .gitignore
  2. 72 48
      Comb_acciones.py

+ 12 - 0
.gitignore

@@ -0,0 +1,12 @@
+*.xlsx
+*.xls
+__pycache__/
+*.pyc
+*.pyo
+*.pyd
+.env
+venv/
+.venv/
+Thumbs.db
+.DS_Store
+*.lnk

+ 72 - 48
Comb_acciones.py

@@ -288,6 +288,26 @@ def validar_combinacion(comb, patrones, compatibilidad_df, restricciones_df):
         if per != 0:
             if not(per=='x' and comb[iter]):
                 return False
+    #comprueba que no hay dos acciones accidentales en la misma combinacion
+    accidentales = restricciones_df.loc[:,"Tipo"]
+    num_acc = 0
+    for iter, acc in enumerate(accidentales):
+        if acc == "Accidental":
+            if comb[iter]:
+                num_acc += 1
+                if num_acc > 1:
+                    return False
+    #comprueba que con sismo solo hay una carga variable
+    sismo = restricciones_df.loc[:,"Accion IAPF"]
+    num_var = 0
+    for iter, sis in enumerate(sismo):
+        if sis == "Sismo":
+            if comb[iter]:
+                for jter in comb:
+                    if restricciones_df.loc[jter,"Tipo"] == "Variable":
+                        num_var += 1
+                        if num_var > 1:
+                            return False
     #si no cumple ninguna de las restricciones se considera válida la combinacion
     return True
 
@@ -340,6 +360,8 @@ minorados_ELUP = []
 minorados_ELSC = []
 minorados_ELSF = []
 minorados_ELSCP = []
+minorados_ELUA = []
+minorados_ELUS = []
 
 
 for combo in combinaciones_validas:
@@ -441,60 +463,62 @@ for combo in combinaciones_validas:
             pass    
         
         
+    minorados_ELUP.clear()
+    minorados_ELUA.clear()
+    minorados_ELUS.clear()
+    minorados_ELSC.clear()
+    minorados_ELSF.clear()
+    minorados_ELSCP.clear()
+
+    if n_var == 1:
+        coef_var_ELSF = np.ones(len(patrones))
+        coef_var_ELSCP = np.ones(len(patrones))
+        for i in range(len(combo)):
+            if restricciones_df.loc[i,"Tipo"] == "Variable":
+                if restricciones_df.loc[i,"Accion IAPF"] == "Trafico":
+                    coef_var_ELSF[i] = normas["IAPF"]["CoefVar"]["Trafico"]["psi1"][vias_cargadas if int(vias_cargadas) < 4 else "3"]
+                    coef_var_ELSCP[i] = normas["IAPF"]["CoefVar"]["Trafico"]["psi2"]
+                else:
+                    coef_var_ELSF[i] = normas["IAPF"]["CoefVar"]["Resto"]["psi1"]
+                    coef_var_ELSCP[i] = normas["IAPF"]["CoefVar"]["Resto"]["psi2"]
+
+
+    while n_var > 1:
         minorados_ELUP.clear()
         minorados_ELSC.clear()
         minorados_ELSF.clear()
         minorados_ELSCP.clear()
-
-        if n_var == 1:
+        n_var -= 1 
+        #se busca la primera variable en el combo y se asigna el coeficiente
+        for i in range(len(combo)):
+            coef_var_ELUP = np.ones(len(patrones))
+            coef_var_ELSC = np.ones(len(patrones))
             coef_var_ELSF = np.ones(len(patrones))
             coef_var_ELSCP = np.ones(len(patrones))
-            for i in range(len(combo)):
-                if restricciones_df.loc[i,"Tipo"] == "Variable":
-                    if restricciones_df.loc[i,"Accion IAPF"] == "Trafico":
-                        coef_var_ELSF[i] = normas["IAPF"]["CoefVar"]["Trafico"]["psi1"][vias_cargadas if int(vias_cargadas) < 4 else "3"]
-                        coef_var_ELSCP[i] = normas["IAPF"]["CoefVar"]["Trafico"]["psi2"]
-                    else:
-                        coef_var_ELSF[i] = normas["IAPF"]["CoefVar"]["Resto"]["psi1"]
-                        coef_var_ELSCP[i] = normas["IAPF"]["CoefVar"]["Resto"]["psi2"]
-
-
-        while n_var > 1:
-            minorados_ELUP.clear()
-            minorados_ELSC.clear()
-            minorados_ELSF.clear()
-            minorados_ELSCP.clear()
-            n_var -= 1 
-            #se busca la primera variable en el combo y se asigna el coeficiente
-            for i in range(len(combo)):
-                coef_var_ELUP = np.ones(len(patrones))
-                coef_var_ELSC = np.ones(len(patrones))
-                coef_var_ELSF = np.ones(len(patrones))
-                coef_var_ELSCP = np.ones(len(patrones))
-                if restricciones_df.loc[i,"Tipo"] == "Variable":
-                    if restricciones_df.loc[i,"Accion IAPF"] == "Trafico":
-                        coef_var_ELSF[i] = normas["IAPF"]["CoefVar"]["Trafico"]["psi1"][vias_cargadas if int(vias_cargadas) < 4 else "3"]
-                        coef_var_ELSCP[i] = normas["IAPF"]["CoefVar"]["Trafico"]["psi2"]
-                    else:
-                        coef_var_ELSF[i] = normas["IAPF"]["CoefVar"]["Resto"]["psi1"]
-                        coef_var_ELSCP[i] = normas["IAPF"]["CoefVar"]["Resto"]["psi2"]
-                    for j in range(len(combo)):
-                        if (restricciones_df.loc[j,"Tipo"] == "Variable") and (j != i):
-                                #se asigna el coeficiente de la variable al resto de variables
-                            if restricciones_df.loc[j,"Accion IAPF"] == "Trafico":
-                                coef_var_ELUP[j] = normas["IAPF"]["CoefVar"]["Trafico"]["psi0"]
-                                coef_var_ELSC[j] = normas["IAPF"]["CoefVar"]["Trafico"]["psi0"]
-                                coef_var_ELSF[j] = normas["IAPF"]["CoefVar"]["Trafico"]["psi2"]
-                                coef_var_ELSCP[j] = normas["IAPF"]["CoefVar"]["Trafico"]["psi2"]
-                            else:
-                                coef_var_ELUP[j] = normas["IAPF"]["CoefVar"]["Resto"]["psi0"]
-                                coef_var_ELSC[j] = normas["IAPF"]["CoefVar"]["Resto"]["psi0"]
-                                coef_var_ELSF[j] = normas["IAPF"]["CoefVar"]["Resto"]["psi2"]
-                                coef_var_ELSCP[j] = normas["IAPF"]["CoefVar"]["Resto"]["psi2"]
-                            minorados_ELUP.append(coef_var_ELUP)
-                            minorados_ELSC.append(coef_var_ELSC)
-                            minorados_ELSF.append(coef_var_ELSF)
-                            minorados_ELSCP.append(coef_var_ELSCP)
+            if restricciones_df.loc[i,"Tipo"] == "Variable":
+                if restricciones_df.loc[i,"Accion IAPF"] == "Trafico":
+                    coef_var_ELSF[i] = normas["IAPF"]["CoefVar"]["Trafico"]["psi1"][vias_cargadas if int(vias_cargadas) < 4 else "3"]
+                    coef_var_ELSCP[i] = normas["IAPF"]["CoefVar"]["Trafico"]["psi2"]
+                else:
+                    coef_var_ELSF[i] = normas["IAPF"]["CoefVar"]["Resto"]["psi1"]
+                    coef_var_ELSCP[i] = normas["IAPF"]["CoefVar"]["Resto"]["psi2"]
+                for j in range(len(combo)):
+                    if (restricciones_df.loc[j,"Tipo"] == "Variable") and (j != i):
+                            #se asigna el coeficiente de la variable al resto de variables
+                        if restricciones_df.loc[j,"Accion IAPF"] == "Trafico":
+                            coef_var_ELUP[j] = normas["IAPF"]["CoefVar"]["Trafico"]["psi0"]
+                            coef_var_ELSC[j] = normas["IAPF"]["CoefVar"]["Trafico"]["psi0"]
+                            coef_var_ELSF[j] = normas["IAPF"]["CoefVar"]["Trafico"]["psi2"]
+                            coef_var_ELSCP[j] = normas["IAPF"]["CoefVar"]["Trafico"]["psi2"]
+                        else:
+                            coef_var_ELUP[j] = normas["IAPF"]["CoefVar"]["Resto"]["psi0"]
+                            coef_var_ELSC[j] = normas["IAPF"]["CoefVar"]["Resto"]["psi0"]
+                            coef_var_ELSF[j] = normas["IAPF"]["CoefVar"]["Resto"]["psi2"]
+                            coef_var_ELSCP[j] = normas["IAPF"]["CoefVar"]["Resto"]["psi2"]
+                        minorados_ELUP.append(coef_var_ELUP)
+                        minorados_ELSC.append(coef_var_ELSC)
+                        minorados_ELSF.append(coef_var_ELSF)
+                        minorados_ELSCP.append(coef_var_ELSCP)
 
     
     if minorados_ELUP: