예제 #1
0
 def optimize(self, init_guess=None, opti_algo='grid', record_data=False):
     """
     runs automatic optimization of thetas and ps
     :param init_guess: list of input values for an initial guess
     :param opti_algo: string for the algorithm to use 'grid' (self implemented LikeliOptimizer) or 'basin' (using scipy.optimize.basin-hopping)
     :param record_data: if True the test points of the optimizer gets recorded (this is needed for plot of optimizer path in plot_likelihoods)
     :return: None
     """
     timer = TimeTrack('optiTimer')
     self.records = None
     if record_data:
         self.records = []
     if 'basin' in opti_algo:
         # basinhopping:
         if init_guess is None:
             init_guess = []
             for t in self._theta:
                 init_guess.append(t)
             for p in self._p:
                 init_guess.append(p)
         bnds = []
         for i in range(0, self._k):
             bnds.append((-5., +5.))
         for i in range(0, self._k):
             bnds.append((1., 2.))
         bounds = BasinHoppingBounds(xmax=list(zip(*bnds))[1],
                                     xmin=list(zip(*bnds))[0])
         step = BasinHoppingStep()
         minimizer_kwargs = dict(method='SLSQP',
                                 bounds=bnds,
                                 options={
                                     'disp': False,
                                     'maxiter': 5e3
                                 },
                                 tol=1e-4)
         timer.tic()
         res = basinhopping(self._calc_likelihood_opti_exp,
                            init_guess,
                            minimizer_kwargs=minimizer_kwargs,
                            accept_test=bounds,
                            take_step=step,
                            niter=1000,
                            niter_success=100)
         timer.toc(print_it=True)
     elif 'grid' in opti_algo:
         skipper = LikeliOptimizer(debug=True)
         timer.tic()
         res = skipper.find(self._calc_likelihood_opti_exp, self._k)
         timer.toc(print_it=True)
     else:
         raise Exception('ERROR: unknown optimizer selected')
     exps = res.x[0:self._k]
     thetas = []
     for e in exps:
         thetas.append(10.**e)
     if record_data:
         print('Kriging Likelihood optimization evaluations: {:d}'.format(
             len(self.records)))
     self.update_param(thetas, res.x[self._k:])
예제 #2
0
    def auto_run(self,
                 sampling_type,
                 sample_point_count,
                 surro_type,
                 run_validation=True,
                 auto_fit=True,
                 params=[],
                 sequential_runs=0):
        """
        runs whole surrogate process
        :param sampling_type: index of the sampling type (definition in defines.py)
        :param sample_point_count: number of sampling points
        :param surro_type: index of the surrogate type (definition in defines.py)
        :param run_validation: run all validations (rmse, mae, press, avg-deviation)
        :param auto_fit: auto fit RBF and polynom surrogate by using validation
        :param params: adiational parameters to pass to the surrogate algorithm
        :param sequential_runs: number of sequential runs (add found optimum to sampling plan and build a new surrogate including the prev. optimum)
        :return: results as instance of SurroResults, pointer to the surrogate model instance
        """
        suc = self.generate_sampling_plan(sampling_type, sample_point_count)
        if not suc:
            return self.results, None
        self.run_validation_points()
        for i in range(0, sequential_runs + 1):
            if self.results.optimum_weight > 0.:
                self.known_params = np.append(
                    self.known_params,
                    [[self.results.optimum_rib, self.results.optimum_shell]],
                    axis=0)
                self._generate_scaled_sampling_points()

            self.run_fem_calculation()

            fit_time = TimeTrack('FitTime')
            fit_time.tic()
            if surro_type == SURRO_POLYNOM and auto_fit:
                suc = self.auto_fit_poly()
            elif surro_type == SURRO_RBF and auto_fit:
                suc = self.auto_fit_rbf(params=params)
            else:
                suc = self.train_model(surro_type, params=params)
            self.results.runtime = fit_time.toc()
            if not suc:
                return self.results, None
            self.optimize()

        if run_validation:
            self.run_validation_points(flip_points=True)
            self.run_validation(full_validation=True)

        self.print_results()
        if self.show_plots:
            self.plot_it()
        return self.results, self.surro
예제 #3
0
            likely[i2][i1] = krig.calc_likelihood()

    krig.optimize(opti_algo='basin')
    minLike = krig.calc_likelihood()
    print('minLike = ' + str(minLike))
    print('@theta1 = ' + str(krig._theta[0]))
    print('@theta2 = ' + str(krig._theta[1]))

    pltTheta = PlotHelper([r'$\theta_{1}$', r'$\theta_{1}$'], fancy=False)
    pltTheta.ax.set_xscale('log')
    pltTheta.ax.set_yscale('log')
    pcol = pltTheta.ax.pcolor(thetas, thetas, likely)
    pltTheta.fig.colorbar(pcol)
    pltTheta.ax.plot(krig._theta[0], krig._theta[1], 'rx')
    pltTheta.finalize()
    #pltTheta.show()

    plt1.plot_function_3d(krig.predict,
                          fx,
                          fy,
                          r'$\widehat{f}_{krig}$',
                          color='b')
    plt1.ax.view_init(20, 50)
    plt1.finalize()
    #plt1.save('data_out/krigingRn.svg')
    #plt1.save('data_out/krigingRn.pdf')
    #plt1.animate()
    t1.toc()
    plt1.show()
    print('done')
예제 #4
0
pro1.solve_abaqus()
pro1.post_process_abaqus()

print('min displacement: ' + str(pro1.resultsAba.dispD3Min))
print('max displacement: ' + str(pro1.resultsAba.dispD3Max))
print('min mieses stress: ' + str(pro1.resultsAba.stressMisesMin))
print('max mieses stress: ' + str(pro1.resultsAba.stressMisesMax))
print('weight: ' + str(pro1.calc_wight()))

pro1.errorFlag = False
pro1.solve()
if not pro1.errorFlag:
    pro1.post_process()
    #pro1.post_process(template='wing_post_max_mises_fixed')
    if not pro1.errorFlag:
        runTime = t.toc()

        print('min displacement: ' + str(pro1.resultsCalcu.dispD3Min))
        print('max displacement: ' + str(pro1.resultsCalcu.dispD3Max))
        print('min mieses stress: ' + str(pro1.resultsCalcu.stressMisesMin))
        print('max mieses stress: ' + str(pro1.resultsCalcu.stressMisesMax))
        print('weight: ' + str(pro1.calc_wight()))

        #l = pro1.validate_load('load.frc')

        l = pro1.validate_load('loadTop.frc')
        l += pro1.validate_load('loadBot.frc')
        print('load error: ' + str((-1. * wing_load) - l))
pro1.save_results()

print('done')