Пример #1
0
    def __init__(self,
                 worker_id,
                 data,
                 response_surface,
                 maxeval,
                 nsamples,
                 exp_design=None,
                 sampling_method=None,
                 extra=None):
        """Initialize the optimization strategy.

        :param worker_id: Start ID in a multistart setting
        :param data: Problem parameter data structure
        :param response_surface: Surrogate model object
        :param maxeval: Function evaluation budget
        :param nsamples: Number of simultaneous fevals allowed
        :param exp_design: Experimental design
        :param search_procedure: Search procedure for finding
            points to evaluate
        :param extra: Points to be added to the experimental design
        """

        self.worker_id = worker_id
        self.data = data
        self.fhat = response_surface
        if self.fhat is None:
            self.fhat = RBFInterpolant(surftype=CubicRBFSurface, maxp=maxeval)
        self.maxeval = maxeval
        self.nsamples = nsamples
        self.extra = extra

        # Default to generate sampling points using Symmetric Latin Hypercube
        self.design = exp_design
        if self.design is None:
            if self.data.dim > 50:
                self.design = LatinHypercube(data.dim, data.dim + 1)
            else:
                self.design = SymmetricLatinHypercube(data.dim,
                                                      2 * (data.dim + 1))

        self.xrange = np.asarray(data.xup - data.xlow)

        # algorithm parameters
        self.sigma_min = 0.005
        self.sigma_max = 0.2
        self.sigma_init = 0.2

        self.failtol = max(5, data.dim)
        self.succtol = 3

        self.numeval = 0
        self.status = 0
        self.sigma = 0
        self.resubmitter = RetryStrategy()
        self.xbest = None
        self.fbest = np.inf
        self.fbest_old = None

        # Set up search procedures and initialize
        self.sampling = sampling_method
        if self.sampling is None:
            self.sampling = CandidateDYCORS(data)

        self.check_input()

        # Start with first experimental design
        self.sample_initial()
Пример #2
0
if __name__ == "__main__":
    # Test DYCORS
    dim = 10
    maxeval = 100
    initeval = 80
    from test_problems import Ackley
    from experimental_design import LatinHypercube
    from rbf_interpolant import RBFInterpolant
    from rbf_surfaces import CubicRBFSurface
    xbest = np.ones(dim)
    data = Ackley(dim)
    cand = CandidateDYCORS(data, 100 * dim)
    exp_des = LatinHypercube(dim, npts=initeval)
    initpoints = exp_des.generate_points()
    rbf = RBFInterpolant(surftype=CubicRBFSurface)
    for i in range(initeval):
        rbf.add_point(initpoints[i, :], data.objfunction(initpoints[i, :]))
    cand.init(initpoints, maxeval, True, None)

    def evals(x, scaling):
        return rbf.evals(x)

    cand.make_points(xbest, 0.02, evals, maxeval)

    import matplotlib.pyplot as plt
    plt.plot(cand.xcand[:, 0], cand.xcand[:, 1], 'ro')
    plt.ylabel('Dimension 1')
    plt.xlabel('Dimension 2')
    plt.show()