Skip to content

Instantly share code, notes, and snippets.

@mgronhol
Created May 4, 2020 09:51
Show Gist options
  • Save mgronhol/ec4baa7d6e795cb08c79c050e89e8a65 to your computer and use it in GitHub Desktop.
Save mgronhol/ec4baa7d6e795cb08c79c050e89e8a65 to your computer and use it in GitHub Desktop.
Find a set of parallels for machining vise
#!/usr/bin/env python
# https://github.com/mgronhol/infeasible
import Infeasible
solution = Infeasible.Solution()
## Find a set of parallels for a milling vise to get suitable clamping depths
@solution.must_satisfy
def no_larger_on_top_constraint( params, candidate ):
if len( candidate ) > 1:
for i in range( 1, len( candidate ) ):
if (candidate[i-1][1] < candidate[i][1]) or (candidate[i-1][0] < candidate[i][0]):
return False
return True
@solution.must_satisfy
def no_duplicate_parallels_constraint( params, candidate ):
return len( candidate ) == len( set( candidate ) )
@solution.must_satisfy
def no_too_large_stack_constraint( params, candidate ):
return len(candidate) < 3
@solution.is_valid
def target_height_reached( params, candidate ):
height = sum( c[0] for c in candidate )
return height == params["target"]
## Set of parallels
parallels = []
parallels.append( (5, 2) )
parallels.append( (10, 2) )
parallels.append( (15, 2) )
parallels.append( (20, 2) )
parallels.append( (6, 3) )
parallels.append( (11, 3) )
parallels.append( (16, 3) )
parallels.append( (21, 3) )
parallels.append( (7, 4) )
parallels.append( (12, 4) )
parallels.append( (17, 4) )
parallels.append( (22, 4) )
parallels.append( (8, 5) )
parallels.append( (13, 5) )
parallels.append( (18, 5) )
parallels.append( (23, 5) )
parallels.append( (9, 6) )
parallels.append( (14, 6) )
parallels.append( (19, 6) )
parallels.append( (24, 6) )
for z in range( 31 ):
dz = 45 - z
print( z, "mm below vise top surface (stack height: %i mm):" % dz )
res = solution.get( params = {"target": dz}, domain = parallels )
res = sorted( res, key = lambda s: -s[0][1] )
for sol in res:
print( " + ".join( "%ix%i" % (s[1], s[0]) for s in sol ) )
print( "" )
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment