URI: 
       [HN Gopher] Ink and Switch Constraint System (2023)
       ___________________________________________________________________
        
       Ink and Switch Constraint System (2023)
        
       Author : mpweiher
       Score  : 84 points
       Date   : 2025-04-18 17:09 UTC (18 hours ago)
        
  HTML web link (www.inkandswitch.com)
  TEXT w3m dump (www.inkandswitch.com)
        
       | dhash wrote:
       | One of the cited references is Guillermo Webster -- and while the
       | article lists uncmin as the desired artifact, the project that
       | uncmin was developed for takes the concept beyond layout to back
       | solving for desired program outputs.
       | 
       | Carbide [0] is the project that encapsulated some of this in a
       | workable demo. It's really cool!
       | 
       | [0] https://alpha.trycarbide.com/
        
       | jauntywundrkind wrote:
       | See also their blog post on Fuzzy Constraints (2023).
       | https://www.inkandswitch.com/untangle/
       | 
       | Madly in love with how forward a frontier Ink & Switch cuts
       | towards. Trying to make software less of a handcrafted artifact
       | that each individual corporation builds on their own, as they see
       | fit, and making computing a broader more universal project, with
       | more regular hooks for humans to get themselves in the loop.
       | 
       | A lot of "why are we still writing dead programs" vibes, in great
       | ways. https://jackrusher.com/strange-loop-2022/
       | https://news.ycombinator.com/item?id=33270235 (181 points, Oct
       | 2022, 61 comments)
        
       | nyrikki wrote:
       | A reminder, for those who find TAOCP useful, Knuth released
       | "Volume 4 Fascicle 7, Constraint Satisfaction" last month. It
       | connected a lots of dots for me, but like most of TAOCP may/ or
       | may not be useful standalone depending on the individual.
       | 
       | It helped unify what can be a complex intersection of fields with
       | conflicting terms in a way that I could guess the direction this
       | post was going.
        
       | Animats wrote:
       | Nice.
       | 
       | Constraint solving like that has been a feature in CAD programs
       | for years. Here's Autodesk Inventor's 2D sketch mode.[1] You get
       | an error if you try to overconstrain something. There's a
       | symbolic solver checking for over-constraint.
       | 
       | Under-constraint is harder to deal with. There's a count of the
       | number of additional constraints needed to specify the drawing
       | fully. You don't have to get that count down to 0, but if you
       | aren't just sketching for illustration, it's expected that you
       | reach the fully constrained and dimensioned state before cutting
       | metal.
       | 
       | Scaling problems dominate as drawings get more complex. It's easy
       | to do this for high school geometry problems. It's hard to do it
       | for jet engines. User interface design for dense drawings is
       | really hard. What do you do when stuff is on top of other stuff?
       | The big, expensive CAD systems (Autodesk, Dassault, SolidWorks)
       | have struggled through the scaling problem.
       | 
       | [1] https://www.youtube.com/watch?v=r3LB0f-keL8
        
       | WillAdams wrote:
       | The comment on constraints which still blows me away is the
       | footnote on the readme for Dune 3D:
       | 
       | https://github.com/dune3d/dune3d
       | 
       | >1. I ended up directly using solvespace's solver instead of the
       | suggested wrapper code since it didn't expose all of the features
       | I needed. I also had to patch the solver to make it sufficiently
       | fast for the kinds of equations I was generating by symbolically
       | solving equations where applicable.
       | 
       | (anyone looking for an easy-to-use opensource 3D CAD program
       | should consider it)
       | 
       | For folks not familiar w/ Solvespace it's a light-weight 3D CAD
       | program: https://solvespace.com/index.pl
       | 
       | Probably a bit more approachable for folks is:
       | https://www.cadsketcher.com/ which adds the Solvespace constraint
       | solver to Blender.
        
       | Duanemclemore wrote:
       | This is a rad read. I love everything ink and switch does, and
       | Ivan's podcast "The Future of Coding."
       | 
       | There is an important age-old piece of advice though: "never ask
       | a man his salary, a woman her age, or Ivan when he's going to
       | publicly release hest."
        
         | jagged-chisel wrote:
         | Do they release any software? It's frustrating when Brett
         | Victor tells us how modeling our protagonist's path during
         | development is a boon for the developer ... and refuses to
         | release even a demo. I can read (and hear) about things Ink &
         | Switch have explored, but can we experience that, too?
         | 
         | I love the ideas these folks explore. I also want to explore -
         | but I don't have the time budget to learn and implement their
         | concepts. I can't speak for other software engineers, but I am
         | much more likely to improve on such work if I can experience it
         | first.
        
           | Duanemclemore wrote:
           | They do! https://github.com/inkandswitch
           | 
           | And Ivan's is here. https://github.com/ivanreese
           | 
           | But "public release of hest" was a joking reference to the
           | fact that he's stated quite clearly that the project is just
           | a testbed for him and will never be released. (No matter that
           | every once in a while it makes the rounds of sites like this
           | and everyone goes a-twitter...)
        
             | spiralganglion wrote:
             | https://ivanish.ca/never/
        
               | Duanemclemore wrote:
               | An awesome song and awesome story, even it weren't the
               | perfect response.
        
           | spiralganglion wrote:
           | Automerge started as a research prototype and is now a
           | widely-used substrate for building local-first apps:
           | https://automerge.org/
           | 
           | Our GitHub has a boatload of experiments:
           | https://github.com/orgs/inkandswitch/repositories
           | 
           | This is a fun afternoon just waiting for you:
           | http://feelingisreality.com
           | 
           | Muse started as a research project and turned into an app:
           | https://museapp.com/
           | 
           | Some of our essays have embedded versions of our prototypes
           | you can play with:
           | 
           | * Crosscut: https://www.inkandswitch.com/crosscut/
           | 
           | * Potluck: https://www.inkandswitch.com/potluck/
           | 
           | Alex Warth is currently working on a remake of Ivan
           | Sutherland's Sketchpad:
           | https://github.com/alexwarth/sutherland
           | 
           | There's probably a bunch more I'm forgetting.
        
       | keeganpoppen wrote:
       | i will just say that i think these guys do amazing, amazing, very
       | thoughtful work.
        
       | shoo wrote:
       | > In addition to Alex's relaxation-based solver, we tried several
       | gradient descent-based solvers, which resulted in better
       | convergence. The first was the uncmin from numericjs. Later, we
       | found a version of uncmin that was modified by Guillermo Webster
       | for his g9 project, which gave us even better results.
       | 
       | I was curious about what optimisation algorithm uncmin actually
       | was. The current code & docs do not cite any academic literature
       | apart from More et al, 1981 ("Testing unconstrained optimization
       | software").
       | 
       | But, the commit messages and comments in older versions of uncmin
       | [1] suggest uncmin is an implementation of BFGS.
       | 
       | In the scientific Python ecosystem, BFGS is used as the default
       | nonlinear optimisation method by scipy.optimize.minimize [2] if
       | your problem doesn't have any constraints or bounds. Scipy
       | optimize cites Nocedal & Wright - Numerical Optimization (2nd ed)
       | 2006 as a reference. BFGS is Algorithm 6.1 on page 140.
       | 
       | Nocedal & Wright say "the most popular quasi-Newton algorithm is
       | the BFGS method, named for its discoverers Broyden, Fletcher,
       | Goldfarb, and Shanno" after introducing quasi-Newton methods:
       | 
       | > Quasi-Newton methods, like steepest descent, require only the
       | gradient of the objective function to be supplied at each
       | iterate. By measuring the changes in gradients, they construct a
       | model of the objective function that is good enough to produce
       | superlinear convergence. The improvement over steepest descent is
       | dramatic, especially on difficult problems. Moreover, since
       | second derivatives are not required, quasi-Newton methods are
       | sometimes more efficient than Newton's method. [...]
       | 
       | > The development of automatic differentiation techniques has
       | made it possible to use Newton's method without requiring users
       | to supply second derivatives; see Chapter 8. Still, automatic
       | differentiation tools may not be applicable in many situations,
       | and it may be much more costly to work with second derivatives in
       | automatic differentiation software than with the gradient. For
       | these reasons, quasi-Newton methods remain appealing.
       | 
       | Interestingly, uncmin originally had a much more complex line-
       | search implementation, that was removed and replaced with a
       | simple one. Ucmin's current line search code agrees with
       | "Algorithm 3.1 (Backtracking Line Search)" from Nocedal & Wright,
       | with some implementation-defined choices of: an initial step size
       | of 1, first Wolfe condition checked with a constant of c_1 = 0.1,
       | and step size halved until first Wolfe condition satisfied.
       | 
       | One part of the uncmin code that I can't immediately reconcile
       | with equations from Nocedal & Wright is the code for updating
       | "H1". The commit message that introduced it says "Sherman-
       | Morrison for the BFGS update". The math seems to agree with the
       | update for H_k , the approximate inverted Hessian, on the
       | wikipedia page for BFGS [3] (with a quirk where one H_k should
       | arguably be a H_k^T, but the approximation H_k is meant to be
       | symmetric, provided BFGS doesn't break down, so that's probably
       | fine).
       | 
       | edit: Nocedal & Wright comment on some pitfalls with simple line
       | search procedures when implementing BFGS
       | 
       | > The performance of the BFGS method can degrade if the line
       | search is not based on the Wolfe conditions. For example, some
       | software implements an Armijo backtracking line search (see
       | Section 3.1): The unit step length alpha_k = 1 is tried first and
       | is successively decreased until the sufficient decrease condition
       | (3.6a) is satisfied. For this strategy, there is no guarantee
       | that the curvature condition y_k^T s_k > 0 (6.7) will be
       | satisfied by the chosen step, since a step length greater than 1
       | may be required to satisfy this condition. To cope with this
       | shortcoming, some implementations simply skip the BFGS update by
       | setting H_{k+1} = H_k when y_k^T s_k is negative or too close to
       | zero. This approach is not recommended, because the updates may
       | be skipped much too often to allow H_k to capture important
       | curvature information for the objective function f . In Chapter
       | 18 we discuss a damped BFGS update that is a more effective
       | strategy for coping with the case where the curvature condition
       | (6.7) is not satisfied.
       | 
       | "some software implements an Armijo backtracking line search (see
       | Section 3.1)" -- this appears to match uncmin's simple line
       | search code. I do not see any curvature condition check in the
       | uncmin code, so this could lead to slow convergence or failure
       | for some problems if the line search chooses a step size where
       | y_k^T s_k <= 0 .
       | 
       | [1]
       | https://github.com/sloisel/numeric/blame/656fa1254be540f4287...
       | [2]
       | https://docs.scipy.org/doc/scipy/reference/generated/scipy.o...
       | [3]
       | https://en.wikipedia.org/wiki/Broyden%E2%80%93Fletcher%E2%80...
        
       ___________________________________________________________________
       (page generated 2025-04-19 12:01 UTC)