Reducing
Trials and Errors
Model: When
trials and errors are scattered in their results, an objective function that
can measure the cost or benefit will help with convergence. If the samples are
large, a batch analysis mode is recommended. The approach to minimize or
maximize the objective function is also possible via gradient descent methods
but the use of simulated annealing can overcome local minimum even if the cost
is higher because it will accept with a certain probability. In Simulated
annealing, the current cost is computed, and the new cost is based on the
direction of change. If the cost improves, the temperature decreases.
Sample
implementation follows:
def
annealingoptimize(domain,costf,T=10000.0,cool=0.95,step=1):
# Initialize the values randomly
vec=[float(random.randint(domain[i][0],domain[i][1]))
for i in range(len(domain))]
while T>0.1:
# Choose one of the indices
i=random.randint(0,len(domain)-1)
# Choose a direction to change it
dir=random.randint(-step,step)
# Create a new list with one of the
values changed
vecb=vec[:]
vecb[i]+=dir
if vecb[i]<domain[i][0]:
vecb[i]=domain[i][0]
elif vecb[i]>domain[i][1]:
vecb[i]=domain[i][1]
# Calculate the current cost and the
new cost
ea=costf(vec)
eb=costf(vecb)
p=pow(math.e,(-eb-ea)/T)
# Is it better, or does it make the
probability
# cutoff?
if(eb<ea or random.random(
)<p):
vec=vecb
# Decrease the temperature
T=T*cool
return vec
No comments:
Post a Comment