Using Simulated Annealing to Solve Logic Puzzles
blog.pluszero.ca
blog.pluszero.ca
I haven't benchmarked it but it is pretty intuitive to read which is very important for these types of problems.
I once messed with something called "metropolis coupling", where you run multiple threads in parallel, with different thresholds for how often they accept worse solutions, i.e. one thread is "cold", one is slightly "hotter", and so on. If a hot thread's current solution is better than the solution of the neighbouring colder thread, the solutions are swapped. In this way the coldest thread (which is the one we're paying attention to) gets pulled out of the local minimum.
As I say, I messed with this once and it did seem to help. It seems to have been developed for inference in evolutionary phylogenetics, and is perhaps a bit obscure?
Yep, this is the sort of thing we study in our cooperative and adaptive algorithms class. Similar techniques to what you suggest are shown here https://books.google.ca/books?id=G5ML5EYch94C&pg=PA88&lpg=PA...
random.choice(range(0, i) + range(i+1, 4))
how is that different from random.choice(range(0, 4))?
Obviously no Pythonista, but playing around in the REPL I see no diff.https://en.wikipedia.org/wiki/Parallel_tempering
Markov-chain Monte-Carlo sampling gives a theoretical underpinning which explains why simulated annealing works in optimization.
https://github.com/shaungallagher/cheryls-murder/blob/master...
The code isn't very clean (it was written hastily as part of a hack days project at work) but the notebook walks you through it, so even if you're not familiar with Python, you'll get a sense of the technique.
If you don't have some form of continuity condition you are actually just doing random search.
https://ezekiel.encs.vancouver.wsu.edu/~cs330/archive/archiv...
There was plenty of research on this around 1985-1995 (the "second coming" of neural networks), but it died out with the hype because it was never an actually practical way to solve CSPs. Given the recent innovations in deep learning, it should eventually pick up again, to enable deep learners to solve constraint satisfaction subproblems within the same integrated architecture.
There's relational properties, combinations, and maybes all over
Gracias de todo modos ;)
Is there any way to tell whether this logic problem (or any other) is convex? Is it possible that the correct solution's 5-away neighbours all have very high costs (like 9+)? What prevents you from doing worse that brute force?
In practice it might not be possible to map the resulting graph on the D-Wave's architecture, I can't find any good documentation on the D-Wave though.