| @@ -31,8 +31,8 @@ class RandomPreimageGenerator(PreimageGenerator): | |||
| self.__alphas = None # weights of linear combinations of points in kernel space. | |||
| self.__parallel = True | |||
| self.__n_jobs = multiprocessing.cpu_count() | |||
| self.__time_limit_in_sec = 0 # @todo | |||
| self.__max_itrs = 100 # @todo | |||
| self.__time_limit_in_sec = 0 | |||
| self.__max_itrs = 20 | |||
| # values to compute. | |||
| self.__runtime_generate_preimage = None | |||
| self.__runtime_total = None | |||
| @@ -59,7 +59,7 @@ class RandomPreimageGenerator(PreimageGenerator): | |||
| self.__parallel = kwargs.get('parallel', True) | |||
| self.__n_jobs = kwargs.get('n_jobs', multiprocessing.cpu_count()) | |||
| self.__time_limit_in_sec = kwargs.get('time_limit_in_sec', 0) | |||
| self.__max_itrs = kwargs.get('max_itrs', 100) | |||
| self.__max_itrs = kwargs.get('max_itrs', 20) | |||
| self.__gram_matrix_unnorm = kwargs.get('gram_matrix_unnorm', None) | |||
| self.__runtime_precompute_gm = kwargs.get('runtime_precompute_gm', None) | |||
| @@ -147,7 +147,10 @@ class RandomPreimageGenerator(PreimageGenerator): | |||
| dis_of_each_itr = [dhat] | |||
| if self.__parallel: | |||
| self._kernel_options['parallel'] = None | |||
| while r < self.__r_max: | |||
| self.__itrs = 0 | |||
| self.__num_updates = 0 | |||
| timer = Timer(self.__time_limit_in_sec) | |||
| while not self.__termination_criterion_met(timer, self.__itrs, r): | |||
| print('\n- r =', r) | |||
| found = False | |||
| dis_bests = dis_gs + dihat_list | |||
| @@ -238,14 +241,14 @@ class RandomPreimageGenerator(PreimageGenerator): | |||
| # get the better graph preimage. | |||
| if dnew <= dhat: # @todo: the new distance is smaller or also equal? | |||
| if dnew < dhat: | |||
| if dhat - dnew > 1e-6: | |||
| if self._verbose >= 2: | |||
| print('trial =', str(trial)) | |||
| print('\nI am smaller!') | |||
| print('index (as in D_k U {gihat} =', str(ig)) | |||
| print('distance:', dhat, '->', dnew) | |||
| updated = True | |||
| elif dnew == dhat: | |||
| else: | |||
| if self._verbose >= 2: | |||
| print('I am equal!') | |||
| dhat = dnew | |||
| @@ -286,13 +289,13 @@ class RandomPreimageGenerator(PreimageGenerator): | |||
| idx_min = np.argmin(dnew_list) | |||
| dnew = dnew_list[idx_min] | |||
| if dnew <= dhat: # @todo: the new distance is smaller or also equal? | |||
| if dnew < dhat: | |||
| if dhat - dnew > 1e-6: # @todo: use a proportion and watch out for 0. | |||
| if self._verbose >= 2: | |||
| print('\nI am smaller!') | |||
| print('index (as in D_k U {gihat} =', str(ig)) | |||
| print('distance:', dhat, '->', dnew) | |||
| print('I am smaller!') | |||
| print('index (as in D_k U {gihat}) =', str(ig)) | |||
| print('distance:', dhat, '->', dnew, '\n') | |||
| self.__num_updates += 1 | |||
| elif dnew == dhat: | |||
| else: | |||
| if self._verbose >= 2: | |||
| print('I am equal!') | |||
| dhat = dnew | |||
| @@ -355,12 +358,13 @@ class RandomPreimageGenerator(PreimageGenerator): | |||
| return results | |||
| def __termination_criterion_met(self, converged, timer, itr, itrs_without_update): | |||
| def __termination_criterion_met(self, timer, itr, r): | |||
| if timer.expired() or (itr >= self.__max_itrs if self.__max_itrs >= 0 else False): | |||
| # if self.__state == AlgorithmState.TERMINATED: | |||
| # self.__state = AlgorithmState.INITIALIZED | |||
| return True | |||
| return converged or (itrs_without_update > self.__max_itrs_without_update if self.__max_itrs_without_update >= 0 else False) | |||
| return (r >= self.__r_max if self.__r_max >= 0 else False) | |||
| # return converged or (itrs_without_update > self.__max_itrs_without_update if self.__max_itrs_without_update >= 0 else False) | |||
| @property | |||