Standard particle velocity update according to the equation:

    :math:`v_{ij}(t+1) &= \\omega v_{ij}(t) + \
    c_1 r_{1j}(t)[y_{ij}(t) - x_{ij}(t)]\\:+ \
    c_2 r_{2j}(t)[\\hat{y}_{ij}(t) - x_{ij}(t)],\\;\\;\
    \\forall\\; j \\in\\; \\{1,...,n\\}`

    If a v_max parameter is supplied (state.params['v_max'] is not None) the
    returned velocity is clamped to v_max.

    Args:
        particle (cipy.algorithms.pso.types.Particle): Particle to update the
            velocity for.
        social (numpy.array): The social best for the
            particle.
        state (cipy.algorithms.pso.types.State): The PSO algorithm state.

    Returns:
        numpy.array: The calculated velocity, clamped to state.params['v_max'].

def std_velocity(particle, social, state):
    """
    Standard particle velocity update according to the equation:

    :math:`v_{ij}(t+1) &= \\omega v_{ij}(t) + \
    c_1 r_{1j}(t)[y_{ij}(t) - x_{ij}(t)]\\:+ \
    c_2 r_{2j}(t)[\\hat{y}_{ij}(t) - x_{ij}(t)],\\;\\;\
    \\forall\\; j \\in\\; \\{1,...,n\\}`

    If a v_max parameter is supplied (state.params['v_max'] is not None) the
    returned velocity is clamped to v_max.

    Args:
        particle (cipy.algorithms.pso.types.Particle): Particle to update the
            velocity for.
        social (numpy.array): The social best for the
            particle.
        state (cipy.algorithms.pso.types.State): The PSO algorithm state.

    Returns:
        numpy.array: The calculated velocity, clamped to state.params['v_max'].
    """
    inertia = state.params['inertia']
    c_1, c_2 = state.params['c_1'], state.params['c_2']
    v_max = state.params['v_max']
    size = particle.position.size

    c1r1 = __acceleration__(state.rng, c_1, size)
    c2r2 = __acceleration__(state.rng, c_2, size)

    velocity = __std_velocity_equation__(inertia, c1r1, c2r2, particle, social)
    return __clamp__(velocity, v_max)