Beispiel #1
0
class Experiment:
    def __init__(self, args):
        self._args = args

    def generate_map(self):
        if self._args.model:
            self.map_points = self._load_map_points_from_model()
        else:
            self.map_points = self._generate_random_map_points()

    def _load_map_points_from_model(self):
        model = storage.load(self._args.model)[0]
        return model.normalized_observed_reductions

    def _generate_random_map_points(self):
        samples, _labels = make_classification(
            n_features=2, n_redundant=0, n_informative=1,
            n_clusters_per_class=1, n_samples=1000)
        return self._normalize(samples)

    def _normalize(self, points):
        min_value = min([min(point) for point in points])
        max_value = max([max(point) for point in points])
        return (points - min_value) / (max_value - min_value)

    def create_navigator(self):
        self.navigator = Navigator(map_points=self.map_points)

    def generate_new_path(self):
        departure = random.choice(self.map_points)
        self._generate_path(departure)

    def extend_path(self):
        departure = self.path[-1]
        self._generate_path(departure)

    def _get_slider_value(self, name):
        return float(self.window.sliders[name].value()) / SLIDER_PRECISION

    def _generate_path(self, departure):
        self.path_segments = self.navigator.generate_path(
            departure,
            num_segments=10,
            novelty=self._get_slider_value("novelty"),
            extension=self._get_slider_value("extension"),
            location_preference=self._get_slider_value("location_preference"))
        self.path = interpolation.interpolate(
            self.path_segments,
            resolution=100)
        self.path_followers = [
            PathFollower(self.path, dynamics=dynamics.constant_dynamics()),
            PathFollower(self.path, dynamics=dynamics.sine_dynamics()),
            ]

    def proceed(self, time_increment):
        for path_follower in self.path_followers:
            path_follower.proceed(time_increment * VELOCITY)