diff --git a/bin/Classess/Track.py b/bin/Classess/Track.py index 98e191b..b9e616f 100644 --- a/bin/Classess/Track.py +++ b/bin/Classess/Track.py @@ -1,5 +1,17 @@ class Track: - def __init__(self, road, distance): + def __init__(self, priority, road): + self.priority = priority self.road = road - self.distance = distance + + def __eq__(self, other): + try: + return self.priority == other.priority + except AttributeError: + return NotImplemented + + def __lt__(self, other): + try: + return self.priority < other.priority + except AttributeError: + return NotImplemented diff --git a/bin/Classess/Travel.py b/bin/Classess/Travel.py index 72c27c0..573f474 100644 --- a/bin/Classess/Travel.py +++ b/bin/Classess/Travel.py @@ -1,5 +1,10 @@ import queue -from itertools import permutations, islice, combinations +from itertools import permutations, islice +from math import sqrt +import random + +from resources.Globals import NUMBER_OF_INDIVIDUALS_FOR_DUEL, NUMBER_OF_POINTS_PERMUTATION, PERCENT_OF_MUTATION, \ + PERCENT_OF_OUTGOING_INDIVIDUALS class Travel: @@ -9,12 +14,190 @@ class Travel: def genetic_algorithm(travel_map): - population = queue.PriorityQueue() + population = [] road_map = list(travel_map.keys()) - points_permutation = list(map(list, islice(permutations(road_map), 10))) - # for i in range(0, len(points_permutation)): - # distance = - # subject = Track() - # print(points_permutation) - # print(len(points_permutation)) + points_permutation = list(map(list, islice(permutations(road_map), NUMBER_OF_POINTS_PERMUTATION))) + # Generate the first population + for i in range(0, len(points_permutation)): + road = points_permutation[i] + priority = adaptation_function(points_permutation[i], travel_map) + + population.append((priority, road)) + + while len(population) < 10000: + parent1, parent2 = tournament_selection(population) + + child = edge_recombination_crossover(parent1[1], parent2[1]) + child_priority = adaptation_function(child, travel_map) + + population.append((child_priority, child)) + + mutation_function(population, travel_map) + population.sort(key=lambda x: x[0], reverse=True) + + return population[0] + + +def adaptation_function(list_points, travel_map): + index_of_point = 0 + distance = 0 + while True: + + if index_of_point < (-len(list_points)): + return round((1 / distance) * 1000000) + + if index_of_point == (len(list_points) - 1): + x1 = travel_map.get(list_points[index_of_point])[0] + y1 = travel_map.get(list_points[index_of_point])[1] + + x2 = travel_map.get(list_points[-len(list_points)])[0] + y2 = travel_map.get(list_points[-len(list_points)])[1] + + index_of_point = -len(list_points) - 1 + else: + x1 = travel_map.get(list_points[index_of_point])[0] + y1 = travel_map.get(list_points[index_of_point])[1] + + x2 = travel_map.get(list_points[index_of_point + 1])[0] + y2 = travel_map.get(list_points[index_of_point + 1])[1] + + index_of_point += 1 + + distance += sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2) + + +def tournament_selection(population): + individuals_for_duel1 = [] + individuals_for_duel2 = [] + population_length = len(population) + + while True: + + if len(individuals_for_duel1) == NUMBER_OF_INDIVIDUALS_FOR_DUEL and len(individuals_for_duel2) == NUMBER_OF_INDIVIDUALS_FOR_DUEL: + break + + if len(individuals_for_duel1) != NUMBER_OF_INDIVIDUALS_FOR_DUEL: + index1 = random.randint(0, population_length - 1) + candidate_for_duel1 = population[index1] + if candidate_for_duel1 not in individuals_for_duel1: + individuals_for_duel1.append(candidate_for_duel1) + + if len(individuals_for_duel2) != NUMBER_OF_INDIVIDUALS_FOR_DUEL: + index2 = random.randint(0, population_length - 1) + candidate_for_duel2 = population[index2] + if candidate_for_duel2 not in individuals_for_duel1 and candidate_for_duel2 not in individuals_for_duel2: + individuals_for_duel2.append(candidate_for_duel2) + + winner_of_duel1 = max(individuals_for_duel1, key=lambda x: x[0]) + winner_of_duel2 = max(individuals_for_duel2, key=lambda x: x[0]) + + return winner_of_duel1, winner_of_duel2 + +def edge_recombination_crossover(parent1, parent2): + dict_of_neighbors = generate_dict_of_neighbors(parent1, parent2) + + gen_index = random.randint(0, len(parent1) - 1) + gen = parent1[gen_index] + child = [] + while True: + + child.append(gen) + + if len(child) == len(parent1): + return child + + for key in dict_of_neighbors.keys(): + if gen in dict_of_neighbors[key]: + dict_of_neighbors[key].remove(gen) + + if not dict_of_neighbors[gen]: + while True: + # new_gen = random.randint(parent1[0], parent1[-1]) + new_gen_index = random.randint(0, len(parent1) - 1) + new_gen = parent1[new_gen_index] + if new_gen not in child: + break + else: + new_gen = dict_of_neighbors[gen][0] + best_neighbor = len(dict_of_neighbors[new_gen]) + for neighbor in dict_of_neighbors[gen][1:]: + possible_best_neighbor = len(dict_of_neighbors[neighbor]) + if possible_best_neighbor <= best_neighbor: + best_neighbor = possible_best_neighbor + new_gen = neighbor + gen = new_gen + + +def generate_dict_of_neighbors(parent1, parent2): + dict_of_neighbors = {} + for i in range(0, len(parent1)): + list_of_neighbors = [] + element = parent1[i] + if i == 0: + left_neighbor1 = parent1[-1] + right_neighbor1 = parent1[i + 1] + elif i == (len(parent1) - 1): + left_neighbor1 = parent1[i - 1] + right_neighbor1 = parent1[0] + else: + left_neighbor1 = parent1[i - 1] + right_neighbor1 = parent1[i + 1] + + list_of_neighbors.extend([left_neighbor1, right_neighbor1]) + + index = parent2.index(element) + if index == 0: + left_neighbor2 = parent2[-1] + right_neighbor2 = parent2[index + 1] + elif index == (len(parent2) - 1): + left_neighbor2 = parent2[index - 1] + right_neighbor2 = parent2[0] + else: + left_neighbor2 = parent2[index - 1] + right_neighbor2 = parent2[index + 1] + + if left_neighbor2 not in list_of_neighbors: + list_of_neighbors.append(left_neighbor2) + if right_neighbor2 not in list_of_neighbors: + list_of_neighbors.append(right_neighbor2) + + dict_of_neighbors[element] = list_of_neighbors + + return dict_of_neighbors + + +def mutation_function(population, travel_map): + mutation_percentage = random.random() + if mutation_percentage <= PERCENT_OF_MUTATION: + count_individual_for_mutation = round(len(population) * mutation_percentage) + mutants = set() + for i in range(0, count_individual_for_mutation): + while True: + individual_for_mutation = random.randint(0, len(population) - 1) + if individual_for_mutation not in mutants: + mutants.add(individual_for_mutation) + candidate_mutant = population[individual_for_mutation] + while True: + chromosome1 = random.randint(0, len(candidate_mutant[1]) - 1) + chromosome2 = random.randint(0, len(candidate_mutant[1]) - 1) + if chromosome1 != chromosome2: + candidate_mutant[1][chromosome1], candidate_mutant[1][chromosome2] = candidate_mutant[1][chromosome2], candidate_mutant[1][chromosome1] + + candidate_mutant_priority = adaptation_function(candidate_mutant[1], travel_map) + mutant = (candidate_mutant_priority, candidate_mutant[1]) + + if mutant not in population: + population[individual_for_mutation] = mutant + + break + break + + + + + + + + + diff --git a/bin/Classess/__pycache__/Track.cpython-38.pyc b/bin/Classess/__pycache__/Track.cpython-38.pyc new file mode 100644 index 0000000..c6360be Binary files /dev/null and b/bin/Classess/__pycache__/Track.cpython-38.pyc differ diff --git a/bin/Classess/__pycache__/Travel.cpython-38.pyc b/bin/Classess/__pycache__/Travel.cpython-38.pyc index 12b9109..995990e 100644 Binary files a/bin/Classess/__pycache__/Travel.cpython-38.pyc and b/bin/Classess/__pycache__/Travel.cpython-38.pyc differ diff --git a/bin/main/main.py b/bin/main/main.py index 6032f77..8a65016 100644 --- a/bin/main/main.py +++ b/bin/main/main.py @@ -56,14 +56,11 @@ def Fill(bool): travel.points_coord.append(field.small_field_canvas.coords(field.canvas_small_images[0])) travel.points_coord.extend(field.mines_coord) - print(travel.points_coord) for i in range(0, len(travel.points_coord)): travel.points_map[i + 1] = travel.points_coord[i] - # print(travel.points_map) - # key = list(travel.points_map.keys()) - # print(key) - tr.genetic_algorithm(travel.points_map) + + print(travel.points_map) for i in range(0, len(field.canvas_small_images)): @@ -202,71 +199,128 @@ def create_action_list(states, index): create_action_list(states, states.index(state_parent)) -def MouseClickEvent(event): +def MouseClickEvent(track): global fringe global explored global action_list - start_position = field.small_field_canvas.coords(player.image_canvas_id) - end_position = [] + print("The best individual is: {} {}".format(track[1], track[0])) + for point in range(0, len(track[1]) + 1): + start_position = field.small_field_canvas.coords(player.image_canvas_id) + if point == len(track[1]): + end_position = travel.points_map[1] + else: + end_position = travel.points_map[track[1][point]] - # print("Pierwsza pozycja: {} {}".format(start_position[0], start_position[1])) + node = nd.Node() + if len(fringe) == 0: + node.state.coord = start_position + node.state.direction = "east" + else: + states = [] + for k in range(0, len(fringe)): + new_state = fringe[k].state.coord + states.append(new_state) + start_node = fringe[-1] - for i in range(0, len(field.canvas_small_images)): - img_coords = field.small_field_canvas.coords(field.canvas_small_images[i]) - if (img_coords[0] <= event.x and event.x <= img_coords[0] + IMAGE_SIZE) and (img_coords[1] <= event.y and event.y <= img_coords[1] + IMAGE_SIZE): - end_position = img_coords - print("Color cost: ", field.cell_expense[i]) + node.state.coord = start_node.state.coord + node.state.direction = start_node.state.direction - # if len(end_position) == 2: - # print("Koncowa pozycja: {} {}".format(end_position[0], end_position[1])) + fringe.clear() + explored.clear() + action_list.clear() + fringe = nd.graph_search_A(fringe, explored, node.state, end_position) + # fringe = nd.graph_search(fringe, explored, node.state, end_position) - node = nd.Node() - if len(fringe) == 0: - node.state.coord = start_position - node.state.direction = "east" - else: states = [] - for k in range(0, len(fringe)): - new_state = fringe[k].state.coord + goal_all = [] + for i in range(0, len(fringe)): + new_state = [fringe[i].state.coord, fringe[i].state.direction] states.append(new_state) - start_node = fringe[-1] + if end_position[0] == fringe[i].state.coord[0] and end_position[1] == fringe[i].state.coord[1]: + goal_all.append(fringe[i]) - node.state.coord = start_node.state.coord - node.state.direction = start_node.state.direction - - fringe.clear() - explored.clear() - action_list.clear() - fringe = nd.graph_search_A(fringe, explored, node.state, end_position) - # fringe = nd.graph_search(fringe, explored, node.state, end_position) + elem_min = goal_all[0] + for i in range(1, len(goal_all)): + if elem_min.priority > goal_all[i].priority: + elem_min = goal_all[i] + index = fringe.index(elem_min) + fringe = fringe[:index + 1] - states = [] - goal_all = [] - for i in range(0, len(fringe)): - new_state = [fringe[i].state.coord, fringe[i].state.direction] - states.append(new_state) - if end_position[0] == fringe[i].state.coord[0] and end_position[1] == fringe[i].state.coord[1]: - goal_all.append(fringe[i]) + create_action_list(states, -1) - elem_min = goal_all[0] - for i in range(1, len(goal_all)): - if elem_min.priority > goal_all[i].priority: - elem_min = goal_all[i] - index = fringe.index(elem_min) - fringe = fringe[:index + 1] + # for i in range(0, len(fringe)): + # print('Node{} = State: {} {}, Parent: {} {} {}, Action: {}'.format(i + 1, fringe[i].state.coord, fringe[i].state.direction, fringe[i].parent[0], fringe[i].parent[1], fringe[i].parent[2], fringe[i].action)) - create_action_list(states, -1) + # print(action_list) + # Start moving + AutoMove() + DrawFlag() + + time.sleep(SLEEP_AFTER_CHECK_MINE) + + + # start_position = field.small_field_canvas.coords(player.image_canvas_id) + # end_position = [] + # + # # print("Pierwsza pozycja: {} {}".format(start_position[0], start_position[1])) + # + # for i in range(0, len(field.canvas_small_images)): + # img_coords = field.small_field_canvas.coords(field.canvas_small_images[i]) + # if (img_coords[0] <= event.x and event.x <= img_coords[0] + IMAGE_SIZE) and (img_coords[1] <= event.y and event.y <= img_coords[1] + IMAGE_SIZE): + # end_position = img_coords + # print("Color cost: ", field.cell_expense[i]) + # + # # if len(end_position) == 2: + # # print("Koncowa pozycja: {} {}".format(end_position[0], end_position[1])) + # + # node = nd.Node() + # if len(fringe) == 0: + # node.state.coord = start_position + # node.state.direction = "east" + # else: + # states = [] + # for k in range(0, len(fringe)): + # new_state = fringe[k].state.coord + # states.append(new_state) + # start_node = fringe[-1] + # + # node.state.coord = start_node.state.coord + # node.state.direction = start_node.state.direction + # + # fringe.clear() + # explored.clear() + # action_list.clear() + # fringe = nd.graph_search_A(fringe, explored, node.state, end_position) + # # fringe = nd.graph_search(fringe, explored, node.state, end_position) + # + # states = [] + # goal_all = [] # for i in range(0, len(fringe)): - # print('Node{} = State: {} {}, Parent: {} {} {}, Action: {}'.format(i + 1, fringe[i].state.coord, fringe[i].state.direction, fringe[i].parent[0], fringe[i].parent[1], fringe[i].parent[2], fringe[i].action)) - - print(action_list) - - - - # Start moving - AutoMove() + # new_state = [fringe[i].state.coord, fringe[i].state.direction] + # states.append(new_state) + # if end_position[0] == fringe[i].state.coord[0] and end_position[1] == fringe[i].state.coord[1]: + # goal_all.append(fringe[i]) + # + # elem_min = goal_all[0] + # for i in range(1, len(goal_all)): + # if elem_min.priority > goal_all[i].priority: + # elem_min = goal_all[i] + # index = fringe.index(elem_min) + # fringe = fringe[:index + 1] + # + # create_action_list(states, -1) + # + # # for i in range(0, len(fringe)): + # # print('Node{} = State: {} {}, Parent: {} {} {}, Action: {}'.format(i + 1, fringe[i].state.coord, fringe[i].state.direction, fringe[i].parent[0], fringe[i].parent[1], fringe[i].parent[2], fringe[i].action)) + # + # print(action_list) + # + # + # + # # Start moving + # AutoMove() def PutMines(mines_array): @@ -341,19 +395,19 @@ def DrawFlag(): field.small_field_canvas.create_image(player.current_x, player.current_y, anchor=NW, image=field.flag_img) -def IsItMine(): - visited = 0 # 0 - not mine; 1 - on this mine for the first time; 2 - already been on this mine - - # Checks if the player is on the mine - for i in field.mines_coord: - if i[0] == player.current_x and i[1] == player.current_y: - visited = 1 - # Checks if the player has already been on this mine - for y in field.visited_mines: - if y[0] == player.current_x and y[1] == player.current_y: - visited = 2 - if visited == 1: - DrawFlag() +# def IsItMine(): +# visited = 0 # 0 - not mine; 1 - on this mine for the first time; 2 - already been on this mine +# +# # Checks if the player is on the mine +# for i in field.mines_coord: +# if i[0] == player.current_x and i[1] == player.current_y: +# visited = 1 +# # Checks if the player has already been on this mine +# for y in field.visited_mines: +# if y[0] == player.current_x and y[1] == player.current_y: +# visited = 2 +# if visited == 1: +# DrawFlag() def AutoMove(): @@ -363,7 +417,7 @@ def AutoMove(): # Move once Action(action) # Check if player on mine and if yes, draw flag - IsItMine() + # IsItMine() # Update main window field.win.update() @@ -376,13 +430,13 @@ def DrawRectangle(): color = None # Chose color for rectangle for i in range(len(field.cell_expense)): - if field.cell_expense[i] == 10: + if field.cell_expense[i] == standard_cell_cost: color = "None" - elif field.cell_expense[i] == 20: + elif field.cell_expense[i] == sand_cell_cost: color = "yellow" - elif field.cell_expense[i] == 40: + elif field.cell_expense[i] == water_cell_cost: color = "dodger blue" - elif field.cell_expense[i] == 5: + elif field.cell_expense[i] == swamp_cell_cost: color = "green4" if color != "None": field.small_field_canvas.create_rectangle(x, y, x + IMAGE_SIZE + 2, y + IMAGE_SIZE + 2, width=2, outline=color) @@ -415,8 +469,15 @@ def CostingOfCells(): def click_button(): btn.destroy() - label = Label(field.win, text='Prepod lox\nPrepod lox\nPrepod lox\nPrepod lox\nPrepod lox\nPrepod lox\n', fg='black') + label = Label(field.win, text="Wait... AI conquers the world!", fg='black') label.place(x=50, y=570) + field.win.update() + track = tr.genetic_algorithm(travel.points_map) + + track[1].remove(1) + label.config(text=track[1]) + field.win.update() + MouseClickEvent(track) def main(): @@ -433,7 +494,7 @@ def main(): foreground="#ccc", # цвет текста padx="20", # отступ от границ до содержимого по горизонтали pady="8", # отступ от границ до содержимого по вертикали - font="16", # высота шрифта + font="24", # высота шрифта command=click_button ) @@ -478,7 +539,7 @@ def main(): # Rectangle() # Binding keyboard press to function # field.win.bind("", Action) - field.small_field_canvas.bind("", MouseClickEvent) + # field.small_field_canvas.bind("", MouseClickEvent) # Starting mainloop for window field.win.mainloop() diff --git a/files/large_images/depositphotos_2960109-stock-photo-plowed-field - Copy (10).png b/files/large_images/depositphotos_2960109-stock-photo-plowed-field - Copy (10).png new file mode 100644 index 0000000..7c5f2cb Binary files /dev/null and b/files/large_images/depositphotos_2960109-stock-photo-plowed-field - Copy (10).png differ diff --git a/files/large_images/depositphotos_2960109-stock-photo-plowed-field - Copy (11).png b/files/large_images/depositphotos_2960109-stock-photo-plowed-field - Copy (11).png new file mode 100644 index 0000000..7c5f2cb Binary files /dev/null and b/files/large_images/depositphotos_2960109-stock-photo-plowed-field - Copy (11).png differ diff --git a/files/large_images/depositphotos_2960109-stock-photo-plowed-field - Copy (12).png b/files/large_images/depositphotos_2960109-stock-photo-plowed-field - Copy (12).png new file mode 100644 index 0000000..7c5f2cb Binary files /dev/null and b/files/large_images/depositphotos_2960109-stock-photo-plowed-field - Copy (12).png differ diff --git a/files/large_images/depositphotos_2960109-stock-photo-plowed-field - Copy (3).png b/files/large_images/depositphotos_2960109-stock-photo-plowed-field - Copy (3).png new file mode 100644 index 0000000..7c5f2cb Binary files /dev/null and b/files/large_images/depositphotos_2960109-stock-photo-plowed-field - Copy (3).png differ diff --git a/files/large_images/depositphotos_2960109-stock-photo-plowed-field - Copy (4).png b/files/large_images/depositphotos_2960109-stock-photo-plowed-field - Copy (4).png new file mode 100644 index 0000000..7c5f2cb Binary files /dev/null and b/files/large_images/depositphotos_2960109-stock-photo-plowed-field - Copy (4).png differ diff --git a/files/large_images/depositphotos_2960109-stock-photo-plowed-field - Copy (5).png b/files/large_images/depositphotos_2960109-stock-photo-plowed-field - Copy (5).png new file mode 100644 index 0000000..7c5f2cb Binary files /dev/null and b/files/large_images/depositphotos_2960109-stock-photo-plowed-field - Copy (5).png differ diff --git a/files/large_images/depositphotos_2960109-stock-photo-plowed-field - Copy (6).png b/files/large_images/depositphotos_2960109-stock-photo-plowed-field - Copy (6).png new file mode 100644 index 0000000..7c5f2cb Binary files /dev/null and b/files/large_images/depositphotos_2960109-stock-photo-plowed-field - Copy (6).png differ diff --git a/files/large_images/depositphotos_2960109-stock-photo-plowed-field - Copy (7).png b/files/large_images/depositphotos_2960109-stock-photo-plowed-field - Copy (7).png new file mode 100644 index 0000000..7c5f2cb Binary files /dev/null and b/files/large_images/depositphotos_2960109-stock-photo-plowed-field - Copy (7).png differ diff --git a/files/large_images/depositphotos_2960109-stock-photo-plowed-field - Copy (8).png b/files/large_images/depositphotos_2960109-stock-photo-plowed-field - Copy (8).png new file mode 100644 index 0000000..7c5f2cb Binary files /dev/null and b/files/large_images/depositphotos_2960109-stock-photo-plowed-field - Copy (8).png differ diff --git a/files/large_images/depositphotos_2960109-stock-photo-plowed-field - Copy (9).png b/files/large_images/depositphotos_2960109-stock-photo-plowed-field - Copy (9).png new file mode 100644 index 0000000..7c5f2cb Binary files /dev/null and b/files/large_images/depositphotos_2960109-stock-photo-plowed-field - Copy (9).png differ diff --git a/files/small_images/depositphotos_2960109-stock-photo-plowed-field — Copy(10).png b/files/small_images/depositphotos_2960109-stock-photo-plowed-field — Copy(10).png new file mode 100644 index 0000000..c958339 Binary files /dev/null and b/files/small_images/depositphotos_2960109-stock-photo-plowed-field — Copy(10).png differ diff --git a/files/small_images/depositphotos_2960109-stock-photo-plowed-field — Copy(11).png b/files/small_images/depositphotos_2960109-stock-photo-plowed-field — Copy(11).png new file mode 100644 index 0000000..c958339 Binary files /dev/null and b/files/small_images/depositphotos_2960109-stock-photo-plowed-field — Copy(11).png differ diff --git a/files/small_images/depositphotos_2960109-stock-photo-plowed-field — Copy(12).png b/files/small_images/depositphotos_2960109-stock-photo-plowed-field — Copy(12).png new file mode 100644 index 0000000..c958339 Binary files /dev/null and b/files/small_images/depositphotos_2960109-stock-photo-plowed-field — Copy(12).png differ diff --git a/files/small_images/depositphotos_2960109-stock-photo-plowed-field — Copy(3).png b/files/small_images/depositphotos_2960109-stock-photo-plowed-field — Copy(3).png new file mode 100644 index 0000000..c958339 Binary files /dev/null and b/files/small_images/depositphotos_2960109-stock-photo-plowed-field — Copy(3).png differ diff --git a/files/small_images/depositphotos_2960109-stock-photo-plowed-field — Copy(4).png b/files/small_images/depositphotos_2960109-stock-photo-plowed-field — Copy(4).png new file mode 100644 index 0000000..c958339 Binary files /dev/null and b/files/small_images/depositphotos_2960109-stock-photo-plowed-field — Copy(4).png differ diff --git a/files/small_images/depositphotos_2960109-stock-photo-plowed-field — Copy(5).png b/files/small_images/depositphotos_2960109-stock-photo-plowed-field — Copy(5).png new file mode 100644 index 0000000..c958339 Binary files /dev/null and b/files/small_images/depositphotos_2960109-stock-photo-plowed-field — Copy(5).png differ diff --git a/files/small_images/depositphotos_2960109-stock-photo-plowed-field — Copy(6).png b/files/small_images/depositphotos_2960109-stock-photo-plowed-field — Copy(6).png new file mode 100644 index 0000000..c958339 Binary files /dev/null and b/files/small_images/depositphotos_2960109-stock-photo-plowed-field — Copy(6).png differ diff --git a/files/small_images/depositphotos_2960109-stock-photo-plowed-field — Copy(7).png b/files/small_images/depositphotos_2960109-stock-photo-plowed-field — Copy(7).png new file mode 100644 index 0000000..c958339 Binary files /dev/null and b/files/small_images/depositphotos_2960109-stock-photo-plowed-field — Copy(7).png differ diff --git a/files/small_images/depositphotos_2960109-stock-photo-plowed-field — Copy(8).png b/files/small_images/depositphotos_2960109-stock-photo-plowed-field — Copy(8).png new file mode 100644 index 0000000..c958339 Binary files /dev/null and b/files/small_images/depositphotos_2960109-stock-photo-plowed-field — Copy(8).png differ diff --git a/files/small_images/depositphotos_2960109-stock-photo-plowed-field — Copy(9).png b/files/small_images/depositphotos_2960109-stock-photo-plowed-field — Copy(9).png new file mode 100644 index 0000000..c958339 Binary files /dev/null and b/files/small_images/depositphotos_2960109-stock-photo-plowed-field — Copy(9).png differ diff --git a/resources/Globals.py b/resources/Globals.py index 5addf56..01e489d 100644 --- a/resources/Globals.py +++ b/resources/Globals.py @@ -9,11 +9,11 @@ WINDOW_Y = 950 # Size of small image IMAGE_SIZE = 50 -MIN_AMOUNT_OF_MINES = 0 +MIN_AMOUNT_OF_MINES = 6 MAX_AMOUNT_OF_MINES = 11 AMOUNT_OF_MINES = random.randint(MIN_AMOUNT_OF_MINES, MAX_AMOUNT_OF_MINES) -DELAY_TIME = 0.5 +DELAY_TIME = 0.2 STEP = IMAGE_SIZE + 5 @@ -26,7 +26,13 @@ amount_of_water_cells = 10 water_cell_cost = 40 amount_of_swamp_cells = 10 -swamp_cell_cost = 5 +swamp_cell_cost = 80 x_start = 5 y_start = 5 + +NUMBER_OF_INDIVIDUALS_FOR_DUEL = 4 +NUMBER_OF_POINTS_PERMUTATION = 10 +PERCENT_OF_MUTATION = 0.01 +PERCENT_OF_OUTGOING_INDIVIDUALS = 0.03 +SLEEP_AFTER_CHECK_MINE = 1 diff --git a/resources/__pycache__/Globals.cpython-38.pyc b/resources/__pycache__/Globals.cpython-38.pyc index b52aa34..4b19e60 100644 Binary files a/resources/__pycache__/Globals.cpython-38.pyc and b/resources/__pycache__/Globals.cpython-38.pyc differ