Source code for itstools.connectv2x.support

""" 
    Support functionalities 
"""

import numpy as np
from .carfollow import U_I

np.random.seed(100)


[docs]def sigmoid(x, A: float = 1, a: float = 50, d: int = 250): """Sigmoid function""" return A * 1 / (1 + np.exp(-(x - d) / a))
[docs]def deriv_sigmoid(x, A: float = 1, a: float = 50, d: int = 250): """Sigmoid derivative function""" return (A / a) * sigmoid(x, 1, a, d) * (1 - sigmoid(x, 1, a, d))
[docs]def pulse_sigmoid(x, A: float = 1, d: int = 250, duration: float = 1000): """Sigmoid pulse minimum duration 1000 meters""" d = max(d, 250) # Minimum effective delay duration = max(duration, 1000) # Minimum effective duration effective_duration = 500 + duration - 1000 # Transforming total duration into effective return sigmoid(x, A, d=d) - sigmoid(x, A, d=d + effective_duration)
[docs]def deriv_pulse_sigmoid(x, A: float = 1, a: float = 50, d: int = 250, duration: float = 1000): """Sigmoid pulse derivative""" d = max(d, 250) # Minimum effective delay duration = max(duration, 1000) # Minimum effective duration effective_duration = 500 + duration - 1000 # Transforming total duration into effective return 20 * deriv_sigmoid(x=x, A=A, a=a, d=d) - 20 * deriv_sigmoid( x=x, A=A, a=a, d=d + effective_duration )
[docs]def speed_pulse(x, v0=U_I, drop: float = 1, delay: int = 250, duration: float = 1000): """ Create a decreasing speed pulse""" return v0 - pulse_sigmoid(x=x, A=drop, d=delay, duration=duration)
[docs]def acceleration_pulse(x, v0=U_I, drop: float = 1, delay: int = 250, duration: float = 1000): """ Create a decreasing acceleration pulse""" return -deriv_pulse_sigmoid(x=x, A=drop, d=delay, duration=duration)
[docs]def speed_drop(x, v0=U_I, drop: float = 1, delay: int = 250): """ Create a decreasing jump on speed""" return v0 - sigmoid(x, A=drop, d=delay)