Ejemplo n.º 1
0
def prepare_fun(mgr, constraints, default, call_log):
    """Creates the objective function and wraps it with domain constraints
    and an existing call log, if applicable."""
    func = optunity.wrap_constraints(comm.make_piped_function(mgr), default, **constraints)
    if call_log:
        func = optunity.wrap_call_log(func, call_log)
    else:
        func = functions.logged(func)
    return func
Ejemplo n.º 2
0
def prepare_fun(mgr, constraints, default, call_log):
    """Creates the objective function and wraps it with domain constraints
    and an existing call log, if applicable."""
    func = optunity.wrap_constraints(comm.make_piped_function(mgr), default,
                                     **constraints)
    if call_log:
        func = optunity.wrap_call_log(func, call_log)
    else:
        func = functions.logged(func)
    return func
Ejemplo n.º 3
0
def main():

    # open a socket if port [+ host] specified in commandline args
    if len(sys.argv) > 1:
        if sys.argv[1] == 'server':
            port, server_socket = comm.open_server_socket()
            print(port)
            ## flush is needed for R pipe():
            sys.stdout.flush()
            comm.accept_server_connection(server_socket)

        else:
            try:
                port = int(sys.argv[1])
            except ValueError as e:
                print('Invalid socket port: ' + str(e))
                sys.exit(1)
            if len(sys.argv) > 2:
                host = sys.argv[2]
            else:
                host = 'localhost'
            comm.open_socket(port, host)

    startup_json = comm.receive()

    try:
        startup_msg = comm.json_decode(startup_json)

        if 'manual' in startup_msg:
            solver_name = startup_msg['manual']
            manual_request(solver_name)

        elif 'generate_folds' in startup_msg:
            import optunity.cross_validation as cv
            cv_opts = startup_msg['generate_folds']
            fold_request(cv_opts)

        elif 'make_solver' in startup_msg:
            solver_config = startup_msg['make_solver']
            replacements = comm._find_replacements(_illegal_keys,
                                                   solver_config)
            solver_config = comm._replace_keys(solver_config, replacements)
            make_solver(solver_config)

        elif 'maximize' in startup_msg or 'minimize' in startup_msg:
            if startup_msg.get('maximize', False):
                kwargs = startup_msg['maximize']
                solve_fun = optunity.maximize
            else:
                kwargs = startup_msg['minimize']
                solve_fun = optunity.minimize

            max_or_min(solve_fun, kwargs, startup_msg.get('constraints', {}),
                       startup_msg.get('default', None),
                       startup_msg.get('call_log', None))

        elif 'optimize' in startup_msg:
            max_evals = startup_msg['optimize'].get('max_evals', 0)
            maximize = startup_msg['optimize'].get('maximize', True)

            # sanity check
            if not 'solver' in startup_msg:
                msg = {'error_msg': 'No solver specified in startup message.'}
                comm.send(comm.json_encode(msg))
                print(startup_msg, file=sys.stderr)
                exit(1)

            optimize(startup_msg['solver'], startup_msg.get('constraints', {}),
                     startup_msg.get('default', None),
                     startup_msg.get('call_log', None), maximize, max_evals)

        else:  # solving a given problem
            mgr = comm.EvalManager()
            func = optunity.wrap_constraints(
                comm.make_piped_function(mgr),
                startup_msg.get('default', None),
                **startup_msg.get('constraints', {}))

            if startup_msg.get('call_log', False):
                func = optunity.wrap_call_log(func, startup_msg['call_log'])
            else:
                func = functions.logged(func)

            maximize = startup_msg.get('maximize', True)

            # instantiate solver
            try:
                solver = optunity.make_solver(startup_msg['solver'],
                                              **startup_msg['config'])
            except (ValueError, KeyError):
                msg = {'error_msg': 'Unable to instantiate solver.'}
                comm.send(comm.json_encode(msg))
                print(startup_msg, file=sys.stderr)
                exit(1)
            except EOFError:
                msg = {'error_msg': 'Broken pipe.'}
                comm.send(comm.json_encode(msg))
                exit(1)

            # solve and send result
            try:
                solution, rslt = optunity.optimize(solver,
                                                   func,
                                                   maximize,
                                                   pmap=mgr.pmap)
            except EOFError:
                msg = {'error_msg': 'Broken pipe.'}
                comm.send(comm.json_encode(msg))
                exit(1)

            result = rslt._asdict()
            result['solution'] = solution
            result_json = comm.json_encode(result)
            comm.send(result_json)
            exit(0)

    except (ValueError, TypeError, AttributeError) as e:
        msg = {'error_msg': str(e)}
        comm.send(comm.json_encode(msg))
        exit(1)
Ejemplo n.º 4
0
def main():

    # open a socket if port [+ host] specified in commandline args
    if len(sys.argv) > 1:
        if sys.argv[1] == 'server':
            port, server_socket = comm.open_server_socket()
            print(port)
            ## flush is needed for R pipe():
            sys.stdout.flush()
            comm.accept_server_connection(server_socket)

        else:
            try:
                port = int(sys.argv[1])
            except ValueError as e:
                print('Invalid socket port: ' + str(e))
                sys.exit(1)
            if len(sys.argv) > 2:
                host = sys.argv[2]
            else:
                host = 'localhost'
            comm.open_socket(port, host)

    startup_json = comm.receive()

    try:
        startup_msg = comm.json_decode(startup_json)

        if 'manual' in startup_msg:
            solver_name = startup_msg['manual']
            manual_request(solver_name)

        elif 'generate_folds' in startup_msg:
            import optunity.cross_validation as cv
            cv_opts = startup_msg['generate_folds']
            fold_request(cv_opts)

        elif 'make_solver' in startup_msg:
            solver_config = startup_msg['make_solver']
            replacements = comm._find_replacements(_illegal_keys, solver_config)
            solver_config = comm._replace_keys(solver_config, replacements)
            make_solver(solver_config)

        elif 'maximize' in startup_msg or 'minimize' in startup_msg:
            if startup_msg.get('maximize', False):
                kwargs = startup_msg['maximize']
                solve_fun = optunity.maximize
            else:
                kwargs = startup_msg['minimize']
                solve_fun = optunity.minimize

            max_or_min(solve_fun, kwargs,
                    startup_msg.get('constraints', {}),
                    startup_msg.get('default', None),
                    startup_msg.get('call_log', None))

        elif 'optimize' in startup_msg:
            max_evals = startup_msg['optimize'].get('max_evals', 0)
            maximize = startup_msg['optimize'].get('maximize', True)

            # sanity check
            if not 'solver' in startup_msg:
                msg = {'error_msg': 'No solver specified in startup message.'}
                comm.send(comm.json_encode(msg))
                print(startup_msg, file=sys.stderr)
                exit(1)

            optimize(startup_msg['solver'],
                    startup_msg.get('constraints', {}),
                    startup_msg.get('default', None),
                    startup_msg.get('call_log', None),
                    maximize, max_evals)

        else:  # solving a given problem
            mgr = comm.EvalManager()
            func = optunity.wrap_constraints(comm.make_piped_function(mgr),
                                            startup_msg.get('default', None),
                                            **startup_msg.get('constraints', {})
                                            )

            if startup_msg.get('call_log', False):
                func = optunity.wrap_call_log(func, startup_msg['call_log'])
            else:
                func = functions.logged(func)

            maximize = startup_msg.get('maximize', True)

            # instantiate solver
            try:
                solver = optunity.make_solver(startup_msg['solver'],
                                            **startup_msg['config'])
            except (ValueError, KeyError):
                msg = {'error_msg': 'Unable to instantiate solver.'}
                comm.send(comm.json_encode(msg))
                print(startup_msg, file=sys.stderr)
                exit(1)
            except EOFError:
                msg = {'error_msg': 'Broken pipe.'}
                comm.send(comm.json_encode(msg))
                exit(1)

            # solve and send result
            try:
                solution, rslt = optunity.optimize(solver, func, maximize,
                                                pmap=mgr.pmap)
            except EOFError:
                msg = {'error_msg': 'Broken pipe.'}
                comm.send(comm.json_encode(msg))
                exit(1)

            result = rslt._asdict()
            result['solution'] = solution
            result_json = comm.json_encode(result)
            comm.send(result_json)
            exit(0)

    except (ValueError, TypeError, AttributeError) as e:
        msg = {'error_msg': str(e)}
        comm.send(comm.json_encode(msg))
        exit(1)