苏州企业网站制作设计公司,做网站如何找客户,最新网站建设的模板,旅游网站在提高用户体验方面应做哪些工作先随机产生初始点#xff0c;并获得函数值。接着循环随机产生定义域内的数#xff0c;比较与现在所处的点的函数值大小#xff0c;#xff08;以求最大值为例#xff09;若大于现在所处的点#xff0c;那么就接受这个点。若小于这个点的值#xff0c;不一定拒绝#xf…
先随机产生初始点并获得函数值。接着循环随机产生定义域内的数比较与现在所处的点的函数值大小以求最大值为例若大于现在所处的点那么就接受这个点。若小于这个点的值不一定拒绝是以一定概率接收的。具体的概率与现在所处点以及随机产生的点的距离以及温度有关下面代码的初始温度是100°然后每次下降0.05。
下面代码是模拟算法求函数最大值的过程。
#本功能实现最小值的求解#from matplotlib import pyplot as plt
import numpy as np
import random
import math
plt.ion()#这里需要把matplotlib改为交互状态#初始值设定
hi3
lo-3
alf0.95
T100#目标函数
def f(x):return 11*np.sin(x)7*np.cos(5*x)##注意这里要是np.sin#可视化函数开始清楚一次然后重复的画
def visual(x):plt.cla()plt.axis([lo-1,hi1,-20,20])mnp.arange(lo,hi,0.0001)plt.plot(m,f(m))plt.plot(x,f(x),markero,colorblack,markersize4)plt.title(temperature{}.format(T))plt.pause(0.1)#如果不停啥都看不见#随机产生初始值
def init():return random.uniform(lo,hi)#新解的随机产生
def new(x):x1xT*random.uniform(-1,1)if (x1hi)(x1lo):return x1elif x1lo:randrandom.uniform(-1,1)return rand*lo(1-rand)*xelse:randrandom.uniform(-1,1)return rand*hi(1-rand)*x#p函数
def p(x,x1):return math.exp(-abs(f(x)-f(x1))/T)def main():global xglobal Txinit()while T0.0001:visual(x)for i in range(500):x1new(x)if f(x1)f(x):xx1else:if random.random()p(x,x1):xx1else:continueTT*alfprint(最大值为{}.format(f(x)))main()