I am using NLOpt in a python application and am having problems when setting an equality constraint when using LN_AUGLAG.
If I use LN_COBYLA, optimization works perfectly. However, if I use LN_AUGLAG and set LN_COBYLA as the local optimizer, the result is the exact same as my initial guess. My goal is to use experiment with other optimization algorithms (for example, LN_SBPLX), and use AUGLAG to provide the quality constraint. Can anyone help determine why the equality constraint causes AUGLAG to fail? Below is sample code showing how I use NLOpt. ################################################################################### # CODE Sample: args = ( ... ) kw = { ... } # Optimization Function for NLOpt def optfunc(x,grad): # Big complex function which calculates a single return value: val = model_p_mixer(x,*args,**kw) return val # Constraint Function for NLOpt # x -> percentage of total content for each component # sum(x) == 100 % def opt_constraint(x, grad): val = float(100.0 - x.sum()) return val gopt = nlopt.opt(nlopt.LN_AUGLAG, len(guess)) lopt = nlopt.opt(nlopt.LN_COBYLA, len(guess)) gopt.set_min_objective(optfunc) gopt.set_lower_bounds([98.62, 0.0, 0.0]) gopt.set_upper_bounds([99.5, 1.0, 1.0]) gopt.add_equality_constraint(opt_constraint, 0.001) # Set tolerances to determine when the optimizer stops looking for solutions gopt.set_xtol_abs(1E-6) gopt.set_ftol_abs(0.001) lopt.set_xtol_abs(1E-6) lopt.set_ftol_abs(0.001) # Set initial step size gopt.set_initial_step(0.01) gopt.set_maxtime(8.0) gopt.set_local_optimizer(lopt) # Run the optimizer mix = gopt.optimize([99.0, 0.5, 0.5]) # Initial Guess : [99.0, 0.5 , 0.5 ] # Expected Result: [99.2, 0.35, 0.45] # Actual Result: [99.0, 0.5 , 0.5 ] ################################################################################### Thank you, David
_______________________________________________ NLopt-discuss mailing list NLopt-discuss@ab-initio.mit.edu http://ab-initio.mit.edu/cgi-bin/mailman/listinfo/nlopt-discuss