Quick Tutorial
In this quick tutorial, we define two algorithms and show that they are oracle-equivalent.
The first algorithm,
Import linnaeus and Algorithm class,
import linnaeus as lin
from linnaeus import Algorithm
Define the first algorithm as algo1 with name Algoritm 1,
algo1 = Algorithm("Algorithm 1")
Add variables x1, x2, and x3 to algo1,
x1, x2, x3 = algo1.add_var("x1", "x2", "x3")
Add oracle gradf, gradient of f to algo1,
gradf = algo1.add_oracle("gradf")
Add update equations:
# x3 <- 2x1 - x2
algo1.add_update(x3, 2*x1 - x2)
# x2 <- x1
algo1.add_update(x2, x1)
# x1 <- x3 - 1/10*gradf(x3)
algo1.add_update(x1, x3 - 1/10*gradf(x3))
Parse algo1:
algo1.parse()
System parses algo1 and returns the update equations,
The second algorithm,
Define the second algorithm as algo2 and parse it:
algo2 = Algorithm("Algorithm 2")
xi1, xi2, xi3 = algo2.add_var("xi1", "xi2", "xi3")
gradf = algo2.add_oracle("gradf")
# xi3 <- xi1
algo2.add_update(xi3, xi1)
# xi1 <- xi1 - xi2 - 1/5*gradf(xi1)
algo2.add_update(xi1, xi1 - xi2 - 1/5*gradf(xi3))
# xi2 <- xi2 + 1/10*gradf(xi3)
algo2.add_update(xi2, xi2 + 1/10*gradf(xi3))
algo2.parse()
System parses algo2 and returns the update equations,
Check oracle equivalence :
lin.is_equivalent(algo1, algo2)
System returns
True
which shows that algo1 and algo2 are oracle-equivalent.