Discord
@hash/simulated-annealing
Simulation
2
0
Public

Simulated Annealing Example

This library contains an example of Simulated Annealing Search that you can use in your simulation to perform a maximizing optimzation search.

Simulated Annealing

Simulated Annealing is a stochastic search algorithm inspired by the annealing, or cooling, of atomic crystals in a solid. Each time step it randomly selects a "neighboring" solution and checks its fitness. If it's an improvement, it will automatically "move" to that solution, and if not, it still has a chance of doing so proportional to the current "temperature" of the optimization.

Integrating Into a Simulation

For the behavior to function, you'll need to write at least one custom behavior, and set a number of parameters in globals.json.

Global Parameters

The following parameters are needed for the @hash/sa-search/simulated_annealing.py behavior to function properly:

  • temp_reduction_rate - number: The rate at which the "temperature" of the search decreases
  • stop_temp - number: The "temperature" at which the search ends

Custom Behaviors

Your optimizing agent must have at least one custom behavior running before @hash/sa-search/simulated_annealing.py. This behavior must determine the "neighboring" solutions based on the current solution. In the spatial example in this project, literal neighbors are used.

This behavior must assign this list of solutions to state["neighboring_solutions"], and must ensure that each solution has a fitness field with a valid numerical value.

Initialization

To begin a Simulated Annealing optimization, initialize an agent with the proper behaviors and following fields:

{
  "behaviors": [
    "<custom>",
    "@hash/sa-search/simulated_annealing.py",
    ...
  ],
  "temp": 1,
  "fitness": 0,
  "neighboring_solutions": []
}