Package comocma :: Module sofomore_logger :: Class SofomoreDataLogger
[hide private]
[frames] | no frames]

Class SofomoreDataLogger

source code

                   object --+    
                            |    
cma.interfaces.BaseDataLogger --+
                                |
                               SofomoreDataLogger

data logger for class `CMAEvolutionStrategy`.

The logger is identified by its name prefix and (over-)writes or reads according data files. Therefore, the logger must be considered as *global* variable with unpredictable side effects, if two loggers with the same name and on the same working folder are used at the same time.

Examples

:

   import cma
   es = cma.CMAEvolutionStrategy(...)
   logger = cma.CMADataLogger().register(es)
   while not es.stop():
       ...
       logger.add()  # add can also take an argument

   logger.plot() # or a short cut can be used:
   cma.plot()  # plot data from logger with default name

   logger2 = cma.CMADataLogger('just_another_filename_prefix').load()
   logger2.plot()
   logger2.disp()

   import cma
   from matplotlib.pylab import *
   res = cma.fmin(cma.ff.sphere, rand(10), 1e-0)
   logger = res[-1]  # the CMADataLogger
   logger.load()  # by "default" data are on disk
   semilogy(logger.f[:,0], logger.f[:,5])  # plot f versus iteration, see file header
   cma.s.figshow()

Details

After loading data, the logger has the attributes `xmean`, `xrecent`, `std`, `f`, `D` and `corrspec` corresponding to ``xmean``, ``xrecentbest``, ``stddev``, ``fit``, ``axlen`` and ``axlencorr`` filename trails.

:See: `disp` (), `plot` ()

Instance Methods [hide private]
 
__init__(self, name_prefix='outsofomore/', modulo=1, append=False)
initialize logging of data from a `CMAEvolutionStrategy` instance, default ``modulo=1`` means logging with each call
source code
 
register(self, es, append=None, modulo=None)
register a `Sofomore` instance for logging, ``append=True`` appends to previous data logged under the same name, by default previous data are overwritten.
source code
 
initialize(self, modulo=None)
reset logger, overwrite original files, `modulo`: log only every modulo call
source code
 
add(self, es=None, more_data=(), modulo=None)
append some logging data from `Sofomore` class instance `es`, if ``number_of_times_called % modulo`` equals to zero, never if ``modulo==0``.
source code
 
load(self, filenames)
load data from file `name` or `self.filename`
source code
 
plot(self, filename, x_iteration=0)
abstract method, plot data
source code
 
plot_front(self, aspect=None) source code
 
plot_ratios(self, iabscissa=1) source code
 
plot_divers(self, iabscissa=1) source code
 
plot_stds(self, iabscissa=1) source code
 
_enter_plotting(self, fontsize=7)
assumes that a figure is open
source code
 
_finalize_plotting(self) source code
 
_xlabel(self, iabscissa=1) source code

Inherited from cma.interfaces.BaseDataLogger: disp, save

Inherited from object: __delattr__, __format__, __getattribute__, __hash__, __new__, __reduce__, __reduce_ex__, __repr__, __setattr__, __sizeof__, __str__, __subclasshook__

Class Variables [hide private]
  default_prefix = 'outsofomore/'
Instance Variables [hide private]
  modulo
how often to record data, allows calling `add` without args
  append
append to previous data
  counter
number of calls to `add`

Inherited from cma.interfaces.BaseDataLogger: filename, optim

Inherited from cma.interfaces.BaseDataLogger (private): _data

Properties [hide private]

Inherited from cma.interfaces.BaseDataLogger: data

Inherited from object: __class__

Method Details [hide private]

__init__(self, name_prefix='outsofomore/', modulo=1, append=False)
(Constructor)

source code 

initialize logging of data from a `CMAEvolutionStrategy` instance, default ``modulo=1`` means logging with each call

Overrides: object.__init__

register(self, es, append=None, modulo=None)

source code 

register a `Sofomore` instance for logging, ``append=True`` appends to previous data logged under the same name, by default previous data are overwritten.

Overrides: cma.interfaces.BaseDataLogger.register

add(self, es=None, more_data=(), modulo=None)

source code 

append some logging data from `Sofomore` class instance `es`, if ``number_of_times_called % modulo`` equals to zero, never if ``modulo==0``.

``more_data`` is a list of additional data to be recorded where each data entry must have the same length.

When used for a different optimizer class, this function can be (easily?) adapted by changing the assignments under INTERFACE in the implemention.

Overrides: cma.interfaces.BaseDataLogger.add

load(self, filenames)

source code 

load data from file `name` or `self.filename`

Overrides: cma.interfaces.BaseDataLogger.load

plot(self, filename, x_iteration=0)

source code 

abstract method, plot data

Overrides: cma.interfaces.BaseDataLogger.plot