Monte Carlo
methods
Model: Monte-Carlo tries to solve
deterministic problems using optimizations based on probabilistic
interpretations. It draws samples from a probability distribution. Simulated
Annealing is a special case of Monte-Carlo. 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