115 lines
2.6 KiB
Python
115 lines
2.6 KiB
Python
import numpy as np
|
|
import pandas as pd
|
|
import random, os, json
|
|
import ensayos_motor as ensayo
|
|
|
|
def valores_objetivo(archivo, material):
|
|
resistencia = 4.5
|
|
|
|
E_obj, f = ensayo.ensayar_material(resistencia, material, archivo)
|
|
|
|
return E_obj, f
|
|
|
|
|
|
def generar_curva(offset, ruta):
|
|
|
|
muVacio = 4 * np.pi * 1e-7
|
|
|
|
with open("h_values/h_values.json", "r") as f : h = np.array(json.load(f))
|
|
b = muVacio * h + offset
|
|
|
|
with open(ruta, "w") as f:
|
|
f.write('[PLACond]\n')
|
|
f.write('Type=Fixed_Solid\n')
|
|
f.write('Solid Type=Steel\n')
|
|
f.write('Thermal Conductivity=0\n')
|
|
f.write('Specific Heat=0\n')
|
|
f.write('Density=1850\n')
|
|
f.write('Notes=\n')
|
|
f.write('ElectricalResistivity=10000000\n')
|
|
f.write('TempCoefElectricalResistivity=0\n')
|
|
f.write('PoissonsRatio=0\n')
|
|
f.write('YoungsCoefficient=0\n')
|
|
f.write('YieldStress=0\n')
|
|
f.write(f'BValue[0]=0\n')
|
|
f.write(f'HValue[0]=0\n')
|
|
|
|
for i in np.arange(len(h)):
|
|
f.write(f'BValue[{i+1}]={b[i]}\n')
|
|
f.write(f'HValue[{i+1}]={h[i]}\n')
|
|
|
|
print("Curva generada correctamente en: ", ruta)
|
|
|
|
def logica_offset(offset, error, errorObjetivo):
|
|
'''
|
|
Coge el offset, error actual y lo analiza.
|
|
|
|
devuelve flag y offset nuevo
|
|
|
|
si se cumple la condicion devuelve
|
|
un True y None para offset
|
|
|
|
'''
|
|
|
|
limSup = 1 + errorObjetivo
|
|
limInf = 1 - errorObjetivo
|
|
|
|
if error <= limSup and error >= limInf:
|
|
generar_curva(offset, 'Comparar_Resultados/PLACond.mdb')
|
|
return True, offset, None
|
|
|
|
tasa_aprendizaje = 1
|
|
|
|
desviacion = error - 1
|
|
delta = abs(tasa_aprendizaje * np.tanh(desviacion))
|
|
|
|
if error >= limSup: offset -= delta
|
|
if error <= limInf: offset += delta
|
|
|
|
return False, offset, delta
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
'''
|
|
Esto solo se activa si se lanza este script en concreto
|
|
no si se invocan las funciones desde otro script.
|
|
|
|
Contiene ejemplos de como funciona el codigo para ver
|
|
como funciona todo
|
|
|
|
'''
|
|
|
|
directorio = ''
|
|
nombre = "PLACond.mdb"
|
|
|
|
ruta = f'{directorio}{nombre}'
|
|
offset = 0
|
|
|
|
E_original = 70
|
|
|
|
B = 4 * np.pi * 1e-7 * 1000 + offset
|
|
|
|
cte = E_original/B
|
|
|
|
EObjetivo = 175
|
|
|
|
errorObjetivo = 0.01
|
|
|
|
flag = False
|
|
|
|
while flag == False:
|
|
os.system('cls')
|
|
|
|
B_nuevo = 4 * np.pi * 1e-7 * 1000 + offset
|
|
|
|
Ecalculado = cte * B_nuevo
|
|
|
|
error = Ecalculado/EObjetivo
|
|
|
|
print(Ecalculado)
|
|
print(error)
|
|
print()
|
|
|
|
flag, offset = logica_offset(offset, error, errorObjetivo)
|