TSP 3: Finding a better hill
Hill climbing traps us in a minima / maxima, introducing a diversification step allows to break free, potentially finding better solutions.
I spend a lot of time talking. Probably more than I should and definitely more than people enjoy! Along the way however, I often get asked common programming questions, and while most of the time I have a good answer to hand it can be useful to have a reference.
(As well as a good opportunity to make sure what I’m talking about is reasonably correct.. 👀)
This project started in Dec 2021, let’s see if I can add one a week for a year. If there’s a topic you think I should cover then feel free to ping me. (I doubt there’s anyone here I don’t already know so you should be okay! 🙃)
Hill climbing traps us in a minima / maxima, introducing a diversification step allows to break free, potentially finding better solutions.
Given an initial solution, hill-climbing makes small changes to quickly improve it.
The first in a series of posts exploring different approaches to tackling the famous Traveling Salesperson problem.
An algorithmic approach to solving optimisation problems by breaking them into small subproblems and solving those first.
A Write-Ahead Log provides a durability guarantee by persisting state changes to disk.”
ACID compliance is an indicator of the viability of a database. Be warned however, as just because something is ACID compliant, does NOT mean that it will be...
The Chain of Responsibility is a behavioral design pattern that passes a request along a set of handlers, each one deciding to process the request or pass it...
Command Query Response Segregation is a software architecture pattern that splits responsibility of reads and writes on a system, unlocking advanced patterns...
A closure is a combination of an environment and a function, they’re used to enable data privacy and only reveal references to privileged functions.
A transactional outbox is an architecture pattern used to guarantee the sending of events after a mutation has been performed, but only after the data has be...
A bloom filter is a probabilistic data structure used to check set membership in constant time and space. They’re pretty cool.
SOLID is an acronym for several programming principles for object-orientated programming that aim to create understandable, readable, and testable code. I is...
SOLID is an acronym for several programming principles for object-orientated programming that aim to create understandable, readable, and testable code. I is...
SOLID is an acronym for several programming principles for object-orientated programming that aim to create understandable, readable, and testable code. L is...
SOLID is an acronym for several programming principles for object-orientated programming that aim to create understandable, readable, and testable code. O is...
SOLID is an acronym for several programming principles for object-orientated programming that aim to create understandable, readable, and testable code. S is...
Taking a random sample from N items is reasonably simple, but what if we don’t know the upper limit? How can we ensure each item is equally likely to be sele...
tldr; a repository is an interface that controls access and mutation of a domain aggregate to some persistance layer. It’s the middleman between the two.
Software engineering is an interesting place. We have roles like Architect, and talk a lot about architecture but rarely will you find any floor plans beyond...
Hexagonal architecture (or ports and adapters, depending on who you ask) is a software architecture pattern that concerns itself with the separation of appli...