satuma777/evoltier

View on GitHub
main.py

Summary

Maintainability
A
0 mins
Test Coverage
from __future__ import print_function

from evoltier.optimizers import CMAES, GaussianNaturalGradientOptimizer, BernoulliNaturalGradientOptimizer
from evoltier import updater
from evoltier import weight
from evoltier import model
from evoltier.selection import PBILSelection, CMALargePopSizeSelection, CMASelection, NESSelection
from evoltier.utils import CMAESParameters, HyperParameters


def quad(x):
    # implementation of quadratic function.
    # global minima is zero.
    return (x * x).sum(axis=1)


def negative_quad(x):
    # implementation of quadratic function.
    # global mixima is zero.
    return - (x * x).sum(axis=1)


def onemax(x):
    return x.sum(axis=1)


def leading_ones(x):
    import numpy as np
    return np.sum(np.dot(x, np.tri(x.shape[1])), axis=1)


def main(gpuID=-1):
    dim = 100
    # set probability distribution
    gaussian = model.MultiVariableGaussian(dim=dim)
    #gaussian = model.Bernoulli(dim=dim)
    if gpuID >= 0:
        gaussian.use_gpu()

    # set utility function
    w = NESSelection(is_minimize=True)
    #w = PBILSelection(is_minimize=True, selection_rate=0.5)

    # set learning rate of distribution parameters
    lr = CMAESParameters(dim=dim)
    #lr = HyperParameters({'eta': 1 / dim})

    # set optimizer
    opt = CMAES(w, lr, dim=dim)
    #opt = BernoulliNaturalGradientOptimizer(w, lr, dim=dim)

    # set updater
    upd = updater.Updater(optimizer=opt, obj_func=quad, pop_size=100, threshold=float('-inf'),
                          out='result', max_iter=10000, logging=True)

    # run IGO and print result
    print(upd.run())


if __name__ == '__main__':
    import argparse
    parser = argparse.ArgumentParser(description='Evoltier Example')
    parser.add_argument('--gpu', '-g', type=int, default=-1, help='GPU ID (negative value indicates CPU)')
    args = parser.parse_args()
    main(args.gpu)