Source code for opt.utils_logarithmic_barrier

import numpy as np
import matplotlib.pyplot as plt

[docs]def log_barrier_aux_eval_constraints(eval_f_const_inequality): """ Auxiliary function for evaluation of constraint inequalities in logarithmic barrier """ #get values that are nonpositive through indexes idx_zeros = np.logical_and(eval_f_const_inequality < np.nextafter(0,1), eval_f_const_inequality > -np.nextafter(0,1)) idx_negative = eval_f_const_inequality < 0 idx = np.logical_or(idx_zeros, idx_negative) #eval constraint inequality functions #next line produces warning if a value of constraint #is nonpositive eval_f_const_inequality = np.log(eval_f_const_inequality) #assign large negative value for constraints #that have values negative or equal to 0 eval_f_const_inequality[idx] = -1e10 return eval_f_const_inequality
[docs]def constraints_inequalities_funcs_generator(constraints_inequalities): """ Generator for functional form of inequalities. For every example this function produces different functions. """ for k, v in constraints_inequalities.items(): yield v
[docs]def constraints_inequalities_funcs_eval(x, constraints_inequalities): """ Auxiliary function that build a numpy array with constraints evaluated. Useful when calling log_barrier_aux_eval_constraints func. """ const_ineq_funcs_eval = np.array([const(x) for const in \ constraints_inequalities_funcs_generator(constraints_inequalities)]) return const_ineq_funcs_eval
[docs]def phi(x, constraints_inequalities): """ Implementation of phi function for logarithmic barrier. """ constraint_ineq_funcs_eval = -constraints_inequalities_funcs_eval(x,constraints_inequalities) log_barrier_const_eval = log_barrier_aux_eval_constraints(constraint_ineq_funcs_eval) return -np.sum(log_barrier_const_eval)