return False asa = lambda x: asarray(x).reshape(-1, 1) Colors = ['r', 'k', 'b'] R = {} for i, solver in enumerate(solvers): p = NSP(obj, startPoint, maxIter=1700, name='Rzhevsky4 (nVars: ' + str(n) + ')', maxTime=300, maxFunEvals=1e7, color=Colors[i]) p.fTol = 0.5e-20 p.fOpt = 0.0 cb.TMP = 1000 cb.stat = {'dist': [], 'f': [], 'df': []} r = p.solve(solver, iprint=10, xtol=1e-20, ftol=1e-20, debug=0, show=solver == solvers[-1], plot=0, callback=cb) R[solver] = hstack( (asa(cb.stat['dist']), asa(cb.stat['f']), asa(cb.stat['df']))) ''' --------------------------------------------------
cb.stat['dist'].append(tmp) cb.stat['f'].append(p.nEvals['f']) cb.stat['df'].append(-p.nEvals['df']) return False asa = lambda x:asarray(x).reshape(-1, 1) Colors = ['r', 'k','b'] lines = [] R = {} for i, solver in enumerate(solvers): p = NSP(obj, startPoint, fixedVars=(x[0], x[-1]), maxTime = 20, name = 'Rzhevsky7 (nVars: ' + str(n)+')', maxFunEvals=1e7, color = Colors[i]) p._prepare() p.c=None #p.fEnough = 2.08983385058799+4e-10 p.fOpt = obj(T_optPoint) p.fTol = 0.5e-15 cb.TMP = 1000 cb.stat = {'dist':[], 'f':[], 'df':[]} r = p.solve(solver, iprint=10, xtol = 1e-10, ftol = 1e-16, gtol = 1e-10, debug=0, show = solver == solvers[-1], plot = 0, callback = cb) print('objective evals: %d gradient evals: %d ' % (r.evals['f'],r.evals['df'])) print('distance to f*: %0.1e' % (r.ff-p.fOpt)) print('distance to x*: %0.1e' % (norm(asarray(X) - hstack((X[0], p.xk, X[-1]))))) R[solver] = hstack((asa(cb.stat['dist']), asa(cb.stat['f']), asa(cb.stat['df']))) ''' -------------------------------------------------- solver: gsubg problem: rjevsky6 (nVars: 30) type: NSP goal: minimum iter objFunVal log10(MaxResidual/ConTol) 0 2.954e+01 -100.00 OpenOpt Warning: Handling of constraints is not implemented properly for the solver gsubg yet 10 4.002e+00 -100.00 20 2.232e+00 -100.00
solvers = ['ralg', 'amsg2p'] solvers = ['gsubg'] Colors = ['r', 'k','b'] xOpt = 1.0/n def cb(p): tmp = ceil(log10(norm(xOpt - p.xk))) if tmp < cb.TMP: # print 'distance:', tmp, 'itn:', p.iter, 'n_func:', p.nEvals['f'], 'n_grad:', -p.nEvals['df'] cb.TMP = tmp cb.stat['dist'].append(tmp) cb.stat['f'].append(p.nEvals['f']) cb.stat['df'].append(-p.nEvals['df']) return False asa = lambda x:asarray(x).reshape(-1, 1) R = {} lines = [] for i, solver in enumerate(solvers): p = NSP(obj, startPoint, maxIter = 4700, name = 'Rzhevsky3 (nVars: ' + str(n)+')', maxTime = 30000, maxFunEvals=1e7, color = Colors[i]) #p.maxIter = 10#; p.useSparse = False p.fEnough = 1.0e-5 p.fOpt = 1.0e-5 p.fTol = 0.5e-5 cb.TMP = 1000 cb.stat = {'dist':[], 'f':[], 'df':[]} r = p.manage(solver, iprint=1, xtol = 1e-10, ftol = 1e-10, show = solver == solvers[-1], plot = 0, callback = cb) R[solver] = hstack((asa(cb.stat['dist']), asa(cb.stat['f']), asa(cb.stat['df'])))
def __solver__(self, p): if SMALL_DELTA_X in p.kernelIterFuncs.keys(): p.kernelIterFuncs.pop(SMALL_DELTA_X) if SMALL_DELTA_F in p.kernelIterFuncs.keys(): p.kernelIterFuncs.pop(SMALL_DELTA_F) if self.nspSolver == 'autoselect': nspSolver = 'amsg2p' if p.isUC else 'ralg' else: nspSolver = self.nspSolver # nspSolver = 'ralg' way = 3 if nspSolver == 'ralg' else 2 if way == 1: use2 = False f = lambda x: sum(abs(p.f(x))) def df(x): return dot(p.df(x), sign(p.f(x))) elif way == 2: use2 = True f = lambda x: sum(p.f(x)**2) def df(x): return 2.0*dot(p.f(x), p.df(x)) elif way == 3: use2 = False f = lambda x: max(abs(p.f(x))) def df(x): F = p.f(x) ind = argmax(abs(F)) return p.df(x, ind) * sign(F[ind]) FTOL = p.ftol**2 if use2 else p.ftol def iterfcn(*args, **kwargs): p2.primalIterFcn(*args, **kwargs) p.xk = p2.xk.copy() Fk = norm(p.f(p.xk), inf) p.rk = p.getMaxResidual(p.xk) #TODO: ADD p.rk if p.nEvals['f'] > p.maxFunEvals: p.istop = p2.istop = IS_MAX_FUN_EVALS_REACHED elif p2.istop!=0: if Fk < FTOL and p.rk < p.contol: p.istop = 15 msg_contol = '' if p.isUC else 'and contol ' p.msg = 'solution with required ftol ' + msg_contol+ 'has been reached' else: p.istop = p2.istop p.iterfcn() return p.istop p2 = NSP(f, p.x0, df=df, xtol = p.xtol/1e16, gtol = p.gtol/1e16,\ A=p.A, b=p.b, Aeq=p.Aeq, beq=p.beq, lb=p.lb, ub=p.ub, \ maxFunEvals = p.maxFunEvals, fEnough = FTOL, maxIter=p.maxIter, iprint = -1, \ maxtime = p.maxTime, maxCPUTime = p.maxCPUTime, noise = p.noise, fOpt = 0.0) if p.userProvided.c: p2.c, p2.dc = p.c, p.dc if p.userProvided.h: p2.h, p2.dh = p.h, p.dh p2.primalIterFcn, p2.iterfcn = p2.iterfcn, iterfcn if p.debug: p2.iprint = 1 if nspSolver == 'ralg': if p.isUC: p2.ftol = p.ftol / 1e16 else: p2.ftol = 0.0 else: p2.ftol = 0.0 p2.xtol = 0.0 p2.gtol = 0.0 if use2: p2.fTol = 0.5*p.ftol ** 2 else: p2.fTol = 0.5*p.ftol r2 = p2.solve(nspSolver) #xf = fsolve(p.f, p.x0, fprime=p.df, xtol = p.xtol, maxfev = p.maxFunEvals) xf = r2.xf p.xk = p.xf = xf p.fk = p.ff = asfarray(norm(p.f(xf), inf)).flatten()
cb.stat['f'].append(p.nEvals['f']) cb.stat['df'].append(-p.nEvals['df']) return False asa = lambda x: asarray(x).reshape(-1, 1) R = {} for i, solver in enumerate(solvers): p = NSP(obj, startPoint, maxIter=17000, name='Rzhevsky1 (nVars: ' + str(n) + ')', maxTime=300, maxFunEvals=1e7, color=Colors[i]) p.fTol = 0.5e-10 p.fEnough = -0.84140833459 p.fOpt = -0.841408334596 cb.TMP = 1000 cb.stat = {'dist': [], 'f': [], 'df': []} r = p.solve(solver, iprint=10, ftol=1e-15, xtol=1e-10, debug=0, show=solver == solvers[-1], plot=0, callback=cb) R[solver] = hstack( (asa(cb.stat['dist']), asa(cb.stat['f']), asa(cb.stat['df']))) '''
solvers = [oosolver('amsg2p', gamma=2.0)] Colors = ['r', 'k', 'b'] lines = [] R = {} for Tol_p in range(-10, -31, -1): #print('Tol = 10^%d' % Tol_p) for i, solver in enumerate(solvers): p = NSP(obj, startPoint, maxIter=1700, name='Rzhevsky6 (nVars: ' + str(n) + ')', maxTime=300, maxFunEvals=1e7, color=Colors[i]) p.fOpt = 0.0 p.fTol = 10**Tol_p cb.TMP = 1000 cb.stat = {'dist': [], 'f': [], 'df': []} r = p.solve(solver, iprint=-1, xtol=0, ftol=0, callback=cb) R[solver] = hstack( (asa(cb.stat['dist']), asa(cb.stat['f']), asa(cb.stat['df']))) print('itn df dx %d %0.1e %0.1e' % (-r.evals['df'], r.ff - p.fOpt, norm(p.xk - 1.0))) # print('objective evals: %d gradient evals: %d ' % (r.evals['f'],r.evals['df'])) # print('distance to f*: %0.1e' % (r.ff-p.fOpt)) # print('distance to x*: %0.1e' % norm(p.xk-1.0)) ''' -------------------------------------------------- solver: gsubg problem: rjevsky6 (nVars: 15) type: NSP goal: minimum iter objFunVal 0 2.408e+02
from numpy import arange from numpy.linalg import norm from openopt import NSP, oosolver from FuncDesigner import * N = 300 x = oovar('x') startPoint = {x: 1 + 1.0 / arange(1, N)} S = 1e4 ** (1.0/arange(1, N)) #f = abs(x[0]) + S * abs(x[1]) + S**2 * abs(x[2]) f = sum(abs(x)*S) solvers = [oosolver('ralg')] solvers = [oosolver('gsubg', addASG = True)] #solvers = [oosolver('gsubg', zhurb = 20, dual=False)] #solvers = ['ipopt'] #solvers = ['slmvm2'] #solvers = ['mma'] for solver in solvers: p = NSP(f, startPoint, maxIter = 10000, maxTime = 15000, maxFunEvals=1e7) p.fEnough = 1.5e1 p.fTol = 1.0e1 #p.constraints = (y > 5)(tol=1e-4) #x>1e-1 #[2*y<sin(arange(N))] #r = p.solve(solver, iprint=10, xtol = 1e-36, ftol = 1e-16, show = solver == solvers[-1]) r = p.solve(solver, iprint=10, xtol = 1e-16, ftol = 1e-6, show = solver == solvers[-1])
if tmp < cb.TMP: # print 'distance:', tmp, 'itn:', p.iter, 'n_func:', p.nEvals['f'], 'n_grad:', -p.nEvals['df'] cb.TMP = tmp cb.stat['dist'].append(tmp) cb.stat['f'].append(p.nEvals['f']) cb.stat['df'].append(-p.nEvals['df']) return False asa = lambda x:asarray(x).reshape(-1, 1) Colors = ['r', 'k','b'] R = {} for i, solver in enumerate(solvers): p = NSP(obj, startPoint, maxIter = 1700, name = 'Rzhevsky4 (nVars: ' + str(n)+')', maxTime = 300, maxFunEvals=1e7, color = Colors[i]) p.fTol = 0.5e-20 p.fOpt = 0.0 cb.TMP = 1000 cb.stat = {'dist':[], 'f':[], 'df':[]} r = p.solve(solver, iprint=10, xtol = 1e-20, ftol = 1e-20, debug=0, show = solver == solvers[-1], plot = 0, callback = cb) R[solver] = hstack((asa(cb.stat['dist']), asa(cb.stat['f']), asa(cb.stat['df']))) ''' -------------------------------------------------- solver: gsubg problem: rjevsky3 (nVars: 10) type: NSP goal: minimum iter objFunVal 0 9.789e-01 10 5.155e-03 12 2.168e-03 istop: 16 (optimal solution wrt required fTol has been obtained) Solver: Time Elapsed = 1.1 CPU Time Elapsed = 1.1 objFunValue: 0.002167903
cb.stat['dist'].append(tmp) cb.stat['f'].append(p.nEvals['f']) cb.stat['df'].append(-p.nEvals['df']) return False asa = lambda x:asarray(x).reshape(-1, 1) solvers = ['ralg', 'amsg2p', 'gsubg'] solvers = [oosolver('amsg2p', gamma = 2.0)] Colors = ['r', 'k','b'] lines = [] R = {} for Tol_p in range(-10, -31, -1): #print('Tol = 10^%d' % Tol_p) for i, solver in enumerate(solvers): p = NSP(obj, startPoint, maxIter = 1700, name = 'Rzhevsky6 (nVars: ' + str(n)+')', maxTime = 300, maxFunEvals=1e7, color = Colors[i]) p.fOpt = 0.0 p.fTol = 10**Tol_p cb.TMP = 1000 cb.stat = {'dist':[], 'f':[], 'df':[]} r = p.solve(solver, iprint=-1, xtol = 0, ftol = 0, callback = cb) R[solver] = hstack((asa(cb.stat['dist']), asa(cb.stat['f']), asa(cb.stat['df']))) print('itn df dx %d %0.1e %0.1e' % (-r.evals['df'], r.ff-p.fOpt, norm(p.xk-1.0))) # print('objective evals: %d gradient evals: %d ' % (r.evals['f'],r.evals['df'])) # print('distance to f*: %0.1e' % (r.ff-p.fOpt)) # print('distance to x*: %0.1e' % norm(p.xk-1.0)) ''' -------------------------------------------------- solver: gsubg problem: rjevsky6 (nVars: 15) type: NSP goal: minimum iter objFunVal 0 2.408e+02 1 9.712e+01 2 5.315e+01
from numpy import arange from numpy.linalg import norm from openopt import NSP, oosolver from FuncDesigner import * N = 100000 x = oovar('x') startPoint = {x: 1 + 1.0 / arange(1, N+1)} S = 1e4 ** (1.0/arange(1, N+1)) arr = sin(arange(N)) f = sum((x-arr)**2 * S) / 1e4 solvers = [oosolver('ralg')] solvers = [oosolver('gsubg', dual=True, zhurb = 50)] #solvers = [oosolver('gsubg', zhurb = 20, dual=False)] #solvers = ['ipopt'] #solvers = ['slmvm2'] #solvers = ['mma'] for solver in solvers: p = NSP(f, startPoint, maxIter = 10000, maxTime = 15000, maxFunEvals=1e7) p.fEnough = 1.5e-1 p.fTol = 5.0e-1 #p.constraints = (y > 5)(tol=1e-4) #x>1e-1 #[2*y<sin(arange(N))] #r = p.solve(solver, iprint=10, xtol = 1e-36, ftol = 1e-16, show = solver == solvers[-1]) r = p.manage(solver, iprint=1, xtol = 1e-8, ftol = 1e-7, show = solver == solvers[-1])