Exemplo n.º 1
0
    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'])))
'''
--------------------------------------------------
Exemplo n.º 2
0
        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 
Exemplo n.º 3
0
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'])))
Exemplo n.º 4
0
    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()
Exemplo n.º 5
0
        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'])))
'''
Exemplo n.º 6
0
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 
Exemplo n.º 7
0
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])
    

Exemplo n.º 8
0
    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
Exemplo n.º 9
0
        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 
Exemplo n.º 10
0
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])