Exemplo n.º 1
0
def eval_prox(prox_function_type, prob, v_map, lam=1, epigraph=False):
    """Evaluate a single proximal operator."""

    problem = compiler.compile_problem(cvxpy_expr.convert_problem(prob))
    validate.check_sum_of_prox(problem)

    # Get the first non constant objective term
    if len(problem.objective.arg) != 1:
        raise ProblemError("prox does not have single f", problem)

    if problem.constraint:
        raise ProblemError("prox has constraints", problem)

    f_expr = problem.objective.arg[0]
    if (f_expr.expression_type != Expression.PROX_FUNCTION or
        f_expr.prox_function.prox_function_type != prox_function_type or
        f_expr.prox_function.epigraph != epigraph):
        raise ProblemError("prox did not compile to right type", problem)

    v_bytes_map = {cvxpy_expr.variable_id(var):
                   numpy.array(val, dtype=numpy.float64).tobytes(order="F")
                   for var, val in v_map.iteritems()}

    values = _solve.eval_prox(
        f_expr.SerializeToString(),
        lam,
        constant.global_data_map,
        v_bytes_map)

    cvxpy_solver.set_solution(prob, values)
Exemplo n.º 2
0
def transform_problem(problem, params):
    validate.check_sum_of_prox(problem)
    graph = build_graph(problem)

    if not graph.nodes(VARIABLE):
        return problem

    for f in GRAPH_TRANSFORMS:
        f(graph)
        log_debug(
            lambda f, graph: "%s:\n%s" %
            (f.__name__, tree_format.format_problem(graph.problem)), f, graph)
    return graph.problem
Exemplo n.º 3
0
def format_problem(problem):
    name_map = NameMap()
    validate.check_sum_of_prox(problem)

    output = "objective:\n"
    output += ("  add(\n    " + ",\n    ".join(
        format_expr(arg, name_map) for arg in problem.objective.arg) + ")\n")

    if problem.constraint:
        output += "\nconstraints:\n"
        output += "".join("  " + format_expr(constr, name_map) + "\n"
                          for constr in problem.constraint)

    return output
Exemplo n.º 4
0
def transform_problem(problem):
    validate.check_sum_of_prox(problem)
    graph = build_graph(problem)
    if not graph.nodes(VARIABLE):
        return problem

    for f in GRAPH_TRANSFORMS:
        f(graph)
        log_debug(
            lambda f, graph:
            "%s:\n%s" %
            (f.__name__,
             tree_format.format_problem(graph.problem)),
            f, graph)
    return graph.problem
Exemplo n.º 5
0
def format_problem(problem):
    name_map = NameMap()
    validate.check_sum_of_prox(problem)

    output = "objective:\n"
    output += ("  add(\n    " +
               ",\n    ".join(
                   format_expr(arg, name_map) for arg in problem.objective.arg) +
               ")\n")

    if problem.constraint:
        output += "\nconstraints:\n"
        output += "".join("  " + format_expr(constr, name_map) + "\n"
                          for constr in problem.constraint)

    return output
Exemplo n.º 6
0
def eval_prox_impl(prob,
                   v_map,
                   lam=1,
                   prox_function_type=None,
                   epigraph=False):
    """Evaluate a single proximal operator."""

    problem = compiler.compile_problem(cvxpy_expr.convert_problem(prob))
    validate.check_sum_of_prox(problem)

    # Get the first non constant objective term
    if len(problem.objective.arg) != 1:
        raise ProblemError("prox does not have single f", problem)

    if problem.constraint:
        raise ProblemError("prox has constraints", problem)

    f_expr = problem.objective.arg[0]
    if f_expr.expression_type != Expression.PROX_FUNCTION:
        raise ProblemError("prox did not compile to right type", problem)

    if prox_function_type is not None and (
            f_expr.prox_function.prox_function_type != prox_function_type
            or f_expr.prox_function.epigraph != epigraph):
        raise ProblemError("prox did not compile to right type", problem)

    v_bytes_map = {
        cvxpy_expr.variable_id(var):
        numpy.array(val, dtype=numpy.float64).tobytes(order="F")
        for var, val in v_map.iteritems()
    }

    values = _solve.eval_prox(f_expr.SerializeToString(), lam,
                              problem.expression_data(), v_bytes_map)

    cvxpy_solver.set_solution(prob, values)
Exemplo n.º 7
0
def transform_problem(problem):
    validate.check_sum_of_prox(problem)
    constrs = []
    obj = transform_expr(problem.objective, constrs)
    return expression.Problem(objective=obj, constraint=constrs)