def solve_problem(problem_instance): np.random.seed(0) problem = problem_instance.create() problem.solve(solver=cp.SCS) obj0 = problem.objective.value logging.debug(problem_instance.name) cvxpy_solver.solve( problem, rel_tol=REL_TOL.get(problem_instance.name, 1e-3)) obj1 = problem.objective.value # A lower objective is okay assert obj1 <= obj0 + 1e-2*abs(obj0) + 1e-4, "%.2e vs. %.2e" % (obj1, obj0)
def benchmark_epsilon(cvxpy_prob, **kwargs): if args.iterations: kwargs["abs_tol"] = 1e-8 kwargs["rel_tol"] = 1e-8 kwargs["max_iterations"] = args.iterations else: kwargs["max_iterations"] = 50000 if "epsilon_eps" in cvxpy_prob.kwargs: kwargs["abs_tol"] = cvxpy_prob.kwargs["epsilon_eps"] kwargs["rel_tol"] = cvxpy_prob.kwargs["epsilon_eps"]/100. cvxpy_solver.solve(cvxpy_prob, **kwargs) if args.debug: print_constraints(cvxpy_prob) return cvxpy_prob.objective.value
def solve_problem(problem_instance, params): np.random.seed(0) problem = problem_instance.create() if isinstance(problem, tuple): problem, f_eval = problem logging.debug(problem_instance.name) problem.solve(solver=cp.SCS) obj0 = problem.objective.value # per-instance rel_tol params["rel_tol"] = REL_TOL.get(problem_instance.name, 1e-3) cvxpy_solver.solve(problem, **params) obj1 = problem.objective.value # A lower objective is okay assert obj1 <= obj0 + 1e-2*abs(obj0) + 1e-4, "%.2e vs. %.2e" % (obj1, obj0)
def solve_problem(problem_instance, params): np.random.seed(0) problem = problem_instance.create() if isinstance(problem, tuple): problem, f_eval = problem logging.debug(problem_instance.name) problem.solve(solver=cp.SCS) obj0 = problem.objective.value # per-instance rel_tol params["rel_tol"] = REL_TOL.get(problem_instance.name, 1e-3) cvxpy_solver.solve(problem, **params) obj1 = problem.objective.value # A lower objective is okay assert obj1 <= obj0 + 1e-2 * abs(obj0) + 1e-4, "%.2e vs. %.2e" % (obj1, obj0)
def run_atom(atom, problem, obj_val, solver): assert problem.is_dcp() print(problem.objective) print(problem.constraints) if check_solver(problem, solver): print("solver", solver) tolerance = SOLVER_TO_TOL[solver] if solver == EPSILON: status, result = cvxpy_solver.solve( problem, rel_tol=1e-3, max_iterations=10000) else: result = problem.solve(solver=solver, verbose=False) status = problem.status if status is OPTIMAL: print(result) print(obj_val) assert( -tolerance <= (result - obj_val)/(1+np.abs(obj_val)) <= tolerance ) else: assert False, "failed"
def run_atom(atom, problem, obj_val, solver): assert problem.is_dcp() print((problem.objective)) print((problem.constraints)) if check_solver(problem, solver): print(("solver", solver)) tolerance = SOLVER_TO_TOL[solver] if solver == EPSILON: status, result = cvxpy_solver.solve(problem, rel_tol=1e-3, max_iterations=10000) else: result = problem.solve(solver=solver, verbose=False) status = problem.status if status is OPTIMAL: print(result) print(obj_val) assert (-tolerance <= (result - obj_val) / (1 + np.abs(obj_val)) <= tolerance) else: assert False, "failed"
def benchmark_epsilon(cvxpy_prob): cvxpy_solver.solve(cvxpy_prob, rel_tol=1e-2, abs_tol=1e-4) return cvxpy_prob.objective.value