Moortiii

GA - Graph

Feb 7th, 2021
611
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.91 KB | None | 0 0
  1. from __future__ import annotations
  2. from typing import List
  3. import itertools
  4. import random
  5.  
  6. # The chromosome is as follows:
  7. # "101001"
  8. # [Node(1), Node(0), Node(1), Node(0), Node(0), Node(1)]
  9.  
  10. class Node:
  11.   _id = itertools.count().__next__
  12.  
  13.   def __repr__(self):
  14.     return f'{self.index} -> {self.next}'
  15.  
  16.   def __init__(self, value):
  17.     self.value = value
  18.     self.index = Node._id()
  19.     self.next: Node = None
  20.  
  21.   def set_next(self, next: Node):
  22.     self.next = next
  23.  
  24. class Graph:
  25.   def __init__(self, node_count):
  26.     self.node_count = node_count
  27.     self.nodes = self.generate_nodes()
  28.  
  29.   def generate_nodes(self):
  30.     # create nodes
  31.     nodes: List[Node] = [
  32.       Node(random.randint(0, 1)) for _ in range(self.node_count)]
  33.  
  34.     # create edges
  35.     for node in nodes:
  36.       if random.randint(0, 2) >= 1:
  37.         edge: Node = random.choice(nodes)
  38.  
  39.         while True:
  40.           if (edge.index == node.index):
  41.             edge = random.choice(nodes)
  42.             continue
  43.            
  44.           if(node.next and edge.next):
  45.             if(node.index == edge.next.index):
  46.               if(edge.index == node.next.index):
  47.                 edge = random.choice(nodes)
  48.                 continue
  49.          
  50.           if node.next and edge.next:
  51.             print(f"{node.index} -> {edge.next.index}")
  52.             print(f"{edge.index} -> {node.next.index}")
  53.  
  54.           break
  55.  
  56.         node.next = edge
  57.    
  58.     return nodes
  59.  
  60.   def fitness(self):
  61.     """ The graph only uses black and white, as a result, a solution is
  62.    either optimal, or invalid. """
  63.     fitness_score = 1
  64.  
  65.     for node in self.nodes:
  66.       if node.next and node.next.value == node.value:
  67.         fitness_score = 0
  68.    
  69.     return fitness_score
  70.  
  71. graph = Graph(5)
  72.  
  73. # for node in graph.nodes:
  74. #   print(node)
  75.  
  76. # print("Chromosome:", ''.join(str(node.value) for node in graph.nodes))
  77.  
  78. # print("Fitness:", graph.fitness())
Advertisement
Add Comment
Please, Sign In to add comment