Ejemplo n.º 1
0
  def random_repair(self, i, m):
    '''transforms an infeasible solution into a feasible solution by random repair'''
    while (self.chromosome[i] != str(m)): #find knapsack with exceeded capacity
      i = choice(range(1, len(self.chromosome), 2))

    if self.chromosome[i - 1] == '1':
      c = Chromosome(self.chromosome[0:i - 1] + '00' + self.chromosome[i + 1: len(self.chromosome)])
      self.chromosome = c 
      self.knapsack_items_map = ItemList(ItemParser(RcParser().get_rc_items()).items).get_all_on_items(c, len(self.knapsacks))
      return
Ejemplo n.º 2
0
 def exe(self):
     for i in range(0, len(self.chromosome), 2):
         if choice(range(1, self.probabilty + 1)) == 1:
             if self.chromosome[i] == '1':
                 return Chromosome(self.chromosome[:i] + '00' +
                                   self.chromosome[i + 2:])
             elif self.chromosome[i] == '0':
                 return Chromosome(self.chromosome[:i] + '1' +
                                   str(randint(1,
                                               RcParser().get_m())) +
                                   self.chromosome[i + 2:])
     return self.chromosome
    def do_selection(self):
        '''performs roulette selection'''
        fsum = 0
        pop_fsum = []
        for i in range(len(self.population)):
            rc = RcParser()
            fitness_function = FitnessFunction(
                self.population[i],
                ItemList(ItemParser(rc.get_rc_items()).items).get_all_on_items(
                    self.population[i].solution,
                    RcParser().get_m()))
            fitness = fitness_function.sum_all_fitness()
            fsum = fsum + fitness
            pop_fsum.append(fitness)

        bound = uniform(0, fsum)
        curr_fsum = 0
        for i in range(len(self.population)):
            curr_fsum = curr_fsum + pop_fsum[i]
            if curr_fsum >= bound:
                return self.population[i]
Ejemplo n.º 4
0
if __name__ == '__main__':
    from parser import RcParser, ItemParser, KnapsackParser
    from chromosome import Chromosome
    from factory import ChromosomeFactory, PopulationFactory
    from crossover import OnePoint
    from item import ItemList
    from knapsack import KnapsackList
    from fitness import FitnessFunction
    from selection import RouletteSelection
    from population import Population
    from random import choice
    from mutation import Mutation
    from time import sleep

    rc = RcParser()
    items = ItemList(ItemParser(rc.get_rc_items()).items)
    knapsacks = KnapsackList(KnapsackParser(rc.get_rc_knapsacks()).knapsacks)
    n = rc.get_n()
    m = rc.get_m()
    print(
        'please note that the number of iterations must be greater than or equal to the number of items'
    )
    print('number of knapsacks = {0}'.format(m))
    print('number of items = {0}'.format(n))

    p = 10
    print('population size = ' + str(p))
    population = PopulationFactory(p, n, m).gen()
    iterations = 12
    print('iterations = {0}'.format(iterations))
    sleep(3)
Ejemplo n.º 5
0
def gen_item_list():
    return ItemList(ItemParser(RcParser().get_rc_items()).items)
Ejemplo n.º 6
0
if __name__ == '__main__':
  from parser import RcParser, ItemParser, KnapsackParser
  from chromosome import Chromosome
  from factory import ChromosomeFactory, PopulationFactory
  from crossover import OnePoint
  from item import ItemList
  from knapsack import KnapsackList
  from fitness import FitnessFunction
  from selection import RouletteSelection
  from population import Population
  from random import choice
  from mutation import Mutation
  from time import sleep

  rc = RcParser()
  items = ItemList(ItemParser(rc.get_rc_items()).items)
  knapsacks = KnapsackList(KnapsackParser(rc.get_rc_knapsacks()).knapsacks)
  n = rc.get_n()
  m = rc.get_m()
  print('please note that the number of iterations must be greater than or equal to the number of items')
  print('number of knapsacks = {0}'.format(m))
  print('number of items = {0}'.format(n))
  
  p = 10
  print('population size = ' + str(p))
  population = PopulationFactory(p, n, m).gen()
  iterations = 12
  print('iterations = {0}'.format(iterations))
  sleep(3)
  fittest_chromosome = None
  fittest_chromosomes = []
Ejemplo n.º 7
0
 def sum_all_fitness(self):
     '''returns total fitness of this chromosome'''
     fsum = 0
     for knapsack in range(1, RcParser().get_m() + 1):
         fsum = fsum + self.sum_single_fitness(knapsack)
     return fsum
Ejemplo n.º 8
0
 def get_knapsack_capacity(self, m):
     '''returns capacity of knapsack m'''
     return RcParser().get_rc_knapsacks()[m]