def METHOD_NAME(self):
    """
    This is the optimization routine.
    """
    # get the initial guess, flatten arrays and scale inputs
    xinit = self.graph.input.getFlat(self.prob.v, scaled=True)
    # Display a little information to check that things are working
    self.msgQueue.put(
        "Starting PSUADE Optimization at {0}".format(
            time.strftime("%a, %d %b %Y %H:%M:%S", time.localtime())
        )
    )
    self.msgQueue.put("\nDecision Variables\n---------------------")
    vals = self.graph.input.getFlat(self.prob.v, scaled=False)
    for i, xn in enumerate(self.prob.v):
        self.msgQueue.put("{0}: {1} scaled: {2}".format(xn, vals[i], xinit[i]))
    self.msgQueue.put("----------------------")
    #
    # Read solver options and handle any special cases of options
    #
    upper = self.options["upper"].value
    lower = self.options["lower"].value
    tol = self.options["tol"].value
    setName = self.options["Results name"].value
    # Increment set name if already used
    setName = self.dat.flowsheet.results.incrimentSetName(setName)
    #
    # Options are all read in so now initialize things
    #
    # Start time for calculation of elapsed time
    start = time.time()
    # Print messages in logs so can know when optimization started
    # and what the popsize is for debugging mostly
    logging.getLogger("foqus." + __name__).info("Starting PSUADE optimization")
    self.msgQueue.put("This doesn't do anything yet")