大数据建模与优化算法
大作业
1.考虑释放时间的可分任务调度优化模型
解答在知网《考虑处理机释放时间的可分任务调度优化模型》
2.梯度下降法处理
迭代10次。老师给的:
λ
∈
[
−
1
,
1
]
λ∈[-1,1]
λ∈[−1,1]
因为这是一个周期函数,只需要在其间采点,找到最小的那个点。
1. import numpy as np
2. import math
3. from sympy import *
4. #lamda(-1,1)
5. def fx(x):#函数fx定义
6. fun_fx=x[0]**2+x[1]**2-math.cos(18*x[0])-math.cos(18*x[1])
7. return fun_fx
8. def gx(x):#梯度定义
9. fun_gx=[]
10. a=2*x[0]+18*math.sin(18*x[0])
11. b=2*x[1]+18*math.sin(18*x[1])
12. fun_gx.append(a)
13. fun_gx.append(b)
14. return fun_gx
15. def lamda(x):#求步长
16. dx=gx(x)
17. x_new=[0,0]
18. dx[0]=-1*dx[0]
19. dx[1]=-1*dx[1]
20. t=symbols('t')#符号化
21. d=[]
22. d.append(dx[0]*t)
23. d.append(dx[1]*t)
24. x_new[0]=x[0]+d[0]
25. x_new[1]=x[1]+d[1]
26. t_list=list(np.linspace(-1,1,1000))
27. gt=[]
28. z=x_new[0]**2+x_new[1]**2-cos(18*x_new[0])-cos(18*x_new[1])
29. for i in range(1000):
30. gt.append(z.subs({t:t_list[i]}))
31. index=np.argmin(gt,axis=0)
32. return t_list[index]
33. if __name__=='__main__':
34. x=[-1,1]#初始点
35. fx_list=[]
36. x_list=[]
37. for i in range(10):
38. #print(fx(x))
39. fx_list.append(fx(x))
40. x_list.append(x)
41. t=lamda(x)
42. dx=gx(x)
43. x[0]=x[0]-t*dx[0]
44. x[1]=x[1]-t*dx[1]
45. for i in range(len(x_list)):
46. print(x_list[i],fx_list[i])
实验结果
迭代次数 | 迭代点 | 结果函数值 |
---|---|---|
初始点 | (-1,1) | 0.679366 |
1 | (4.345732175528321e-10, -4.345732175528321e-10) | -1.9969699751924093 |
2 | (4.345732175528321e-10, -4.345732175528321e-10) | -1.9999985977950765 |
3 | (4.345732175528321e-10, -4.345732175528321e-10) | -1.9999999993803756 |
4 | (4.345732175528321e-10, -4.345732175528321e-10) | -1.999999999999726 |
5 | (4.345732175528321e-10, -4.345732175528321e-10) | -1.9999999999999998 |
6 | (4.345732175528321e-10, -4.345732175528321e-10) | -2.0 |
7 | (4.345732175528321e-10, -4.345732175528321e-10) | -2.0 |
8 | (4.345732175528321e-10, -4.345732175528321e-10) | -2.0 |
9 | (4.345732175528321e-10, -4.345732175528321e-10) | -2.0 |
10 | (4.345732175528321e-10, -4.345732175528321e-10) | -2.0 |
复习题
复习题.pdf https://www.aliyundrive.com/s/NST6HYWdrQk 提取码: ar27