Esempio n. 1
0
 def __init__(self):
     self.evolution_time = 0
     self.best_individuals_cf = []
     self.worst_individuals_cf = []
     self.mean_cost_function_value = []
     self.std_cost_function_value = []
     self.best_individual = Individual()
def cross_indvidual_random(ind1: Individual, ind2: Individual) -> Individual:
    '''
    :param ind1:
    :param ind2:
    :return: new individual cross of ind1 and ind2
    '''
    random.seed(datetime.now())
    pos = random.randint(0, ind1.street_order.shape[0] - 1)
    il_el = random.randint(1, min(ind1.street_order.shape[0] - pos, 10))
    part1 = ind1.street_order[pos:pos + il_el].copy()
    new = ind2.street_order.copy()
    for i in range(0, len(part1)):
        j = 0
        while j < len(new):
            if part1[i] == new[j]:
                new = np.delete(new, j)
                break
            j += 1
    new = np.array(new)
    part1 = np.array(part1)
    child = Individual()
    pos2 = random.randint(0, len(new))
    tmp = np.concatenate((new[0:pos2], part1, new[pos2:len(new)]), axis=None)
    child.street_order = tmp
    child.genesis = combine_stats(stat1=ind1.genesis, stat2=ind2.genesis)
    child.genesis.cross_indvidual_random_counter += 1
    child.max_number_of_cars = ind1.max_number_of_cars
    child.number_of_cars = np.count_nonzero(child.street_order == -1)
    return child
def cross_indvidual_longest_common(ind1: Individual, ind2: Individual) -> Individual:
    '''
    :param ind1:
    :param ind2:
    :return: new individual cross of ind1 and ind2
    '''
    child = Individual()
    child.street_order = create_cross_table(np.copy(ind1.street_order), np.copy(ind2.street_order))
    child.genesis = combine_stats(stat1=ind1.genesis, stat2=ind2.genesis)

    child.genesis.cross_indvidual_longest_common_counter += 1
    child.max_number_of_cars = ind1.max_number_of_cars
    child.number_of_cars = np.count_nonzero(child.street_order == -1)
    return child
Esempio n. 4
0
def wrapper(func, *args, **kwargs):
    def wrapped():
        return func(*args, **kwargs)

    return wrapped


x = []
random = []
common = []

reapets_num = 250
for i in range(5, 250):
    print(i)
    first = Individual()
    second = Individual()
    first.street_order = np.random.randint(low=-1, high=297, size=i)
    first.street_order = np.insert(first.street_order, i - 3, -1)
    first.street_order = np.insert(first.street_order, i - 2, -1)
    first.street_order = np.insert(first.street_order, i - 1, -1)
    second.street_order = np.random.randint(low=-1, high=297, size=i)
    second.street_order = np.insert(second.street_order, i - 3, -1)
    second.street_order = np.insert(second.street_order, i - 2, -1)
    second.street_order = np.insert(second.street_order, i - 1, -1)
    wrapped = wrapper(cross_indvidual_random, first, second)
    wrappedd = wrapper(cross_indvidual_longest_common, first, second)

    x.append(i)
    random.append(timeit.timeit(wrapped, number=reapets_num))
    common.append(timeit.timeit(wrappedd, number=reapets_num))
Esempio n. 5
0
from data_structers.inputdata import InputData
from data_structers.evolutional_algorithm import evolution_simulator
import random
from datetime import datetime
import copy
import numpy as np
from import_data.distance_matrix_calculator import matrix_array_calculate
import os

random.seed(datetime.now())

data_set = 'trivial'

gmina = "../data/" + data_set

csv_output = "../Reports/" + 'tsp_' + data_set + ".csv"
order_outpur = "../Reports/" + 'tsp_' + data_set + ".txt"
best_solution = 1000000
matrix_array_calculate(gmina + "_streets.csv", gmina + "_distance_matrix")
inp_data = InputData(gmina)

x = Individual(inp_data)
for i in range(100000):
    x.street_order = np.arange(1, 7)
    np.random.shuffle(x.street_order)
    x.calculate_cost_value(inp_data)
    if x.cost_function_value < best_solution:
        best_solution = x.cost_function_value

print(best_solution)
        return func(*args, **kwargs)

    return wrapped


xx = []
y = []
yy = []
yyy = []
yyyy = []
yyyyy = []
yyyyyy = []

reapets_num = 3000
for i in range(5, 1000):
    x = Individual()
    x.street_order = np.random.randint(low=-1, high=297, size=i)
    x.street_order = np.insert(x.street_order, i - 3, -1)
    x.street_order = np.insert(x.street_order, i - 2, -1)
    x.street_order = np.insert(x.street_order, i - 1, -1)
    wrapped = wrapper(change_random_element, x)
    wrappedd = wrapper(swap_element_order, x)
    wrappeddd = wrapper(add_random_car, x)
    wrappedddd = wrapper(shift_car, x)
    wrappeddddd = wrapper(add_random_comeback, x)
    wrappedddddd = wrapper(delete_random_comeback, x)

    random_element_stat = []
    xx.append(i)
    y.append(timeit.timeit(wrapped, number=reapets_num))
    yy.append(timeit.timeit(wrappedd, number=reapets_num))