Ejemplo n.º 1
0
 def values(self):
     sample_values = []
     for task in self.tasks:
         pt = self.mean().point(task)
         s = Sample(pt, self.prob)
         v = s.evaluate(task)
         sample_values += [v]
     return sample_values
Ejemplo n.º 2
0
    def solve(self):
        dim = self.prob.dim
        num_samples = 5000
        fp = open('sample_data_weier_v2.csv', 'w+')

        for i in range(num_samples):
            pt = (np.random.rand(dim) - 0.5) * 2.0
            s = Sample(pt, self.prob)
            values = [s.evaluate(t) for t in self.tasks]
            print('sample %d at %s' % (i, pt))
            row = ", ".join([str(x) for x in [i] + list(pt) + list(values)])
            fp.write(row + "\n")
        fp.close()
Ejemplo n.º 3
0
    def evaluate(self, _x):
        self.eval_counter += 1
        # Scale up the second part, to cover all the possible range
        if self.mean_type == 'linear':
            x = np.zeros(self.prob.dim * 2)
            for i in range(self.prob.dim):
                x[i] = _x[i]
            for i in range(self.prob.dim, 2 * self.prob.dim):
                x[i] = _x[i] - _x[i - self.prob.dim]
        else:
            x = np.array(_x)
        self.mean().set_params(x)
        sample_values = []
        for task in self.tasks:
            pt = self.mean().point(task)
            s = Sample(pt, self.prob)
            v = s.evaluate(task)
            sample_values += [v]
        avg_error = np.mean(sample_values)
        if np.isnan(avg_error):
            avg_error = 9999.9
        print x, ' value: {', avg_error, '}'
        self.iter_values += [sample_values]  # Values for the entire iterations
        self.iter_params += [x]

        # If one iteration is ended
        if self.eval_counter % 16 == 0:
            self.iter_counter += 1
            # print 'CMA Iteration', self.iter_counter, self.prob.eval_counter
            # for v in self.iter_values:
            #     print sum(v), v
            # print 'best:', self.values()
            sum_values = [sum(vs) for vs in self.iter_values]
            print('sum_values = %s' % sum_values)
            best_index = np.nanargmin(sum_values)
            print('best_index = %d' % best_index)
            best_params = self.iter_params[best_index]
            print('best params = %s' % best_params)
            self.mean().set_params(best_params)
            [o.notify_step(self, self.model) for o in self.observers]

            self.iter_values = []
            self.iter_params = []

        return avg_error
Ejemplo n.º 4
0
    def solve(self):
        [o.notify_init(self, self.model) for o in self.observers]
        sample_values = []
        for task in self.tasks:
            pt = self.mean().point(task)
            s = Sample(pt, self.prob)
            v = s.evaluate(task)
            sample_values += [v]
        self.iter_values += [sample_values]
        self.iter_params += [self.mean().params()]
        [o.notify_step(self, self.model) for o in self.observers]
        res = {'result': 'NG'}
        # opt = {'verb_time': 0, 'popsize': 16, 'tolfun': 1.0}
        cma.CMAOptions('tol')

        opts = cma.CMAOptions()
        opts.set('verb_disp', 1)
        # opts.set('tolfun', 0.001)
        # opts.set('tolx', 0.0000001)
        # opts.set('tolx', 1.0)
        opts.set('ftarget', 0.001)
        num_offsprings = 16
        opts.set('popsize', num_offsprings)
        max_iter = int(20000 / self.n / num_offsprings)
        print('maxiter: %d' % max_iter)
        opts.set('maxiter', max_iter)
        for key, value in opts.iteritems():
            print '[', key, ']\n', value

        x0 = np.random.rand(self.mean().paramdim) - 0.5

        # print cma.CMAOptions()
        # exit(0)

        print()
        print('------- CMA-ES --------')
        res = cma.fmin(self.evaluate, x0, 1.0, opts)
        print('-----------------------')
        print()
        # np.set_printoptions(precision=6, suppress=True)
        print('the answer: %s' % res[0])

        [o.notify_solve(self, self.model) for o in self.observers]
        return res
Ejemplo n.º 5
0
 def evaluate(self, x):
     self.eval_counter += 1
     s = Sample(x, self.prob)
     v = s.evaluate(self.current_task)
     print('%.6f <--- %s' % (v, x))
     return v
Ejemplo n.º 6
0
# Case 1. If we use individual approach..
mean = model.mean.Interpolation(NUM_TASKS)

# # Case 2. If we use our algorithm..
# import json
# with open('result_parameterized_04.json') as fp:
#     data = json.load(fp)
#     my_params = eval('np.' + data['mean_params'])
# tasks = np.linspace(0.0, 1.0, 6)
# my_model = model.Model(prob.dim, tasks, 'linear')
# my_model.mean.set_params(my_params)
# mean = my_model.mean

# resume all the cases..
print('mean = %s' % mean)

test_tasks = np.linspace(0.0, 1.0, NUM_TEST_TASKS)
values = []
for w in test_tasks:
    pt = mean.point(w)
    s = Sample(pt, prob)
    v = s.evaluate(w)
    if v > 10.0:
        v = v / 10 + 1.0
    print('%.4f, pt = %s , value = %.6f' % (w, repr(pt), v))
    values += [v]
print('average: %.8f' % np.mean(values))
print('max: %.8f' % np.max(values))
print('values: %s' % values)