代码:

#导入模块
from sympy import *
import sympy as sp  #将导入的模块重新定义一个名字以便后续的程序进行使用
from numpy import *
import numpy as np#定义主要的处理函数
def main():#x1,x2:目标函数变量;alpha:步长因子;f:目标函数;a,b:目标函数不同变量的解;dif_x1,dif_x2:目标函数偏导函数#x_solver:目标函数变量解组成的矩阵;x_fun:包含alpha的迭代解函数组成的矩阵# dif_x11,dif_x22:目标函数偏导函数;f_x_diff:目标函数偏导函数值组成的矩阵;# f_alpha_diff:对alpha求偏导得到的函数;alpha_solver:α的解;k:迭代的次数#x_solver_k1:作为第k+1次迭代的解;x_solver_k:作为第k次迭代的解k = 0x1,x2,alpha = symbols("x1,x2,alpha",real = True)#将变量符号化,否则会出错f = 8*x1**2 + 4*x1*x2 + 5*x2**2 #定义目标函数a = 10b=10 #定义目标函数的初始解的两维解f_solver = 8*a**2 + 4*a*b + 5*b**2#得到给定初始解下的目标函数值dif_x1 = sp.diff(f,x1)dif_x2 = sp.diff(f,x2)  #目标函数对不同变量进行求偏导,得到偏导函数dif_x11 = dif_x1.subs({x1: a, x2: b})dif_x22 = dif_x2.subs({x1: a, x2: b})  # 将目标函数的初始解代入到偏导函数中得到具体的偏导函数值print("------------------------------第<%s>次迭代------------------------------" % k)print("目标函数解为:%s,目标函数值为:%s,梯度向量长度:<%s>\n"% ( [[a],[b]], f_solver,(dif_x11**2 + dif_x22**2)**0.5))while True:k = k + 1x_solver = np.array([[a],[b]]) #将目标函数的初始解定义为2行1列的数组x_solver = np.mat(x_solver)#将数组转化为矩阵dif_x11 = dif_x1.subs({x1:x_solver[0,0],x2:x_solver[1,0]})dif_x22 = dif_x2.subs({x1:x_solver[0,0],x2:x_solver[1,0]})#将目标函数的初始解代入到偏导函数中得到具体的偏导函数值f_x_diff = np.array([[dif_x11],[dif_x22]])#将偏导函数值定义为数组f_x_diff = np.mat(f_x_diff)#将数组转化为矩阵x_fun = x_solver - alpha*f_x_diff#迭代公式得到新的解f = 8*x_fun[0,0]**2 + 4*x_fun[0,0]*x_fun[1,0] + 5*x_fun[1,0]**2 #将新得到的解带入到目标函数得到只包含alpha的一元函数f_alpha_diff = sp.diff(f,alpha) #对函数进行求导alpha_dict = solve([f_alpha_diff],[alpha]) #由于极值点处的导数为0,因此求解其方程得到alpha,返回的是一个字典{alpha: 149/2650}alpha_solver = alpha_dict[alpha]#取值操作x_solver_k1 = x_solver - alpha_solver * f_x_diff#通过迭代得到下一步的解矩阵a = float(x_solver_k1[0,0])b = float(x_solver_k1[1,0])#取得解矩阵的解f_solver = 8*a**2 + 4*a*b + 5*b**2x_solver_k = x_solver_k1  # 将上一次解保留下来,作为终止条件的判断dif_x11 = dif_x1.subs({x1:a,x2:b})dif_x22 = dif_x2.subs({x1:a,x2:b})#将目标函数的初始解代入到偏导函数中得到具体的偏导函数值f_diff_solver = (dif_x11 ** 2 + dif_x22 ** 2) ** 0.5#得到梯度向量的模长print("------------------------------第<%s>次迭代------------------------------" % k)print("目标函数解为:<%s>,目标函数值为:<%s>,梯度向量长度:<%s>\n"%(x_solver_k1,float(f_solver),float(f_diff_solver)))if f_diff_solver < 0.01:#判断是否满足迭代终止条件breakif __name__ == '__main__':main()

结果:


------------------------------第<0>次迭代------------------------------
目标函数解为:[[10], [10]],目标函数值为:1700,梯度向量长度:<244.131112314674>------------------------------第<1>次迭代------------------------------
目标函数解为:<[[-66/53][564/265]]>,目标函数值为:<24.452830188679243>,梯度向量长度:<19.898988777347018>------------------------------第<2>次迭代------------------------------
目标函数解为:<[[0.143840177580469][0.143840177580462]]>,目标函数值为:<0.3517299436684602>,梯度向量长度:<3.5115862548259504>------------------------------第<3>次迭代------------------------------
目标函数解为:<[[-0.0179121730571876][0.0306135321341049]]>,目标函数值为:<0.0050592897557630336>,梯度向量长度:<0.28622740794050416>------------------------------第<4>次迭代------------------------------
目标函数解为:<[[0.00206899966863705][0.00206899966863635]]>,目标函数值为:<7.277291368992362e-05>,梯度向量长度:<0.050510719048299235>------------------------------第<5>次迭代------------------------------
目标函数解为:<[[-0.000257649015339521][0.000440345589853036]]>,目标函数值为:<1.046766882819546e-06>,梯度向量长度:<0.004117100118651557>进程已结束,退出代码0

最优化作业第6章——无约束多维非线性规划方法相关推荐

  1. 最优化课堂笔记06-无约束多维非线性规划方法(含重点)

    引言 6.1 坐标轮换法(工程上基本不用,效率低不适用高维) 6.1例子:主要是对最优步长alpha的确定 6.2 最速下降法(相邻两次的搜索方向互相垂直) 6.2例子 求解法一 注:最速下降法与坐标 ...

  2. 最优化课堂笔记06-无约束多维非线性规划方法(续)

    6.5共轭方向法 6.5.1 共轭方向 6.5.1 共轭梯度法 6.6单纯形法(不考) 6.7最小二乘法 6.7.2 改进的高斯-牛顿最小二乘法

  3. 最优化算法python实现篇(4)——无约束多维极值(梯度下降法)

    最优化算法python实现篇(4)--无约束多维极值(梯度下降法) 摘要 算法简介 注意事项 算法适用性 python实现 实例运行结果 算法过程可视化 摘要 本文介绍了多维无约束极值优化算法中的梯度 ...

  4. 最优化课程笔记07——约束问题的非线性规划方法(重点:拉格朗日乘子法和惩罚函数法)

    7.1 间接法:约束转化为无约束问题(含一个重点:拉格朗日乘子法) 当维数多的时候不适用 7.1.2拉格朗日乘子法(重点) 7.1.2.1 等式约束问题 7.1.2.2 不等式约束问题 7.1.3 惩 ...

  5. 无约束多维极值求解思路

    一.问题描述 无约束的多维极值问题一般描述如下公式: 其中x为向量,而f(x)为标量函数,多维极值的问题就是要求得全局最小值.但是大多数的算法都存在着搜索范围问题,无法求得全局最小值,只能计算出一些局 ...

  6. 最优化作业第六章——共轭梯度法和鲍尔法

    共轭梯度法: 代码: #导入模块 from sympy import * import sympy as sp #将导入的模块重新定义一个名字以便后续的程序进行使用 from numpy import ...

  7. MATLAB无约束多维极值——最速下降法

    一.算法原理 1.首先了解一个概念,什么式无约束最优化. 无约束优化问题就是在x∈R^n的范围内,找到一点x*,使得f(x*)<f(x)对于任意x∈R^n都成立.点x*就是全局最优解. 其一般形 ...

  8. 《实用机器学习》(孙亮 黄倩.著)笔记——第七章 无矩阵分解的基准方法

    bui表示基准算法对于评价rui的预测,bu和bi分别是用户u和商品i各自对应的偏差,μ是所有评价的平均值 在推荐问题中引入损失函数,通过最小化损失函数,得到参数的最佳估计值,这里采用平方和损失函数: ...

  9. 数值最优化—无约束问题信赖域算法

    目录 一.参考 二.线性搜索与信赖域算法区别 三.信赖域算法 四.信赖域子问题的求解 1. 精确求解方法 2. 折线方法(Dogleg Method 狗腿法) 一.参考 <数值最优化算法与理论& ...

最新文章

  1. 强势推荐一位 Python 原创自动化大佬!
  2. Kobolds and Catacombs 思维,模拟,前缀,后缀(沈阳)
  3. signature=7af2859164902e5f86d6728522cfd7fe,Signatures of top flavored dark matter
  4. 大大小小的正六边形嵌套,就会形成像万花筒般有趣的视觉图形!
  5. hdu 1251 统计难题(求前缀出现了多少次)
  6. 华为杯数学建模2020获奖名单_我校在2020年全国大学生数学建模竞赛中再获佳绩(内附获奖名单)...
  7. HDU 3896 Greatest TC 双连通分量
  8. 一些Web Service的经验
  9. 第十四节(接口(行为))
  10. 解决Microsoft Store 下载报错(错误 0x800706D9)
  11. 【爬虫】微博数据采集
  12. mysql导入的数据放在那个文件夹下_mysql数据库文件导入
  13. elasticsearch报错master not discovered yet, this node has not previously joined a bootstrapped (v7+)..
  14. 将win10的屏幕颜色调成护眼色豆沙绿
  15. Winodws update auto update client(wuauclt)
  16. VSCode下载及各种实用插件安装教程
  17. 激光投影仪哪款好?坚果N1 Pro和海信Vidda C1和当贝X3测评
  18. 如何在sql语句里添加注释
  19. Windows bat常用批处理命令学习
  20. RecyclerView使用GridLayoutManager实现两种item

热门文章

  1. ffmpeg 时间戳
  2. [邻接表] 学习邻接表的表示方法+BFS
  3. Shell 变量的操作方法
  4. EXCEL 图表 只在拐点的时候显示数字
  5. Failed to execute goal maven-gpg-plugin 1.5 Sign
  6. 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十二║Vue实战:个人博客第一版(axios+router)...
  7. JVM垃圾回收机制总结
  8. BZOJ 1609 [Usaco2008 Feb]Eating Together麻烦的聚餐:LIS LDS (nlogn)
  9. 仿照vue实现简易的MVVM框架(一)
  10. UNION ALL returning wrong results?