MAIN
unknown
python
3 years ago
27 kB
13
Indexable
import numpy as np
from mpl_toolkits.basemap import Basemap
from netCDF4 import Dataset as NetCDFFile
import matplotlib.pyplot as plt
import skfuzzy as fuzz
from skfuzzy import control as ctrl
import imageio
from fonctions_utiles import *
path = 'C:/Users/Alex/Downloads/KATRINA.nc'
path_ref = 'C:/Users/Alex/Downloads/Charlie.nc'
pression = 'C:/Users/Alex/Downloads/Katrina_pression.nc'
def input_fuzz(variable, input_to_fuzz):
fuzz_input = []
for i in variable.terms.keys():
fuzz_input.append(fuzz.interp_membership(variable.universe, variable.terms[i].mf, input_to_fuzz))
return fuzz_input
def IRR_2var(SF_rules, input_fuzz1, input_fuzz2):
IRR = np.empty([len(SF_rules), 2])
k = -1
for j in range(0, len(SF_rules)):
if (j % len(input_fuzz2)) == 0:
k += 1
IRR[j, 0] = input_fuzz1[k]
IRR[j, 1] = input_fuzz2[j % len(input_fuzz2)]
return IRR
def IRR_3var(SF_rules, input_fuzz1, input_fuzz2, input_fuzz3):
IRR = np.empty([len(SF_rules), 3])
k = -1
m = -1
for j in range(0, len(SF_rules)):
if (j % len(input_fuzz3)) == 0:
k += 1
if (k % len(input_fuzz2)) == 0:
m += 1
IRR[j, 0] = input_fuzz1[m]
IRR[j, 1] = input_fuzz2[j % len(input_fuzz2)]
IRR[j, 2] = input_fuzz3[j % len(input_fuzz3)]
return IRR
def SF1_compute(input_temperature, input_d_speed, input_time):
pas = 0.01
temperature = ctrl.Antecedent(np.arange(263, 323, pas), 'Temperature (K)')
d_speed = ctrl.Antecedent(np.arange(-100, 100, pas), 'Variation of wind speed (m/s)')
time = ctrl.Antecedent(np.arange(0, 15, pas), 'Time since TC formation (days)')
lifespan = ctrl.Consequent(np.arange(0, 15, pas), 'Lifespan')
temperature['Low'] = fuzz.trapmf(temperature.universe, [263, 263, 293, 303])
temperature['Ok'] = fuzz.trapmf(temperature.universe, [293, 303, 323, 323])
d_speed['--'] = fuzz.trapmf(d_speed.universe, [-100, -100, -60, -20])
d_speed['-'] = fuzz.trimf(d_speed.universe, [-60, -30, 0])
d_speed['St'] = fuzz.trimf(d_speed.universe, [-30, 0, 20])
d_speed['+'] = fuzz.trimf(d_speed.universe, [0, 30, 60])
d_speed['++'] = fuzz.trapmf(d_speed.universe, [20, 60, 100, 100])
time['Young'] = fuzz.zmf(time.universe, 3,6)
time['Middle'] = fuzz.gaussmf(time.universe,6,1)
time['Old'] = fuzz.smf(time.universe, 6,9)
lifespan['Dying+'] = fuzz.trapmf(lifespan.universe, [0, 0, 3, 5])
lifespan['Dying'] = fuzz.trimf(lifespan.universe, [3, 5, 7])
lifespan['St'] = fuzz.trimf(lifespan.universe, [5, 7, 10])
lifespan['Living'] = fuzz.trimf(lifespan.universe, [7, 10, 13])
lifespan['Living+'] = fuzz.trapmf(lifespan.universe, [10, 13, 15, 15])
lifespan.view()
temperature.view()
d_speed.view()
time.view()
SF1_rules = [ctrl.Rule(temperature['Low'] & d_speed['--'] & time['Young'], lifespan['Dying+']),
ctrl.Rule(temperature['Low'] & d_speed['--'] & time['Middle'], lifespan['Dying+']),
ctrl.Rule(temperature['Low'] & d_speed['--'] & time['Old'], lifespan['Dying+']),
ctrl.Rule(temperature['Low'] & d_speed['-'] & time['Young'], lifespan['Dying']),
ctrl.Rule(temperature['Low'] & d_speed['-'] & time['Middle'], lifespan['Dying+']),
ctrl.Rule(temperature['Low'] & d_speed['-'] & time['Old'], lifespan['Dying+']),
ctrl.Rule(temperature['Low'] & d_speed['St'] & time['Young'], lifespan['Dying']),
ctrl.Rule(temperature['Low'] & d_speed['St'] & time['Middle'], lifespan['Dying']),
ctrl.Rule(temperature['Low'] & d_speed['St'] & time['Old'], lifespan['Dying']),
ctrl.Rule(temperature['Low'] & d_speed['+'] & time['Young'], lifespan['St']),
ctrl.Rule(temperature['Low'] & d_speed['+'] & time['Middle'], lifespan['St']),
ctrl.Rule(temperature['Low'] & d_speed['+'] & time['Old'], lifespan['St']),
ctrl.Rule(temperature['Low'] & d_speed['++'] & time['Young'], lifespan['Living']),
ctrl.Rule(temperature['Low'] & d_speed['++'] & time['Middle'], lifespan['Living']),
ctrl.Rule(temperature['Low'] & d_speed['++'] & time['Old'], lifespan['Living']),
ctrl.Rule(temperature['Ok'] & d_speed['--'] & time['Young'], lifespan['Dying']),
ctrl.Rule(temperature['Ok'] & d_speed['--'] & time['Middle'], lifespan['Dying']),
ctrl.Rule(temperature['Ok'] & d_speed['--'] & time['Old'], lifespan['Dying']),
ctrl.Rule(temperature['Ok'] & d_speed['-'] & time['Young'], lifespan['Dying']),
ctrl.Rule(temperature['Ok'] & d_speed['-'] & time['Middle'], lifespan['Dying']),
ctrl.Rule(temperature['Ok'] & d_speed['-'] & time['Old'], lifespan['Dying']),
ctrl.Rule(temperature['Ok'] & d_speed['St'] & time['Young'], lifespan['Living']),
ctrl.Rule(temperature['Ok'] & d_speed['St'] & time['Middle'], lifespan['St']),
ctrl.Rule(temperature['Ok'] & d_speed['St'] & time['Old'], lifespan['Dying']),
ctrl.Rule(temperature['Ok'] & d_speed['+'] & time['Young'], lifespan['Living']),
ctrl.Rule(temperature['Ok'] & d_speed['+'] & time['Middle'], lifespan['Living']),
ctrl.Rule(temperature['Ok'] & d_speed['+'] & time['Old'], lifespan['Living']),
ctrl.Rule(temperature['Ok'] & d_speed['++'] & time['Young'], lifespan['Living+']),
ctrl.Rule(temperature['Ok'] & d_speed['++'] & time['Middle'], lifespan['Living+']),
ctrl.Rule(temperature['Ok'] & d_speed['++'] & time['Old'], lifespan['Living+']),
]
SF1_ctrl = ctrl.ControlSystem(SF1_rules)
SF1 = ctrl.ControlSystemSimulation(SF1_ctrl)
input_temperature_fuzz = input_fuzz(temperature, input_temperature)
input_d_speed_fuzz = input_fuzz(d_speed, input_d_speed)
input_time_fuzz = input_fuzz(time, input_time)
print(input_temperature_fuzz)
print(input_d_speed_fuzz)
print(input_time_fuzz)
IRR = IRR_3var(SF1_rules, input_temperature_fuzz, input_d_speed_fuzz, input_time_fuzz)
declenchement = IRR.min(axis=1)
print(IRR)
print(declenchement)
csq_SF1 = {} # variable de type dictionnaire
for i in range(0, len(SF1_rules)): # on initialise à 0 pour chaque règle
csq_SF1[str(SF1_rules[i].consequent)] = 0
for i in range(0, len(SF1_rules)):
csq_i = str(SF1_rules[i].consequent)
csq_SF1[csq_i] = max(csq_SF1[csq_i], declenchement[i]) # Comme dans le TP6
print("Conséquences SF1 :", csq_SF1)
# return SF1
# JUSTE CHANGER REGLES SF1
def SF2_compute(input_humidity, input_TC_size):
pas = 0.01
humidity = ctrl.Antecedent(np.arange(0, 100, pas), 'humidity') # Humidity (%)'
TC_size = ctrl.Antecedent(np.arange(0, 350, pas), 'TC_size') # TC size (km)
TC_size_variation = ctrl.Consequent(np.arange(0, 60, pas), 'TC_var') # Variation of TC size for next day (km)
humidity['--'] = fuzz.trapmf(humidity.universe, [0, 0, 20, 40]) # 20%
humidity['-'] = fuzz.trimf(humidity.universe, [20, 40, 60]) # 40%
humidity['+'] = fuzz.trimf(humidity.universe, [40, 60, 80]) # 60%
humidity['++'] = fuzz.trapmf(humidity.universe, [60, 80, 100, 100]) # 80%
TC_size['Little+'] = fuzz.trapmf(TC_size.universe, [0, 0, 75, 120])
TC_size['Little'] = fuzz.trimf(TC_size.universe, [75, 150, 200])
# TC_size['Normal'] = fuzz.trimf(TC_size.universe, [120, 150, 200])
TC_size['Huge'] = fuzz.trimf(TC_size.universe, [150, 200, 250])
TC_size['Huge+'] = fuzz.trapmf(TC_size.universe, [200, 250, 350, 350])
# 10 13 15 20 25 50
TC_size_variation['Very Low'] = fuzz.trapmf(TC_size_variation.universe, [0, 0, 10, 13]) # 10
TC_size_variation['Low'] = fuzz.trimf(TC_size_variation.universe, [10, 13, 15]) # 13
TC_size_variation['Quite Low'] = fuzz.trimf(TC_size_variation.universe, [13, 15, 20]) # 15
TC_size_variation['Quite High'] = fuzz.trimf(TC_size_variation.universe, [15, 20, 25]) # 20
TC_size_variation['High'] = fuzz.trimf(TC_size_variation.universe, [20, 25, 50]) # 25
TC_size_variation['Very High'] = fuzz.trapmf(TC_size_variation.universe, [25, 50, 50, 50]) # 50
humidity.view()
TC_size.view()
TC_size_variation.view()
SF2_rules = [ctrl.Rule(humidity['--'] & TC_size['Little+'], TC_size_variation['Very Low']),
ctrl.Rule(humidity['--'] & TC_size['Little'], TC_size_variation['Quite Low']),
ctrl.Rule(humidity['--'] & TC_size['Huge'], TC_size_variation['Quite Low']),
ctrl.Rule(humidity['--'] & TC_size['Huge+'], TC_size_variation['Quite Low']),
ctrl.Rule(humidity['-'] & TC_size['Little+'], TC_size_variation['Low']),
ctrl.Rule(humidity['-'] & TC_size['Little'], TC_size_variation['Quite Low']),
ctrl.Rule(humidity['-'] & TC_size['Huge'], TC_size_variation['Quite Low']),
ctrl.Rule(humidity['-'] & TC_size['Huge+'], TC_size_variation['Quite Low']),
ctrl.Rule(humidity['+'] & TC_size['Little+'], TC_size_variation['Quite High']),
ctrl.Rule(humidity['+'] & TC_size['Little'], TC_size_variation['Quite High']),
ctrl.Rule(humidity['+'] & TC_size['Huge'], TC_size_variation['Quite High']),
ctrl.Rule(humidity['+'] & TC_size['Huge+'], TC_size_variation['Quite High']),
ctrl.Rule(humidity['++'] & TC_size['Little+'], TC_size_variation['High']),
ctrl.Rule(humidity['++'] & TC_size['Little'], TC_size_variation['Very High']),
ctrl.Rule(humidity['++'] & TC_size['Huge'], TC_size_variation['Very High']),
ctrl.Rule(humidity['++'] & TC_size['Huge+'], TC_size_variation['Very Low'])]
SF2_ctrl = ctrl.ControlSystem(SF2_rules)
SF2 = ctrl.ControlSystemSimulation(SF2_ctrl)
input_TC_size_fuzz = input_fuzz(TC_size, input_TC_size)
input_humidity_fuzz = input_fuzz(humidity, input_humidity)
IRR = IRR_2var(SF2_rules, input_humidity_fuzz, input_TC_size_fuzz)
print(IRR)
declenchement = IRR.min(axis=1)
print(declenchement)
csq_SF2 = {} # variable de type dictionnaire
for i in range(0, len(SF2_rules)): # on initialise à 0 pour chaque règle
csq_SF2[str(SF2_rules[i].consequent)] = 0
for i in range(0, len(SF2_rules)):
csq_i = str(SF2_rules[i].consequent)
csq_SF2[csq_i] = max(csq_SF2[csq_i], declenchement[i]) # Comme dans le TP6
print("Conséquences SF2 :", csq_SF2)
# SF2.input['humidity'] = input_humidity
# SF2.input['TC_size'] = input_TC_size
# print(SF2.output['TC_var'])
# TC_size_variation.view(sim=SF2)
def SF3_compute(input_TC_velocity,input_surface_pressure,input_dsurface_pressure):
velocity = ctrl.Antecedent(np.arange(0, 100, 0.01), 'Velocity') # Velocity (m/s)
surface_pressure = ctrl.Antecedent(np.arange(92000, 103000, 10), 'Surface_Pressure') # Surface pressure (Pa)
dsurface_pressure = ctrl.Antecedent(np.arange(-2000, 2000, 10), 'Surface_Pressure_Variation') # Surface pressure variation (Pa/h) Surface variation per hour or per day?
velocity_variation = ctrl.Consequent(np.arange(-25, 25, 0.1), 'Velocity_Variation') # Variation of the velocity next hour (m/s). Next hour / next day ?
velocity['Little'] = fuzz.trapmf(velocity.universe, [0,0,20,40])
velocity['Intermediate'] = fuzz.trapmf(velocity.universe, [20,30,50,60])
velocity['High'] = fuzz.trapmf(velocity.universe, [40,60,100,100])
surface_pressure['Little'] = fuzz.trapmf(surface_pressure.universe, [92000,92000, 99000, 101000])
surface_pressure['High'] = fuzz.trapmf(surface_pressure.universe, [99000, 101000, 103000,103000])
dsurface_pressure['--'] = fuzz.trapmf(dsurface_pressure.universe, [-2000, -2000, -1500,-500])
dsurface_pressure['-'] = fuzz.trimf(dsurface_pressure.universe, [-1500, -500, 0])
dsurface_pressure['0'] = fuzz.trimf(dsurface_pressure.universe, [-500, 0, 500])
dsurface_pressure['+'] = fuzz.trimf(dsurface_pressure.universe, [0, 500, 1500])
dsurface_pressure['++'] = fuzz.trapmf(dsurface_pressure.universe, [500,1500, 2000, 2000])
velocity_variation['--'] = fuzz.trimf(velocity_variation.universe, [-25, -25, -10])
velocity_variation['-'] = fuzz.trapmf(velocity_variation.universe, [-25, -10, -5, 0])
velocity_variation['St'] = fuzz.trimf(velocity_variation.universe, [-5, 0, 5])
velocity_variation['+'] = fuzz.trapmf(velocity_variation.universe, [0,5, 10, 25])
velocity_variation['++'] = fuzz.trimf(velocity_variation.universe, [10, 25, 25])
velocity.view()
surface_pressure.view()
dsurface_pressure.view()
velocity_variation.view()
SF3_rules = [ctrl.Rule(surface_pressure['Little'] & velocity['Little'] & dsurface_pressure['--'], velocity_variation['St']),
ctrl.Rule(surface_pressure['Little'] & velocity['Intermediate'] & dsurface_pressure['-'], velocity_variation['+']),
ctrl.Rule(surface_pressure['Little'] & velocity['High'] & dsurface_pressure['0'], velocity_variation['St']),
ctrl.Rule(surface_pressure['Little'] & velocity['Little'] & dsurface_pressure['+'], velocity_variation['St']),
ctrl.Rule(surface_pressure['Little'] & velocity['Intermediate'] & dsurface_pressure['++'], velocity_variation['-']),
ctrl.Rule(surface_pressure['Little'] & velocity['High'] & dsurface_pressure['--'], velocity_variation['++']),
ctrl.Rule(surface_pressure['Little'] & velocity['Little'] & dsurface_pressure['-'], velocity_variation['St']),
ctrl.Rule(surface_pressure['Little'] & velocity['Intermediate'] & dsurface_pressure['0'], velocity_variation['St']),
ctrl.Rule(surface_pressure['Little'] & velocity['High'] & dsurface_pressure['+'], velocity_variation['-']),
ctrl.Rule(surface_pressure['Little'] & velocity['Little'] & dsurface_pressure['++'], velocity_variation['St']),
ctrl.Rule(surface_pressure['Little'] & velocity['Intermediate'] & dsurface_pressure['--'], velocity_variation['+']),
ctrl.Rule(surface_pressure['Little'] & velocity['High'] & dsurface_pressure['-'], velocity_variation['++']),
ctrl.Rule(surface_pressure['Little'] & velocity['Little'] & dsurface_pressure['0'], velocity_variation['St']),
ctrl.Rule(surface_pressure['Little'] & velocity['Intermediate'] & dsurface_pressure['+'], velocity_variation['-']),
ctrl.Rule(surface_pressure['Little'] & velocity['High'] & dsurface_pressure['++'], velocity_variation['--']),
ctrl.Rule(surface_pressure['High'] & velocity['Little'] & dsurface_pressure['--'], velocity_variation['St']),
ctrl.Rule(surface_pressure['High'] & velocity['Intermediate'] & dsurface_pressure['-'], velocity_variation['St']),
ctrl.Rule(surface_pressure['High'] & velocity['High'] & dsurface_pressure['0'], velocity_variation['St']),
ctrl.Rule(surface_pressure['High'] & velocity['Little'] & dsurface_pressure['+'], velocity_variation['St']),
ctrl.Rule(surface_pressure['High'] & velocity['Intermediate'] & dsurface_pressure['++'], velocity_variation['-']),
ctrl.Rule(surface_pressure['High'] & velocity['High'] & dsurface_pressure['--'], velocity_variation['+']),
ctrl.Rule(surface_pressure['High'] & velocity['Little'] & dsurface_pressure['-'], velocity_variation['St']),
ctrl.Rule(surface_pressure['High'] & velocity['Intermediate'] & dsurface_pressure['0'], velocity_variation['St']),
ctrl.Rule(surface_pressure['High'] & velocity['High'] & dsurface_pressure['+'], velocity_variation['-']),
ctrl.Rule(surface_pressure['High'] & velocity['Little'] & dsurface_pressure['++'], velocity_variation['St']),
ctrl.Rule(surface_pressure['High'] & velocity['Intermediate'] & dsurface_pressure['--'], velocity_variation['+']),
ctrl.Rule(surface_pressure['High'] & velocity['High'] & dsurface_pressure['-'], velocity_variation['+']),
ctrl.Rule(surface_pressure['High'] & velocity['Little'] & dsurface_pressure['0'], velocity_variation['St']),
ctrl.Rule(surface_pressure['High'] & velocity['Intermediate'] & dsurface_pressure['+'], velocity_variation['-']),
ctrl.Rule(surface_pressure['High'] & velocity['High'] & dsurface_pressure['++'], velocity_variation['-'])]
SF3_ctrl = ctrl.ControlSystem(SF3_rules)
SF3 = ctrl.ControlSystemSimulation(SF3_ctrl)
input_velocity_fuzz = input_fuzz(velocity, input_TC_velocity)
input_surface_pressure_fuzz = input_fuzz(surface_pressure, input_surface_pressure)
input_dsurface_pressure_fuzz = input_fuzz(dsurface_pressure, input_dsurface_pressure)
print('Velocity fuzz')
print(input_velocity_fuzz)
print('Pressure fuzz')
print(input_surface_pressure_fuzz)
print('dPressure fuzz')
print(input_dsurface_pressure_fuzz)
IRR = IRR_3var(SF3_rules,input_surface_pressure_fuzz, input_velocity_fuzz, input_dsurface_pressure_fuzz)
print(IRR)
declenchement = IRR.min(axis=1)
print(declenchement)
csq_SF3 = {} # variable de type dictionnaire
for i in range(0, len(SF3_rules)): # on initialise à 0 pour chaque règle
csq_SF3[str(SF3_rules[i].consequent)] = 0
for i in range(0, len(SF3_rules)):
csq_i = str(SF3_rules[i].consequent)
csq_SF3[csq_i] = max(csq_SF3[csq_i], declenchement[i]) # Comme dans le TP6
print("Conséquences SF3 :", csq_SF3)
def SF4_compute(input_actu,input_ant):
tendance_actuelle = ctrl.Antecedent(np.arange(-90, 90, 0.1), 'Angle calcul')
tendance_antecedents = ctrl.Antecedent(np.arange(-90, 90, 0.1), 'Angle évalué par la forme')
angle = ctrl.Consequent(np.arange(-90,90,0.1),'Prédiction courbature')
tendance_actuelle['Courbé Gauche Fort'] = fuzz.trapmf(tendance_actuelle.universe, [-90, -90, -60, -45])
tendance_actuelle['Courbé Gauche'] = fuzz.trapmf(tendance_actuelle.universe, [-60, -45, -10, 0])
tendance_actuelle['Linéaire'] = fuzz.trapmf(tendance_actuelle.universe, [-10, 0, 0, 10])
tendance_actuelle['Courbé Droite'] = fuzz.trapmf(tendance_actuelle.universe, [0, 10, 45, 60])
tendance_actuelle['Courbé Droite Fort'] = fuzz.trapmf(tendance_actuelle.universe, [45, 60, 90, 90])
tendance_antecedents['Courbé Gauche Fort'] = fuzz.trapmf(tendance_antecedents.universe, [-90, -90, -60, -40])
tendance_antecedents['Courbé Gauche'] = fuzz.trapmf(tendance_antecedents.universe, [-60, -45, -20, 0])
tendance_antecedents['Linéaire'] = fuzz.trapmf(tendance_antecedents.universe, [-20, -5, 5, 20])
tendance_antecedents['Courbé Droite'] = fuzz.trapmf(tendance_antecedents.universe, [0, 20, 45, 60])
tendance_antecedents['Courbé Droite Fort'] = fuzz.trapmf(tendance_antecedents.universe, [40, 60, 90, 90])
angle['Courbé Gauche Fort'] = fuzz.trapmf(angle.universe, [-90, -90, -60, -40])
angle['Courbé Gauche'] = fuzz.trapmf(angle.universe, [-60, -45, -20, 0])
angle['Linéaire'] = fuzz.trapmf(angle.universe, [-20, -5, 5, 20])
angle['Courbé Droite'] = fuzz.trapmf(angle.universe, [0, 20, 45, 60])
angle['Courbé Droite Fort'] = fuzz.trapmf(angle.universe, [40, 60, 90, 90])
tendance_actuelle.view()
tendance_antecedents.view()
angle.view()
SF4_rules = [ctrl.Rule(tendance_actuelle['Courbé Gauche Fort'] & tendance_antecedents['Courbé Gauche Fort'], angle['Courbé Gauche Fort']),
ctrl.Rule(tendance_actuelle['Courbé Gauche Fort'] & tendance_antecedents['Courbé Gauche'], angle['Courbé Gauche Fort']),
ctrl.Rule(tendance_actuelle['Courbé Gauche Fort'] & tendance_antecedents['Linéaire'], angle['Courbé Gauche']),
ctrl.Rule(tendance_actuelle['Courbé Gauche Fort'] & tendance_antecedents['Courbé Droite'], angle['Courbé Gauche']),
ctrl.Rule(tendance_actuelle['Courbé Gauche Fort'] & tendance_antecedents['Courbé Droite Fort'], angle['Linéaire']),
ctrl.Rule(tendance_actuelle['Courbé Gauche'] & tendance_antecedents['Courbé Gauche Fort'], angle['Courbé Gauche Fort']),
ctrl.Rule(tendance_actuelle['Courbé Gauche'] & tendance_antecedents['Courbé Gauche'], angle['Courbé Gauche']),
ctrl.Rule(tendance_actuelle['Courbé Gauche'] & tendance_antecedents['Linéaire'], angle['Courbé Gauche']),
ctrl.Rule(tendance_actuelle['Courbé Gauche'] & tendance_antecedents['Courbé Droite'], angle['Linéaire']),
ctrl.Rule(tendance_actuelle['Courbé Gauche'] & tendance_antecedents['Courbé Droite Fort'], angle['Courbé Droite']),
ctrl.Rule(tendance_actuelle['Linéaire'] & tendance_antecedents['Courbé Gauche Fort'], angle['Courbé Gauche Fort']),
ctrl.Rule(tendance_actuelle['Linéaire'] & tendance_antecedents['Courbé Gauche'], angle['Courbé Gauche']),
ctrl.Rule(tendance_actuelle['Linéaire'] & tendance_antecedents['Linéaire'], angle['Linéaire']),
ctrl.Rule(tendance_actuelle['Linéaire'] & tendance_antecedents['Courbé Droite'], angle['Courbé Droite']),
ctrl.Rule(tendance_actuelle['Linéaire'] & tendance_antecedents['Courbé Droite Fort'], angle['Courbé Droite Fort']),
ctrl.Rule(tendance_actuelle['Courbé Droite'] & tendance_antecedents['Courbé Gauche Fort'], angle['Courbé Gauche']),
ctrl.Rule(tendance_actuelle['Courbé Droite'] & tendance_antecedents['Courbé Gauche'], angle['Linéaire']),
ctrl.Rule(tendance_actuelle['Courbé Droite'] & tendance_antecedents['Linéaire'], angle['Courbé Droite']),
ctrl.Rule(tendance_actuelle['Courbé Droite'] & tendance_antecedents['Courbé Droite'], angle['Courbé Droite']),
ctrl.Rule(tendance_actuelle['Courbé Droite'] & tendance_antecedents['Courbé Droite Fort'], angle['Courbé Droite Fort']),
ctrl.Rule(tendance_actuelle['Courbé Droite Fort'] & tendance_antecedents['Courbé Gauche Fort'], angle['Linéaire']),
ctrl.Rule(tendance_actuelle['Courbé Droite Fort'] & tendance_antecedents['Courbé Gauche'], angle['Courbé Droite']),
ctrl.Rule(tendance_actuelle['Courbé Droite Fort'] & tendance_antecedents['Linéaire'], angle['Courbé Droite']),
ctrl.Rule(tendance_actuelle['Courbé Droite Fort'] & tendance_antecedents['Courbé Droite'], angle['Courbé Droite Fort']),
ctrl.Rule(tendance_actuelle['Courbé Droite Fort'] & tendance_antecedents['Courbé Droite Fort'], angle['Courbé Droite Fort'])]
SF4_ctrl = ctrl.ControlSystem(SF4_rules)
SF4 = ctrl.ControlSystemSimulation(SF4_ctrl)
input_tendance_actuelle_fuzz = input_fuzz(tendance_actuelle, input_actu)
input_tendance_antecedents_fuzz = input_fuzz(tendance_antecedents, input_ant)
print('Tendance calculée fuzz')
print(input_tendance_actuelle_fuzz)
print('Tendance évaluée fuzz')
print(input_tendance_antecedents_fuzz)
IRR = IRR_2var(SF4_rules,input_tendance_actuelle_fuzz, input_tendance_antecedents_fuzz)
print(IRR)
declenchement = IRR.min(axis=1)
print(declenchement)
csq_SF4 = {} # variable de type dictionnaire
for i in range(0, len(SF4_rules)): # on initialise à 0 pour chaque règle
csq_SF4[str(SF4_rules[i].consequent)] = 0
for i in range(0, len(SF4_rules)):
csq_i = str(SF4_rules[i].consequent)
csq_SF4[csq_i] = max(csq_SF4[csq_i], declenchement[i]) # Comme dans le TP6
# print("Conséquences SF4 :", csq_SF4)
return(output_fuzz(csq_SF4, angle))
def SF4_conclusion(jour,heure,path):
#Prediction pour 12 heures
date_exact = (jour-1)*24 + heure
lat_pos,lon_pos = position_TC(jour,heure,path)
x0 = deg_to_met(lat_pos)
y0 = deg_to_met(lon_pos)
nc = NetCDFFile(path)
u = np.array(nc.variables['u'][:])
lon = np.array(nc.variables['longitude'][:])
lat = np.array(nc.variables['latitude'][:])
prediction = np.zeros(np.shape(u))
sf4_conc = SF4_compute(entree_SF4(29, 12, path), -15)
for lignes in range(np.shape(sf4_conc)[0]):
a = angle(jour, heure, path) + sf4_conc[lignes][0]
for r in np.arange(0,400000,20000):
xo,yo = polar_to_cart(r,a)
x = met_to_deg(xo + x0)
y = met_to_deg(yo + y0)
idx_lon, idx_lat = xy_to_indx_lonlat(y, x, lon, lat)
prediction[date_exact,idx_lat,idx_lon] = sf4_conc[lignes][1]
# plot_array(prediction[date_exact, :, :], lon, lat)
# # plt.plot(posy,posx,ms=5, marker='o', markeredgecolor='red')
# plt.show()
def plotnc():
# Extraction des tableaux de données:
lat = nc.variables['latitude'][:]
lon = nc.variables['longitude'][:]
nc.close()
# Création de la map
map = Basemap(width=5000000, height=3500000,
resolution='l', projection='cyl',
llcrnrlon=lon.min(), llcrnrlat=lat.min(), urcrnrlon=lon.max(), urcrnrlat=lat.max(),
lat_0=lat.mean(),
lon_0=lon.mean())
lons, lats = np.meshgrid(lon, lat)
xi, yi = map(lons, lats)
map.drawmapboundary(fill_color='aqua')
map.fillcontinents(color='coral', lake_color='aqua')
map.drawcoastlines()
parallels = np.arange(lat.min(), lat.max(), 5.) # make latitude lines every 5 degrees from xx to xx
meridians = np.arange(lon.min(), lat.min(), 5.) # make longitude lines every 5 degrees from xx to xx
map.drawparallels(parallels, labels=[1, 0, 0, 0], fontsize=5)
map.drawmeridians(meridians, labels=[0, 0, 0, 1], fontsize=5)
# Création des données en couleur
cs = map.pcolor(xi, yi, np.squeeze(prediction[date_exact, :, :]), vmin=prediction.min(), vmax=prediction.max())
cbar = map.colorbar(cs, location='bottom', pad=0.2, )
plotnc()
plt.show()
SF3_compute(50,99000,-1000)Editor is loading...