python - 执行蒙特卡罗方法以找到 f 的最小值
问题描述
我正在考虑一个功能:
f(x) = 1 − exp −(x + 3)2 − 2 exp −(x − 2)2).
我的问题是:
编写一个 Python 函数,输入函数 f、初始猜测 x 和迭代次数 N,并执行以下操作:从初始 x 开始,然后进行 N 次迭代:
生成一个正态分布的随机数 δx
求成本 f(x + δx)。如果这小于当前成本 f(x),则用 x + δx 更新 x。否则保持 x 不变。
输出最终的 x。
我想尝试不同的 x 初始值,看看算法在哪里结束。
这是我的代码:
import numpy as np
fun = lambda x: 1 - np.exp(-(x+3)**2) - 2*np.exp(-(x-2)**2)
def monteCarlo(costFun = fun, x = 0., N=100, sigma = 1.):
'''Find a minimum of a function approximately using simulated annealing'''
cost = costFun(x)
for j in range(N):
T = 1. - float(j)/N #Temperature
dx = np.random.normal(scale = sigma)
newx = x + dx
newcost = costFun(newx)
p = np.random.random()
if newcost < cost or p < np.exp(-(newcost-cost)/T):
cost = newcost
x = newx
print('point: ' + str(x) + ', cost = ' + str(cost) + ', T = ' + str(T))
return
注意:我无法正确列出我的代码,但它从:'import numpy'开始。(我对这个论坛比较陌生)。
我认为我的 python 代码没有错误,但在最后阶段我很难改变 x 的初始值。
任何帮助将不胜感激。先感谢您。
解决方案
推荐阅读
- python - 在 tf.Graph() 下调用的函数中使用 tf.while_loop() 中的 tf.Variable() 创建和更新变量
- python - 如何安排python代码每天运行?
- python - Optuna 建议 float log=True
- list - 用 None 替换列表中的空元素
- httpclient - 我们可以使用 apache CloseableHttpAsyncClient 识别无法访问的 url
- r - 在对它们执行转换时跨列求和
- wpf - WPF Interaction.Behaviors/EventTrigger 如何更新 WPF 中的 UI?
- django - 我们如何计算 django 中相关表的日期时间字段的平均差异?
- javascript - 通过 Gmail API 发送回复电子邮件在回放中缺少线程
- php - 我是否需要声明要在 bind_result() 语句中使用的变量?