Пример #1
0
    def fill_in_defaults(self):
        """ if any of the fields are not filled in in description
        they are filled in with defaults here """
        # rule number
        self.rule_num = 0 if self.rule_num is None else self.rule_num
        # number of generations
        if self.num_generations is None:
            self.num_generations = 100

        # grid dimensions
        if self.grid_dims is None:
            if self.dimensions == 2:
                self.grid_dims = (200, 200)
            else:
                self.grid_dims = gens_to_dims(self.num_generations)

        # initial grid
        if self.initial_grid is None:
            fillstate = self.states[1] if self.states is not None else 0
            self.initial_grid = np.zeros(self.grid_dims, dtype=type(fillstate))
            self.initial_grid.fill(fillstate)

        # neighbourhood array
        if self.nhood_arr is None:
            if self.dimensions == 2:
                self.nhood_arr = np.array([[1, 1, 1], [1, 1, 1], [1, 1, 1]])
            else:
                self.nhood_arr = np.array([1, 1, 1])
Пример #2
0
    def fill_in_defaults(self):
        """ if any of the fields are not filled in in description
        they are filled in with defaults here """
        # rule number
        self.rule_num = 0 if self.rule_num is None else self.rule_num
        # number of generations
        if self.num_generations is None:
            self.num_generations = 100

        # grid dimensions
        if self.grid_dims is None:
            if self.dimensions == 2:
                self.grid_dims = (200, 200)
            else:
                self.grid_dims = gens_to_dims(self.num_generations)

        # initial grid
        # EDIT THIS PART TO AVOID REPEATING GRID INIT
        if self.initial_grid is None:
            fillstate = self.states[2] if self.states is not None else 0
            self.initial_grid = np.zeros(self.grid_dims, dtype=type(fillstate))
            self.initial_grid.fill(fillstate)
            # self.initial_grid[4:7, 8:24].fill(3) - Change to have dimentions and correct state
            self.initial_grid[30:40,15:25].fill(3)
            self.initial_grid[5:35,32:35].fill(4)
            self.initial_grid[10:15, 5:15].fill(5)
            self.initial_grid[49:50,0:3].fill(6)

        # neighbourhood array
        if self.nhood_arr is None:
            if self.dimensions == 2:
                self.nhood_arr = np.array([[1, 1, 1], [1, 1, 1], [1, 1, 1]])
            else:
                self.nhood_arr = np.array([1, 1, 1])
Пример #3
0
    def get_config(self, ca_config, validate=False):
        """Get the config from the UI and store in a CAConfig object"""
        ca_config.num_generations = self.generations_entry.get_value()
        ca_config.state_colors = self.state_colors.get_value()
        ca_config.wind_dir = self.wind_entry.get_value()
        print(ca_config.wind_dir)

        if ca_config.dimensions == 2:
            ca_config.grid_dims = self.griddims_entry.get_value()
            ca_config.nhood_arr = self.nhood_select.get_value() + 0
        else:
            ca_config.rule_num = self.rulenum_entry.get_value()
            ca_config.nhood_arr = self.nhood_select.get_value()[0] + 0
            centercell = (self.init_grid.selected.get() == 2)
            if centercell:
                ca_config.grid_dims = gens_to_dims(ca_config.num_generations)
                ca_config.initial_grid = np.zeros(ca_config.grid_dims)
                ig = self.__center_cell_set(ca_config.grid_dims,
                                            ca_config.states[-1])
                ca_config.set_initial_grid(ig)

        if not validate:
            return ca_config
        else:
            return self.__validate_and_warn(ca_config)
Пример #4
0
 def set_grid_dims(self, dims=None, num_generations=None):
     if dims is not None:
         i = dims[0] if dims[0] > 2 else 3
         j = dims[1] if dims[1] > 2 else 3
         self.grid_dims = i, j
     else:
         if num_generations < 1:
             num_generations = 1
         self.num_generations = num_generations
         self.grid_dims = gens_to_dims(self.num_generations)
     if self.initial_grid is not None:
         self.initial_grid = scale_array(self.initial_grid, *self.grid_dims)
     else:
         self.intitial_grid = np.zeros(self.grid_dims)
Пример #5
0
    def __init__(self, ca_config, transition_func):
        """
        1D grid constructor - takes the generations, states and
        transition function to create the appropriate grid.
            If no neighbourhood specified [1,1,1] will be used
            Default grid configuration; center cell in state[-1]
        """
        # init superclass
        Grid.__init__(self)

        self.ca_config = ca_config

        # check the generations are valid
        if ca_config.num_generations < 1:
            raise ValueError('Invalid generation number {n}, there must be 1' +
                             ' or more generations.'.format(
                                 n=ca_config.num_generations))

        # calculate the grid dimensions from the generations
        numrows, numcols = gens_to_dims(ca_config.num_generations)
        # wrapsize is the width of the columns at either side (hidden)
        # used for wrapping behavior
        # a wrapsize of 1 leads to 2 extra columns (1 either side of the grid)
        wrapsize = 1
        self.wrapping_grid = np.zeros((numrows, numcols + wrapsize*2))

        # set neighbourhood
        self.set_neighbourhood(ca_config)

        # initial grid
        self.wrapping_grid.fill(ca_config.states[0])
        self.grid = self.wrapping_grid[:, 1:-1]
        if ca_config.initial_grid is not None:
            self.set_grid(ca_config.initial_grid)
        self.refresh_wrap()

        # initialise variable to keep track of t
        self.current_gen = 0

        # handle transition function and any addional variables passed
        self.additional_args = None
        if type(transition_func) == tuple and len(transition_func) > 1:
            self.transition_func = transition_func[0]
            self.additional_args = transition_func[1:]
        else:
            self.transition_func = transition_func
Пример #6
0
    def fill_in_defaults(self):
        """ if any of the fields are not filled in in description
        they are filled in with defaults here """
        # rule number
        self.rule_num = 0 if self.rule_num is None else self.rule_num
        # number of generations
        if self.num_generations is None:
            self.num_generations = 100

        #wind direction
        if self.wind_dir is None:
            self.wind_dir = 'N'

        # grid dimensions
        if self.grid_dims is None:
            if self.dimensions == 2:
                self.grid_dims = (200, 200)
            else:
                self.grid_dims = gens_to_dims(self.num_generations)

        # initial grid
        if self.initial_grid is None:
            fillstate = self.states[0] if self.states is not None else 0
            self.initial_grid = np.zeros(self.grid_dims, dtype=type(fillstate))
            self.initial_grid.fill(fillstate)
            waterl, waterr = 20, 10
            forestl, forestr = 60, 30
            canl, canr = 10, 64
            townl, townr = 98, 0
            self.num_generations = 200
            self.wind_dir = 'S'
            self.initial_grid[forestl:forestl + 20, forestr:forestr + 22] = 1
            self.initial_grid[waterl:waterl + 8, waterr:waterr + 18] = 3
            self.initial_grid[canl:canl + 60, canr:canr + 6] = 2
            self.initial_grid[townl:townl + 2, townr:townr + 6] = 4
            self.initial_grid[0, 0] = 5

        # neighbourhood array
        if self.nhood_arr is None:
            if self.dimensions == 2:
                self.nhood_arr = np.array([[1, 1, 1], [1, 1, 1], [1, 1, 1]])
            else:
                self.nhood_arr = np.array([1, 1, 1])