As the title suggests, I've been trying to create a lattice (Poset) generator from a positive integer parameter n which represents the number of nodes.
The reason why I'm trying to do this is because I want to create hasse diagrams of lattices for fun, but doing so by hand is a very tiring process and i want an algorithm to help me draw my lattices. Preferably in Typescript where I can plug them in Motion Canvas, although having a pseudocode would also be great and an explanation as to why the algorithm works would be super!
However, I've only been able to create join semilattice generator and I honestly haven't found any useful resources online that could help me.
Here's the code for the curious (not sure how much this will help, though):
from random import randint
from itertools import combinations
# join
def build_semilattice(n):
lattice = [[] for i in range(n)]
batches = [[0]] # add the least
step = 1
while step < n-1: # ou step != n + 1
k = randint(step,n-2)
batches.append([i for i in range(step, k+1)])
step = k + 1
batches.append([n-1]) # add the greatest
print(batches)
for batch in range(len(batches) - 1):
for a,b in combinations(batches[batch], 2):
k = randint(batches[batch + 1][0], batches[batch + 1][-1])
lattice[a].append(k), lattice[b].append(k)
return lattice
print(build_semilattice(10))
Thank you very much for your answer!