定义函数

定义函数,用matplotlib画图

import numpy as np
import matplotlib.pyplot as pltdef himmelblau(x):return (x[0] ** 2 + x[1] - 11) ** 2 + (x[0] + x[1] ** 2 - 7) ** 2x=np.arange(-6,6,0.1)
y=np.arange(-6,6,0.1)
print('x,y range:',x.shape,y.shape)
X,Y=np.meshgrid(x,y)
print('X Y maps:',X.shape,Y.shape)
Z=himmelblau([X,Y])fig=plt.figure('himmelblau')
ax=fig.gca(projection='3d')
ax.plot_surface(X,Y,Z)
ax.view_init(60,-30)
ax.set_xlabel('x')
ax.set_ylabel('y')
plt.show()

用梯度下降法求解

1,确定优化目标(即要优化的参数,这也是要计算梯度的对象)

x=torch.tensor([0.,0.],requires_grad=True)

2,定义优化器,指定要优化的参数和学习率

optimizer=torch.optim.Adam([x],lr=1e-3)

3,循环迭代

for step in range(20000):pred = himmelblau(x)  # 得到预测值optimizer.zero_grad()  # 梯度清零pred.backward()  # 计算梯度大小,记录在参数的属性里optimizer.step()  # 根据之前定义的优化器更新梯度大小if step % 2000 == 0:print('step {}: x={}, f(x)={}'.format(step, x.tolist(), pred.item()))

完整代码:

import numpy as np
import matplotlib.pyplot as plt
import torchdef himmelblau(x):return (x[0] ** 2 + x[1] - 11) ** 2 + (x[0] + x[1] ** 2 - 7) ** 2# plot
x=np.arange(-6,6,0.1)
y=np.arange(-6,6,0.1)
print('x,y range:',x.shape,y.shape)
X,Y=np.meshgrid(x,y)
print('X Y maps:',X.shape,Y.shape)
Z=himmelblau([X,Y])fig=plt.figure('himmelblau')
ax=fig.gca(projection='3d')
ax.plot_surface(X,Y,Z)
ax.view_init(60,-30)
ax.set_xlabel('x')
ax.set_ylabel('y')
plt.show()x = torch.tensor([0., 0.], requires_grad=True)
optimizer = torch.optim.Adam([x], lr=1e-3)
for step in range(20000):pred = himmelblau(x)  # 得到预测值optimizer.zero_grad()  # 梯度清零pred.backward()  # 计算梯度大小,记录在参数的属性里optimizer.step()  # 根据之前定义的优化器更新梯度大小if step % 2000 == 0:print('step {}: x={}, f(x)={}'.format(step, x.tolist(), pred.item()))

pytorch 寻找二元函数的最小值相关推荐

  1. python多元函数求极小值_使用遗传算法求二元函数的最小值

    二元函数为y=x1^2+x2^2,x∈[-5,5] NIND=121; %初始种群的个数(Number of individuals) NVAR=2; %一个染色体(个体)有多少基因 PRECI=20 ...

  2. python多元函数求解_使用遗传算法求二元函数的最小值

    二元函数为y=x1^2+x2^2,x∈[-5,5] NIND=121; %初始种群的个数(Number of individuals) NVAR=2; %一个染色体(个体)有多少基因 PRECI=20 ...

  3. 遗传算法求二元函数极值怎么编码_使用遗传算法求二元函数的最小值

    二元函数为y=x1^2+x2^2,x∈[-5,5] NIND=121; %初始种群的个数(Number of individuals) NVAR=2; %一个染色体(个体)有多少基因 PRECI=20 ...

  4. 二元函数求最小值 c语言,遗传算法C语言源代码(一元函数和二元函数)

    <遗传算法C语言源代码(一元函数和二元函数)>由会员分享,可在线阅读,更多相关<遗传算法C语言源代码(一元函数和二元函数)(15页珍藏版)>请在人人文库网上搜索. 1.C语言遗 ...

  5. 二元函数求最小值 c语言,用C语言实现简单的多元线性回归算法(二)

    上一篇我们贴上了简单粗暴的线性回归的代码,里面各种参数都设置的是固定参数,不具有可扩展性,今天我们在上一篇的基础上做了部分改进,当然对于熟悉C语言的大侠来说可能这篇博客会太low了,您完全可以跳过.我 ...

  6. MAT之PSO:利用PSO算法优化二元函数,寻找最优个体适应度

    MAT之PSO:利用PSO算法优化二元函数,寻找最优个体适应度 目录 实现结果 设计代码 实现结果 设计代码 figure [x,y] = meshgrid(-5:0.1:5,-5:0.1:5); z ...

  7. python牛顿法寻找极值_python使用梯度下降和牛顿法寻找Rosenbrock函数最小值实例...

    Rosenbrock函数的定义如下: 其函数图像如下: 我分别使用梯度下降法和牛顿法做了寻找Rosenbrock函数的实验. 梯度下降 梯度下降的更新公式: 图中蓝色的点为起点,橙色的曲线(实际上是折 ...

  8. 二元函数最大最小值定理证明_二元函数极值充分条件判定定理的证明.pdf

    二元函数极值充分条件判定定理的证明 训 练 与科 技 第28卷第6期 二元函数极值充分条件判定定理的证明 林 琼,陈 星 (后勤工程学院基础部) 二元函数极值充分条件判定定理的证明是 厂"( ...

  9. 多变量微积分笔记3——二元函数的极值

    什么是极值 极值不同于最值,极值的定义如下: 若函数f(x)在x0的一个邻域D有定义,且对D中除x0的所有点,都有f(x)<f(x0),则称f(x0)是函数f(x)的一个极大值.同理,若对D的所 ...

最新文章

  1. 换系统后mysql环境不见了_电脑重装系统后如何恢复Mysql数据库
  2. mac 安装Android sdk以便开展appium android自动化测试
  3. 03-类与对象——课后动手动脑
  4. Eclipse下的java工程目录问题和路径问题理解
  5. EasyIPCamera高性能摄像机RTSP服务器RTSPServer解决方案
  6. MySQL 中的日期时间类型
  7. Vue:进入组件显示蒙版及文字,离开隐藏
  8. c语言关于内存编程,c语言内存
  9. Maven整合SSM项目(七)
  10. 手把手教你从零开始腾讯云服务器部署
  11. 三赢电商:拼多多店铺一直不发货怎么办?
  12. linux学习第八周总结
  13. 比较好用的linux桌面系统,目前最好用的Linux桌面系统Mint
  14. 如何安装虚拟机linux
  15. ipad发布会ipad_ipad十周年,从办公室的角度
  16. 机器学习必备数学知识
  17. 圣墟手游怎么在电脑上玩 圣墟PC版玩法教程
  18. RequireJs配置
  19. chm文件在服务器看不到内容,电脑不能打开文件secedit.chm怎么办_网站服务器运行维护,电脑...
  20. Run Commands Remotely via SSH with No Password

热门文章

  1. Web前端开发技术实验与实践(第3版)储久良编著实训12
  2. 利用python获取自己的qq群成员信息!
  3. 基于java Springboot实现教务管理系统《视频版-建议收藏》
  4. ArcGIS基础实验操作100例--实验95平滑处理栅格数据
  5. pythonjson安装_安装pip和json
  6. 国产自主“软件定义”框架——openSCA核心框架永久开源
  7. PHP中使用ZipArchive扩展压缩整个文件夹和过滤指定文件
  8. 【 QT 遇到“程序异常结束“,The process was ended forcefully问题-可能原因之一】
  9. iP1000废弃墨水吸收器已满解决方法
  10. JavaScript高级特效