VRP-System / EV.py
EV.py
Raw
from random import randint

class evolution:
    
    # Evolution Requirements
    def getCities(parents):
        cities = list(parents[0][0].replace(" ",""))
        return cities

    def filterCities(child , cities):
        copy = cities.copy()
        for x in cities:
            if x in child:
                copy.remove(x)
        return copy

    def reflect(str):
        s = str.split()
        length = len(s)

        r1 = randint(0,int((length-1)/2))
        r2 = randint(int(length/2),length-1)

        s1 = s[r1]
        s2 = s[r2]

        s1 = s1[::-1]
        s2 = s2[::-1]

        s[r1] = s1
        s[r2] = s2

        individual = []
        for i in range(length-1):
            individual.append(s[i])
            individual.append(' ')

        individual.append(s[length-1])

        return ''.join(individual)

    def swap(str,r1,r2):
        l = list(str)
        c1 = str[r1]
        c2 = str[r2]
        if c1==" ":
            r1 += 1
            c1 = str[r1]
        if c2==" ":
            r2 += 1
            c2 = str[r2]
        l[r1] = c2
        l[r2] = c1
        return ''.join(l)

    def includeParents(parents):
        population = []

        for i in range(len(parents)):
            for j in range(2):
                population.append(parents[i][j])

        return population

    def includeRands(pop , rands):
        for x in rands:
            pop.append(x)
        return pop

    def testPopulation(pop,cities):
        f = 0
        for x in pop:
            for i in range(len(cities)-1):
                if x.count(cities[i]) != 1:
                    f += 1
                    print(x,' ',cities[i])
        print(f'{f} faliure')