def ca_develop(network: FeedForwardNetwork) -> Iterator[ToroidalCellGrid2D]:
def transition_f(inputs_discrete_values: Sequence[CELL_STATE_T]) -> CELL_STATE_T:
neighbour_values, xy_values = inputs_discrete_values[:-2], inputs_discrete_values[-2:]
if all((x == initial_grid.dead_cell) for x in neighbour_values):
return initial_grid.dead_cell
inputs_float_values = tuple(state_normalization_rules[n] for n in neighbour_values) + \
tuple(coord_normalization_rules[n] for n in xy_values)
outputs = network.serial_activate(inputs_float_values)
return max(zip(alphabet, outputs), key=itemgetter(1))[0]
yield initial_grid
for grid in iterate_ca_n_times_or_until_cycle_found(
initial_grid=initial_grid,
transition_f=transition_f,
n=iterations,
iterate_f=iterate_ca_once_with_coord_inputs
):
yield grid
评论列表
文章目录