Moortiii icon

GA - Graph

Moortiii | PRO | 02/07/21 02:45:19 PM UTC | 0 ⭐ | 904 👁️ | Never ⏰ | []
Python |

1.91 KB

|

None

|

0 👍

/

0 👎

from __future__ import annotations
from typing import List
import itertools
import random
 
# The chromosome is as follows:
# "101001"
# [Node(1), Node(0), Node(1), Node(0), Node(0), Node(1)]
 
class Node:
  _id = itertools.count().__next__
 
  def __repr__(self):
    return f'{self.index} -> {self.next}'
 
  def __init__(self, value):
    self.value = value
    self.index = Node._id()
    self.next: Node = None
  
  def set_next(self, next: Node):
    self.next = next
 
class Graph:
  def __init__(self, node_count):
    self.node_count = node_count
    self.nodes = self.generate_nodes()
 
  def generate_nodes(self):
    # create nodes
    nodes: List[Node] = [
      Node(random.randint(0, 1)) for _ in range(self.node_count)]
 
    # create edges
    for node in nodes:
      if random.randint(0, 2) >= 1:
        edge: Node = random.choice(nodes)
 
        while True:
          if (edge.index == node.index):
            edge = random.choice(nodes)
            continue
            
          if(node.next and edge.next):
            if(node.index == edge.next.index):
              if(edge.index == node.next.index):
                edge = random.choice(nodes)
                continue
          
          if node.next and edge.next:
            print(f"{node.index} -> {edge.next.index}")
            print(f"{edge.index} -> {node.next.index}")
 
          break
 
        node.next = edge
    
    return nodes
  
  def fitness(self):
    """ The graph only uses black and white, as a result, a solution is
    either optimal, or invalid. """
    fitness_score = 1
 
    for node in self.nodes:
      if node.next and node.next.value == node.value:
        fitness_score = 0
    
    return fitness_score
 
graph = Graph(5)
 
# for node in graph.nodes:
#   print(node)
 
# print("Chromosome:", ''.join(str(node.value) for node in graph.nodes))
 
# print("Fitness:", graph.fitness())

Comments