SPO
Class
The SPO
class implements the Spiral Optimization (SPO) algorithm. This algorithm is used for optimization towards a target string.
Attributes
goal
(torch.Tensor): The goal string to be optimized.m
(int): Number of search points.k_max
(int): Maximum number of iterations.n_dim
(int): Length of the goal string.points
(torch.Tensor): The search points.center
(torch.Tensor): The center point.
Methods
__init__(self, goal: str = None, m: int = 10, k_max: int = 1000)
The constructor for the SPO
class. Initializes the search points and the center.
Parameters
goal
(str, optional): The goal string to be optimized.m
(int, optional): Number of search points. Default is 10.k_max
(int, optional): Maximum number of iterations. Default is 1000.
Example
_step_rate(self, k)
Defines the step rate function.
Parameters
k
(int): Current iteration.
Returns
step_rate
(float): Step rate for the current iteration.
Example
_update_points(self, k)
Updates the search points based on the spiral model.
Parameters
k
(int): Current iteration.
Example
_update_center(self)
Finds the best search point and sets it as the new center.
Example
optimize(self)
Runs the optimization loop. Updates the search points and the center for a given number of iterations.
Example
best_string(self)
Converts the best found point to its string representation.
Returns
best_string
(str): The best string.
Example
Usage Examples
Example 1: Optimize a String
In this example, we will optimize the string "Attention is all you need" using 100 search points and 1000 iterations.
spo = SPO(goal="Attention is all you need", m=100, k_max=1000)
spo.optimize()
print("Best Matched String:", spo.best_string())
Example 2: Using a Different Goal String
In this example, we will optimize the string "Hello, World!" using 100 search points and 1000 iterations.
spo = SPO(goal="Hello, World!", m=100, k_max=1000)
spo.optimize()
print("Best Matched String:", spo.best_string())
Example 3: Using a Different Number of Search Points
In this example, we will optimize the string "Attention is all you need" using 200 search points and 1000 iterations.