def start_server(decision_func, fitness_evaluator):
    """
        Sets up and starts the Agent server and triggers the start of a run on the
        Breezy server.
    """
    # start the Agent server in other thread
    print("Agent Server starting at {}:{}...".format(opts.agentIp,
                                                     opts.agentPort))
    agentHandler = HTTPServer((opts.agentIp, int(opts.agentPort)),
                              ServerHandler)

    # Set GA functions
    agentHandler._decision_func = decision_func
    agentHandler._fitness_evaluator = fitness_evaluator

    thread = threading.Thread(target=agentHandler.serve_forever)
    thread.daemon = True
    thread.start()
    print("Agent server started.")

    # create a run config for this agent, to run 1 game, send to breezy server
    startData = {"agent": "NEAT Agent", "size": 1}
    # tell breezy server to start the run
    response = requests.post(url="http://{}:{}/run/".format(
        opts.breezyIp, opts.breezyPort),
                             data=json.dumps(startData))

    print(response)
    """
    Declare variables global that you want the agent server to have access to.
    """
    global breezyIp
    global breezyPort

    breezyIp = opts.breezyIp
    breezyPort = opts.breezyPort

    global features

    # serve until told to stop (end of the game)
    global keep_server_up
    keep_server_up = True

    while keep_server_up:
        pass

    stop_game()

    thread.join()

    return fitness_evaluator.final_evaluation()