corrected "penalty" name to "constraint violation" and introduced options for custom penalty functions