|
|
import tensorflow as tf |
|
|
from tensorflow.keras.saving import register_keras_serializable |
|
|
from tensorflow.keras import layers, models, backend as K |
|
|
import numpy as np |
|
|
|
|
|
@register_keras_serializable() |
|
|
def cold_temp_penalty(inputs): |
|
|
temp = inputs[:, 0] |
|
|
penalty = tf.where( |
|
|
temp > 295.0, |
|
|
1.0, |
|
|
tf.where( |
|
|
temp < 290.0, |
|
|
0.0, |
|
|
(temp - 290.0) / 5.0 |
|
|
) |
|
|
) |
|
|
return penalty[:, None] |
|
|
|
|
|
@register_keras_serializable() |
|
|
def fire_risk_booster(inputs): |
|
|
temp = inputs[:, 0] |
|
|
humidity = inputs[:, 1] |
|
|
wind = inputs[:, 2] |
|
|
veg = inputs[:, 3] |
|
|
|
|
|
|
|
|
temp_boost = tf.sigmoid((temp - 305.0) * 1.2) |
|
|
humidity_boost = tf.sigmoid((20.0 - humidity) * 0.5) |
|
|
wind_boost = tf.sigmoid((wind - 15.0) * 0.8) |
|
|
veg_boost = tf.sigmoid((veg - 70.0) * 0.5) |
|
|
|
|
|
|
|
|
combined = temp_boost * humidity_boost * wind_boost * veg_boost |
|
|
boost = 1.0 + 0.3 * combined |
|
|
return boost[:, None] |
|
|
|
|
|
@register_keras_serializable() |
|
|
def fire_suppression_mask(inputs): |
|
|
temp = inputs[:, 0] |
|
|
humidity = inputs[:, 1] |
|
|
wind = inputs[:, 2] |
|
|
|
|
|
|
|
|
temp_flag = tf.sigmoid((temp - 293.0) * 1.2) |
|
|
humid_flag = tf.sigmoid((humidity - 50.0) * 0.4) |
|
|
wind_flag = 1 - tf.sigmoid((wind - 5.0) * 0.8) |
|
|
|
|
|
suppression = temp_flag * humid_flag * wind_flag |
|
|
penalty = 1.0 - 0.3 * suppression |
|
|
return penalty[:, None] |
|
|
|
|
|
CUSTOM_OBJECTS = { |
|
|
"cold_temp_penalty": cold_temp_penalty, |
|
|
"fire_risk_booster": fire_risk_booster, |
|
|
"fire_suppression_mask": fire_suppression_mask |
|
|
} |
|
|
|