Skip to content

ValueError: H contains Nan/Inf values #23

Open
@MLopez-Ibanez

Description

@MLopez-Ibanez

Reproducible with the latest version in github. See code below for how to reproduce it.

/home/manu/.local/lib/python3.8/site-packages/pybobyqa/model.py:252: LinAlgWarning: Diagonal number 2 is exactly zero. Singular matrix.
  self.lu, self.piv = LA.lu_factor(A)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
~/.local/lib/python3.8/site-packages/trustregion/interface.py in _to_array(X, lbl)
     13     try:
---> 14         return np.asarray_chkfinite(X)
     15     except ValueError:

~/.local/lib/python3.8/site-packages/numpy/lib/function_base.py in asarray_chkfinite(a, dtype, order)
    487     if a.dtype.char in typecodes['AllFloat'] and not np.isfinite(a).all():
--> 488         raise ValueError(
    489             "array must not contain infs or NaNs")

ValueError: array must not contain infs or NaNs

During handling of the above exception, another exception occurred:

ValueError                                Traceback (most recent call last)
<ipython-input-1-9226e210f113> in <module>
----> 1 import codecs, os;__pyfile = codecs.open('''/tmp/pygzTqh2''', encoding='''utf-8''');__code = __pyfile.read().encode('''utf-8''');__pyfile.close();os.remove('''/tmp/pygzTqh2''');exec(compile(__code, '''/home/manu/work/gtoc11/poliastro/src/bobyqa_bug.py''', 'exec'));

~/work/gtoc11/poliastro/src/bobyqa_bug.py in <module>
    341 
    342 np.random.seed(42)
--> 343 result = pybobyqa.solve(fitness, x0 = fitness.x0, bounds = (fitness.lower, fitness.upper),
    344                                 maxfun=1000, seek_global_minimum=True,
    345                                 scaling_within_bounds=True)

~/.local/lib/python3.8/site-packages/pybobyqa/solver.py in solve(objfun, x0, args, bounds, npt, rhobeg, rhoend, maxfun, nsamples, user_params, objfun_has_noise, seek_global_minimum, scaling_within_bounds, do_logging, print_progress)
    809     nx = 0
    810     xmin, fmin, gradmin, hessmin, nsamples_min, nf, nx, nruns, exit_info, diagnostic_info = \
--> 811         solve_main(objfun, x0, args, xl, xu, npt, rhobeg, rhoend, maxfun, nruns, nf, nx, nsamples, params,
    812                     diagnostic_info, scaling_changes, do_logging=do_logging, print_progress=print_progress)
    813 

~/.local/lib/python3.8/site-packages/pybobyqa/solver.py in solve_main(objfun, x0, args, xl, xu, npt, rhobeg, rhoend, maxfun, nruns_so_far, nf_so_far, nx_so_far, nsamples, params, diagnostic_info, scaling_changes, f0_avg_old, f0_nsamples_old, do_logging, print_progress)
    638                 if params("restarts.use_restarts") and params("restarts.use_soft_restarts"):
    639                     number_of_samples = max(nsamples(control.delta, control.rho, current_iter, nruns_so_far), 1)
--> 640                     exit_info = control.soft_restart(number_of_samples, nruns_so_far, params,
    641                                                      x_in_abs_coords_to_save=None, f_to_save=None, nsamples_to_save=None)
    642                     if exit_info is not None:

~/.local/lib/python3.8/site-packages/pybobyqa/controller.py in soft_restart(self, number_of_samples, nruns_so_far, params, x_in_abs_coords_to_save, f_to_save, nsamples_to_save)
    537             # Using adelt=delta in fix_geometry (adelt determines the ball to max lagrange poly in altmov)
    538             # [Only reason actual 'delta' is needed in fix_geometry is for calling nsamples()]
--> 539             exit_info = self.geometry_step(knew, self.delta, number_of_samples, params)
    540             if exit_info is not None:
    541                 return exit_info

~/.local/lib/python3.8/site-packages/pybobyqa/controller.py in geometry_step(self, knew, adelt, number_of_samples, params)
    289             c, g, H = self.model.lagrange_polynomial(knew)  # based at xopt
    290             # Solve problem: bounds are sl <= xnew <= su, and ||xnew-xopt|| <= adelt
--> 291             xnew = trsbox_geometry(self.model.xopt(), c, g, H, self.model.sl, self.model.su, adelt)
    292         except LA.LinAlgError:
    293             exit_info = ExitInformation(EXIT_LINALG_ERROR, "Singular matrix encountered in geometry step")

~/.local/lib/python3.8/site-packages/pybobyqa/trust_region.py in trsbox_geometry(xbase, c, g, H, lower, upper, Delta, use_fortran)
    395     #   s.t.   lower <= xbase + s <= upper
    396     #          ||s|| <= Delta
--> 397     smin, gmin, crvmin = trsbox(xbase, g, H, lower, upper, Delta, use_fortran=use_fortran)  # minimise L(x)
    398     smax, gmax, crvmax = trsbox(xbase, -g, -H, lower, upper, Delta, use_fortran=use_fortran)  # maximise L(x)
    399     if abs(c + model_value(g, H, smin)) >= abs(c + model_value(g, H, smax)):  # take largest abs value

~/.local/lib/python3.8/site-packages/pybobyqa/trust_region.py in trsbox(xopt, g, H, sl, su, delta, use_fortran)
     64 def trsbox(xopt, g, H, sl, su, delta, use_fortran=USE_FORTRAN):
     65     if use_fortran:
---> 66         return trustregion.solve(g, H, delta,
     67                                  sl=np.minimum(sl - xopt, -ZERO_THRESH),
     68                                  su=np.maximum(su - xopt, ZERO_THRESH),

~/.local/lib/python3.8/site-packages/trustregion/interface.py in solve(g, H, delta, sl, su, verbose_output)
     54     # Convert to desired types
     55     g = _to_array(g, 'g')
---> 56     H = None if H is None else _to_array(H, 'H')
     57     try:
     58         delta = float(delta)

~/.local/lib/python3.8/site-packages/trustregion/interface.py in _to_array(X, lbl)
     14         return np.asarray_chkfinite(X)
     15     except ValueError:
---> 16         raise ValueError('%s contains Nan/Inf values' % lbl)
     17 
     18 

ValueError: H contains Nan/Inf values
import pybobyqa
import numpy as np


SEC_PER_DAY = 86400 # s

class VisitFitness:
    bounds = [(0., 730.),
              (3600./SEC_PER_DAY, 730.)]
    lower = np.array(bounds)[:,0]
    upper = np.array(bounds)[:,1]
    x0 = np.array([0., 30.])

    f_values = np.array([10.11572753649087985650,
 30.66843985569197883478,
 12.10014994129142351653,
 55.85847358731629697104,
 5383.72631231060131540289,
 10.16117834002221265166,
 12.36951055457960535477,
 9.57702202652344780631,
 10.44058095842921929375,
 9.55662933393137770111,
 9.54123152986866607250,
 9.54117776421004037957,
 9.61797191385653427176,
 9.54085321652559237293,
 9.62243765585130717000,
 9.54087512984960817164,
 9.55012014888882809771,
 9.54629142950483711161,
 9.54102407400895735634,
 9.54085319225582217939,
 9.54178767704779851044,
 9.54146041017130563944,
 9.54085319026665068520,
 9.54085319261752751174,
 9.54094457154279140809,
 9.54090227541482782669,
 9.54085565247380529286,
 9.54086452803617568463,
 9.54085622465918703483,
 9.54085984350153992750,
 9.54085323729991507946,
 9.54085319026614442350,
 9.54085319027010214654,
 9.54085319026819789201,
 9.54085368026597180346,
 11155.96339733171589614358,
 24.36364878547908219275,
 44.51039287958609236284,
 30.18900737512171872368,
 29.07508529780710659907,
 22.71350117409208735353,
 26.08977603131518563373,
 21.36945044514498093235,
 20.60464023994765270231,
 19.33053672389414856525,
 20.66601676909562712581,
 18.96139849632065832452,
 18.71603435330364462175,
 19.03425084057550975558,
 18.58851016322796567692,
 18.49460631757657225194,
 18.37161530664230468801,
 18.26029149604252310723,
 17.81998266212578485579,
 16.38373183343565742121,
 11.70441722102565584862,
 11.18539420028015207720,
 11.13716917742398848645,
 11.21414528574188551602,
 11.15859356600115326330,
 11.20768478052635686026,
 11.13362352598097437806,
 11.14933518384334121265,
 11.11845470714375139210,
 11.10173994023707777501,
 11.05358609093479316243,
 11.01432291271084551454,
 10.85936119573387514947,
 10.28190595123253103793,
 11.49664035760720537382,
 9.78109636812332894351,
 9.76591380443313639148,
 10.11144260346175904886,
 9.74385914376990491803,
 10.19446569155174842081,
 9.99550972291460837482,
 9.68014779302152206242,
 9.70163103007076443873,
 9.62021989456571269272,
 9.57084784013245126744,
 9.59032232177467136580,
 9.59151823136871328757,
 9.57418555455031139445,
 9.58203089552088016490,
 9.56766843572178515842,
 9.55659203299698845058,
 9.54199109706627623950,
 11.13120197643271680477,
 9.69920606079684688439,
 9.54088560591848278136,
 9.54093550355950270614,
 9.54855139789792062288,
 9.54085923772327149095,
 9.54085319099968387491,
 9.55009846759046610032,
 9.54156436862724888215,
 9.54085339890114347838,
 9.54158967345539466010,
 9.54085331258791491393,
 9.54085319026588152269,
 9.54095618946305812358,
 9.54088744369884622643,
 9.54085319187876024216,
 9.54085319040163781779,
 9.54086462284087488683,
 9.54086127504193548532,
 9.54085319028275868902,
 9.54085319026783018614,
 9.54085319026354738980,
 9.54085319026781242258,
 9.54085433208056699073,
 9.54085319026875211534,
 9.54085368537992906113,
 9.54085319026616573979,
 12.91947006185212032392,
 18.27718500351339514509,
 21.99131003303629228185,
 20.55747142698114160453,
 15.41920095812745294950,
 12.47876185640576807145,
 14.56257465282083174429,
 12.04614324377087086759,
 12.26974007425033441621,
 11.83351883613651267524,
 11.01644679943664684174,
 10.78963299558271060619,
 12.27759358224415997540,
 9.63568859982660441688,
 9.89182808484722109199,
 10.39629879322508543282,
 9.54212087803402653208,
 9.55248917578839495945,
 9.71168788291488382924,
 9.54197943351636013176,
 9.61573795221762495089,
 9.54085590633266811267,
 9.54933594178939770813,
 9.54086338875514705649,
 9.54735859275178633254,
 9.54085319058652103763,
 9.54171097185607486324,
 9.54085319026920508634,
 9.54096823376606018030,
 9.54085319245253948850,
 9.54092794167742397349,
 9.54085319026203748649,
 9.54086368306339593914,
 9.54085847790977936711,
 9.54085319028604317282,
 9.54085319026441247559,
 9.54085319026786748964,
 9.54085395414431225447,
 9.54085393884466981262,
 15.99818655102091113918,
 16.63796548385391460556,
 25.03290237554396568953,
 26.11099316511672796537,
 12.30081127595430956490,
 13.31706926057203688174,
 13.40771238056107605985,
 11.87208637125209875762,
 12.22053992871303762513,
 11.56294365785527133994,
 11.44917957469806779613,
 11.00633904305782451161,
 9.63725660294579000720,
 5383.72631231060131540289,
 11.24347719515458976502,
 10.34246429232709552082,
 10.30502583088494361618,
 9.55320039759946837421,
 9.58204638468711067389,
 9.84990696403078302978,
 9.54235215569945083303,
 9.54419860861445279454,
 9.57675127907513257242,
 9.54090090549254377095,
 9.54085405721296275772,
 9.55209172565533037869,
 9.54087769176860511777,
 9.54085319038920331991,
 9.54184182177231754451,
 9.54085343530124774247,
 9.54140802389881592660,
 9.54101767076124218647,
 9.54085319701965062222,
 9.54096698537731491285,
 9.54087518540971046832,
 9.54092359855541616298,
 9.54085319026758860161,
 9.54085319029051426298,
 9.54086436318687347580,
 9.54085916689485280529,
 9.54085401382196529596,
 9.54085319026650324759,
 9.54085319026653699837,
 9.54085328305010627048,
 9.54085319026443556822,
 9.54085413704370211008,
 5383.72631231060131540289,
 536252.92010295542422682047,
 7876.84376734635407046881,
 5169.72460685076202935306,
 15.38039624480350653357,
 19.31591368033434719109,
 14.90903903208799619051,
 12.62088529715983753476,
 11.42893302044527281680,
 11.09385677290211091872,
 11.90649775009120858726,
 11.77288645193038441050,
 10.98416277038281485545,
 10.72580409547348168076,
 10.44183511982485512704,
 9.55656814376146357404,
 9.55173220928139699026,
 9.70613412443892364934,
 9.54087523328895414920,
 9.54086906929717670778,
 9.56151411080746349569,
 9.54085319068917669938,
 9.55130239871468411650,
 9.54207999633450221211,
 9.54160029689607469550,
 9.54085342786442502927,
 9.54085333495666532144,
 9.54085319026419931276,
 9.54097721905542073273,
 9.54093155378507162823,
 9.54085319263662867684,
 9.54085485457341953008,
 9.54086515551877312191,
 9.54086121586855639976,
 9.54085319028884804027,
 9.54085319028048672862,
 9.54085432820503065443,
 9.54085392012331290346,
 9.54085319026286882149,
 9.54085319026943956544,
 12988.59128619515649916138,
 130.95851733875338140933,
 39.01491957376705954630,
 63.90901040001111255151,
 32.10726523098355755792,
 30.15011295236418575882,
 33.28171296700336512231,
 29.84798168828263342789,
 31.11831352677140571927,
 29.25426493195438837347,
 29.04704750706764926349,
 29.35778370484440813470,
 28.92887298892073388856,
 28.80053260929373948329,
 28.29412143754063535539,
 27.80939603188407716061,
 27.35353821251900896527,
 26.86781462897169703297,
 25.03220641025961157311,
 18.42255680452024790839,
 14.31599143660539930067,
 14.20266007336414304518,
 14.25251905193321455556,
 14.27632286357395408061,
 14.18225281605712595479,
 14.23214869949086747170,
 14.20351865093046583866,
 14.17451412633179330669,
 14.16866830554972267464,
 14.17231391902840975661,
 14.16047737919050319988,
 14.13296932603068611911,
 14.05699444029977840387,
 13.95501660420300638066,
 13.61537961741653468550,
 12.62985452286975629477,
 9.56629334266571795808,
 5383.72631231060131540289,
 20.75092278438621917758,
 10.61369854456642691787,
 12.54431185770854817463,
 9.80957740812961809240,
 9.90030372862304730575,
 9.80333106918157959342,
 9.55031921450572696131,
 9.65561877693923342747,
 9.62556644776771186400,
 9.55842894097626327721,
 9.61726916430501965749,
 9.58135262170341839294,
 9.54480601552343266292,
 9.54170408817461535023,
 9.54086963229641682460,
 9.56308618555887690604,
 9.54105070854513215295,
 9.54802359504166098247,
 9.54085344135743085303,
 9.54085319067923798286,
 9.54211149690140025825,
 9.54168644217759620574,
 9.54085333662522749876,
 9.54085319026384581775,
 9.54097769913793669616,
 9.54093087442718790214,
 9.54085319276976306924,
 9.54085319173421630978,
 9.54086512499509353802,
 9.54086087605103472242,
 9.54085319028929035312,
 9.54085319028204992264,
 9.54085319026321876379,
 9.54085411112136227985,
 9.54085383055536873087,
 9.54085319026324363278,
 9.54085319026514078189,
 13.86462183107111023617,
 13.86462183107111023617])

    def __init__(self):
        self.step = 0
        
    def __call__(self, x):
        f = self.f_values[self.step]
        print(f'{f}:{x}:{self.step}')
        self.step += 1
        return f

fitness = VisitFitness()

np.random.seed(42)
result = pybobyqa.solve(fitness, x0 = fitness.x0, bounds = (fitness.lower, fitness.upper),
                                maxfun=1000, seek_global_minimum=True,
                                scaling_within_bounds=True)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions