无约束优化方法(optimtool.unconstrain)

import optimtool as oo
from optimtool.base import np, sp, plt
pip install optimtool >=2.4.2

无约束优化方法(optimtool.unconstrain)

import optimtool.unconstrain as ou
ou.[方法名].[函数名]([目标函数], [参数表], [初始迭代点])

f ( x ) = ∑ i = 1 n / 2 ( − 13 + x 2 i − 1 + ( ( 5 − x 2 i ) x 2 i − 2 ) x 2 i ) 2 + ( − 29 + x 2 i − 1 + ( ( x 2 i + 1 ) x 2 i − 14 ) x 2 i ) 2 , x 0 = [ 0.5 , − 2 , 0.5 , − 2 , . . . , 0.5 , − 2 ] . f(x)=\sum_{i=1}^{n/2}(-13+x_{2i-1}+((5-x_{2i})x_{2i}-2)x_{2i})^2+(-29+x_{2i-1}+((x_{2i}+1)x_{2i}-14)x_{2i})^2, x_0=[0.5, -2, 0.5, -2, ..., 0.5, -2]. f(x)=i=1n/2(13+x2i1+((5x2i)x2i2)x2i)2+(29+x2i1+((x2i+1)x2i14)x2i)2,x0=[0.5,2,0.5,2,...,0.5,2].

import optimtool.unconstrain as ou
x = sp.symbols("x1:5")
f = (-13 + x[0] + ((5 - x[1])*x[1] - 2)*x[1])**2 + \(-29 + x[0] + ((x[1] + 1)*x[1] - 14)*x[1])**2 + \(-13 + x[2] + ((5 - x[3])*x[3] - 2)*x[3])**2 + \(-29 + x[2] + ((x[3] + 1)*x[3] - 14)*x[3])**2
x_0 = (1, -1, 1, -1) # Random given

梯度下降法(gradient_descent)

ou.gradient_descent.[函数名]([目标函数], [参数表], [初始迭代点])
方法头解释
solve(funcs: FuncArray, args: ArgArray, x_0: PointArray, verbose: bool=False, draw: bool=True, output_f: bool=False, epsilon: float=1e-10, k: int=0) -> OutputType通过解方程的方式来求解精确步长
steepest(funcs: FuncArray, args: ArgArray, x_0: PointArray, verbose: bool=False, draw: bool=True, output_f: bool=False, method: str=“wolfe”, epsilon: float=1e-10, k: int=0) -> OutputType使用线搜索方法求解非精确步长(默认使用wolfe线搜索)
barzilar_borwein(funcs: FuncArray, args: ArgArray, x_0: PointArray, verbose: bool=False, draw: bool=True, output_f: bool=False, method: str=“Grippo”, c1: float=0.6, beta: float=0.6, M: int=20, eta: float=0.6, alpha: float=1, epsilon: float=1e-10, k: int=0) -> OutputType使用Grippo与ZhangHanger提出的非单调线搜索方法更新步长
ou.gradient_descent.barzilar_borwein(f, x, x_0, verbose=True)
(1, -1, 1, -1)	424.0	0
[ 1.0282111  -1.37928255  1.0282111  -1.37928255]	193.18208282562685	1
[ 1.04040867 -1.45642123  1.04040867 -1.45642123]	189.0040684546344	2
[ 1.04573189 -1.43382824  1.04573189 -1.43382824]	188.20259734914447	3
[ 1.05222391 -1.43478456  1.05222391 -1.43478456]	188.08207712135982	4
[ 1.21842112 -1.42548248  1.21842112 -1.42548248]	185.05873828867217	5
[ 2.13614312 -1.67393179  2.13614312 -1.67393179]	306.7394504286324	6
[ 2.13053183 -1.42904408  2.13053183 -1.42904408]	172.16897818349085	7
[ 2.13339147 -1.39448997  2.13339147 -1.39448997]	169.54142322335804	8
[ 2.13850418 -1.38626852  2.13850418 -1.38626852]	169.35850903892373	9
[ 2.14666499 -1.38571894  2.14666499 -1.38571894]	169.227056416181	10
[ 6.85105964 -1.21882377  6.85105964 -1.21882377]	119.64121168102085	11
[ 6.8498659  -0.82709031  6.8498659  -0.82709031]	219.03283073918098	12
[ 6.87286516 -1.13855733  6.87286516 -1.13855733]	114.81862255975581	13
[ 6.87787713 -1.15612617  6.87787713 -1.15612617]	114.57067950669307	14
[ 6.88112043 -1.1522921   6.88112043 -1.1522921 ]	114.53212856523825	15
[ 6.88723442 -1.15237179  6.88723442 -1.15237179]	114.4874731593348	16
[ 7.52073059 -1.08160888  7.52073059 -1.08160888]	111.60689603108094	17
[ 7.57812354 -1.50383598  7.57812354 -1.50383598]	306.84873605591366	18
[ 7.56259284 -1.10432895  7.56259284 -1.10432895]	110.06340620150246	19
[ 7.56525162 -1.11305159  7.56525162 -1.11305159]	109.911624361985	20
[ 7.56845044 -1.11585182  7.56845044 -1.11585182]	109.88443556709709	21
[ 7.57424656 -1.11514511  7.57424656 -1.11514511]	109.84842622986348	22
[ 8.11472065 -1.124156    8.11472065 -1.124156  ]	108.33148877567422	23
[ 8.11772403 -0.81394219  8.11772403 -0.81394219]	176.07597876873672	24
[ 8.13698116 -1.07860275  8.13698116 -1.07860275]	106.66200945891629	25
[ 8.14033875 -1.08558041  8.14033875 -1.08558041]	106.60960131271904	26
[ 8.14318086 -1.08408182  8.14318086 -1.08408182]	106.59292627568138	27
[ 8.15742491 -1.08445094  8.15742491 -1.08445094]	106.51940774009873	28
[ 8.48884737 -0.93560402  8.48884737 -0.93560402]	121.29547878113888	29
[ 8.51700355 -1.29748928  8.51700355 -1.29748928]	167.74917901005443	30
[ 8.50650818 -1.0447501   8.50650818 -1.0447501 ]	105.17130292526846	31
[ 8.50937365 -1.06118332  8.50937365 -1.06118332]	104.7825239343216	32
[ 8.51183986 -1.06396653  8.51183986 -1.06396653]	104.76340239835628	33
[ 8.51547867 -1.06364105  8.51547867 -1.06364105]	104.74639927086304	34
[ 9.69145476 -1.02322347  9.69145476 -1.02322347]	101.04132063991622	35
[ 9.69050332 -0.68561143  9.69050332 -0.68561143]	183.98629666416807	36
[ 9.71196065 -0.99177179  9.71196065 -0.99177179]	100.33437559015809	37
[ 9.71395331 -0.99691463  9.71395331 -0.99691463]	100.31205044592872	38
[ 9.71544113 -0.99582983  9.71544113 -0.99582983]	100.30702675123581	39
[ 9.72019742 -0.99588572  9.72019742 -0.99588572]	100.29410115962547	40
[ 9.96789324 -0.94002557  9.96789324 -0.94002557]	101.28390045346998	41
[ 9.98515667 -1.13463891  9.98515667 -1.13463891]	124.13069129617023	42
[ 9.97775526 -0.97677181  9.97775526 -0.97677181]	99.65833683277478	43
[ 9.97905436 -0.98038717  9.97905436 -0.98038717]	99.63998817758232	44
[ 9.98038184 -0.98072843  9.98038184 -0.98072843]	99.63682497083006	45
[ 9.99315753 -0.97962229  9.99315753 -0.97962229]	99.60739988195607	46
[10.72291903 -1.14038158 10.72291903 -1.14038158]	140.09339786064479	47
[10.71193259 -0.92569239 10.71193259 -0.92569239]	98.51338476293776	48
[10.71311599 -0.93659146 10.71311599 -0.93659146]	98.37085839829686	49
[10.71381956 -0.93806458 10.71381956 -0.93806458]	98.3680657249001	50
[10.71452791 -0.93800544 10.71452791 -0.93800544]	98.36725745304659	51
[11.12651334 -0.91557278 11.12651334 -0.91557278]	98.0388345985881	52
[11.14786066 -0.6544586  11.14786066 -0.6544586 ]	152.98071929318402	53
[11.1650964  -0.91655585 11.1650964  -0.91655585]	98.04252800378062	54
[11.16500654 -0.91067409 11.16500654 -0.91067409]	98.01952239829447	55
[11.16527568 -0.91147253 11.16527568 -0.91147253]	98.01882653662886	56
[11.16551336 -0.91145949 11.16551336 -0.91145949]	98.01873008878108	57
[11.40881542 -0.89699632 11.40881542 -0.89699632]	97.96852205445705	58
[11.41569897 -0.94570498 11.41569897 -0.94570498]	100.18347217648343	59
[11.41282871 -0.89647302 11.41282871 -0.89647302]	97.96860513443596	60
[11.41284758 -0.89679161 11.41284758 -0.89679161]	97.96850744492629	61
[11.41284808 -0.89680115 11.41284808 -0.89680115]	97.96850736241191	62
[11.41284802 -0.89680115 11.41284802 -0.89680115]	97.96850736240476	63
[11.41281318 -0.89680322 11.41281318 -0.89680322]	97.96850735944307	64
[11.41277898 -0.8968052  11.41277898 -0.8968052 ]	97.96850735848295	65
[11.4127827  -0.89686768 11.4127827  -0.89686768]	97.9685108985368	66
[11.41277899 -0.89680525 11.41277899 -0.89680525]	97.96850735848004	67
[11.41277899 -0.89680525 11.41277899 -0.89680525]	97.96850735848004	68
[11.41277899 -0.89680525 11.41277899 -0.89680525]	97.96850735848007	69
[11.41277899 -0.89680525 11.41277899 -0.89680525]	97.96850735848005	70

在这里插入图片描述

(array([11.41277899, -0.89680525, 11.41277899, -0.89680525]), 70)

牛顿法(newton)

ou.newton.[函数名]([目标函数], [参数表], [初始迭代点])
方法头解释
classic(funcs: FuncArray, args: ArgArray, x_0: PointArray, verbose: bool=False, draw: bool=True, output_f: bool=False, epsilon: float=1e-10, k: int=0) -> OutputType通过直接对目标函数二阶导矩阵(海瑟矩阵)进行求逆来获取下一步的步长
modified(funcs: FuncArray, args: ArgArray, x_0: PointArray, verbose: bool=False, draw: bool=True, output_f: bool=False, method: str=“wolfe”, m: int=20, epsilon: float=1e-10, k: int=0) -> OutputType修正当前海瑟矩阵保证其正定性(目前只接入了一种修正方法)
CG(funcs: FuncArray, args: ArgArray, x_0: PointArray, verbose: bool=False, draw: bool=True, output_f: bool=False, method: str=“wolfe”, eps: float=1e-3, epsilon: float=1e-6, k: int=0) -> OutputType采用牛顿-共轭梯度法求解梯度(非精确牛顿法的一种)
ou.newton.CG(f, x, x_0, verbose=True)
(1, -1, 1, -1)	424.0	0
[-2.58333333 -1.41666667 -2.58333333 -1.41666667]	316.8589262366773	1
[11.66038408 -0.93093632 11.66038408 -0.93093632]	100.19046565464129	2
[11.37281532 -0.90000411 11.37281532 -0.90000411]	97.97044184270206	3
[11.41274925 -0.89680976 11.41274925 -0.89680976]	97.96850736600598	4
[11.41274911 -0.89680703 11.41274911 -0.89680703]	97.96850735921517	5

在这里插入图片描述

(array([11.41274911, -0.89680703, 11.41274911, -0.89680703]), 5)

拟牛顿法(newton_quasi)

ou.newton_quasi.[函数名]([目标函数], [参数表], [初始迭代点])
方法头解释
bfgs(funcs: FuncArray, args: ArgArray, x_0: PointArray, verbose: bool=False, draw: bool=True, output_f: bool=False, method: str=“wolfe”, epsilon: float=1e-10, k: int=0) -> OutputTypeBFGS方法更新海瑟矩阵
dfp(funcs: FuncArray, args: ArgArray, x_0: PointArray, verbose: bool=False, draw: bool=True, output_f: bool=False, method: str=“wolfe”, epsilon: float=1e-10, k: int=0) -> OutputTypeDFP方法更新海瑟矩阵
L_BFGS(funcs: FuncArray, args: ArgArray, x_0: PointArray, verbose: bool=False, draw: bool=True, output_f: bool=False, method: str=“wolfe”, m: float=6, epsilon: float=1e-10, k: int=0) -> OutputType双循环方法更新BFGS海瑟矩阵
ou.newton_quasi.bfgs(f, x, x_0, verbose=True)
(1, -1, 1, -1)	424.0	0
[-2.58333333 -1.41666667 -2.58333333 -1.41666667]	316.8589262367117	1
[-2.62231901 -1.41870216 -2.62231901 -1.41870216]	317.7181414041512	2
[12.34827743 -0.99197941 12.34827743 -0.99197941]	119.69430049634522	3
[10.38506302 -0.97660204 10.38506302 -0.97660204]	99.1887590330026	4
[11.1167875  -0.91944354 11.1167875  -0.91944354]	98.06444704676363	5
[11.406523   -0.89765767 11.406523   -0.89765767]	97.96874850140205	6
[11.41263195 -0.89681977 11.41263195 -0.89681977]	97.96850740648262	7
[11.41277931 -0.89680524 11.41277936 -0.89680524]	97.96850735848028	8
[11.41277892 -0.89680527 11.4127794  -0.89680523]	97.96850735848014	9
[11.41277892 -0.89680527 11.41277941 -0.89680523]	97.96850735848014	10
[11.41277899 -0.89680525 11.41277899 -0.89680525]	97.96850735848003	11

在这里插入图片描述

(array([11.41277899, -0.89680525, 11.41277899, -0.89680525]), 11)

非线性最小二乘法(nonlinear_least_square)

ou.nonlinear_least_square.[函数名]([目标函数], [参数表], [初始迭代点])
方法头解释
gauss_newton(funcr: FuncArray, args: ArgArray, x_0: PointArray, verbose: bool=False, draw: bool=True, output_f: bool=False, method: str=“wolfe”, epsilon: float=1e-10, k: int=0) -> OutputType高斯-牛顿提出的方法框架,包括OR分解等操作
levenberg_marquardt(funcr: FuncArray, args: ArgArray, x_0: PointArray, verbose: bool=False, draw: bool=True, output_f: bool=False, lamk: float=1, eta: float=0.2, p1: float=0.4, p2: float=0.9, gamma1: float=0.7, gamma2: float=1.3, epsk: float=1e-6, epsilon: float=1e-10, k: int=0) -> OutputTypeLevenberg Marquardt提出的方法框架
r1, r2, x1, x2 = sp.symbols("r1 r2 x1 x2")
r1 = x1**3 - 2*x2**2 - 1
r2 = 2*x1 + x2 - 2
ou.nonlinear_least_square.gauss_newton((r1, r2), (x1, x2), (1, 1), verbose=True)
(1, 1)	2.5	0
[0.81818182 0.36363636]	0.2568683776624116	1
[0.96394194 0.07211612]	0.006580566252158881	2
[0.99803991 0.00392018]	1.7401957457499415e-05	3
[9.99993633e-01 1.27332936e-05]	1.824077317348686e-10	4
[1.00000000e+00 1.35111426e-10]	2.053700029739614e-20	5
[1.00000000e+00 6.08502493e-21]	1.8513764194952984e-41	6

(array([1.00000000e+00, 6.08502493e-21]), 6)

信赖域方法(trust_region)

ou.trust_region.[函数名]([目标函数], [参数表], [初始迭代点])
方法头解释
steihaug_CG(funcs: FuncArray, args: ArgArray, x_0: PointArray, verbose: bool=False, draw: bool=True, output_f: bool=False, r0: float=1, rmax: float=2, eta: float=0.2, p1: float=0.4, p2: float=0.6, gamma1: float=0.5, gamma2: float=1.5, epsk: float=1e-6, epsilon: float=1e-6, k: int=0) -> OutputType截断共轭梯度法在此方法中被用于搜索步长
ou.trust_region.steihaug_CG(f, x, x_0, verbose=True)
(1, -1, 1, -1)	424.0	0
[ 1.37436693 -1.59987449  1.37436693 -1.59987449]	234.85673849734079	1
[ 2.41674356 -1.40378533  2.41674356 -1.40378533]	166.3039476276758	2
[ 3.82788408 -1.31060572  3.82788408 -1.31060572]	145.04222337248802	3
[ 5.2400307  -1.23417328  5.2400307  -1.23417328]	128.87290397464753	4
[ 6.65278513 -1.16994762  6.65278513 -1.16994762]	116.28517783715984	5
[ 8.06468738 -1.08912665  8.06468738 -1.08912665]	107.0112703070541	6
[ 9.47634365 -1.00411738  9.47634365 -1.00411738]	101.03664220216237	7
[10.88855469 -0.92888453 10.88855469 -0.92888453]	98.19478501142473	8
[11.4157009  -0.89681743 11.4157009  -0.89681743]	97.96854545237576	9
[11.41277892 -0.89680526 11.41277892 -0.89680526]	97.96850735848007	10

在这里插入图片描述

(array([11.41277892, -0.89680526, 11.41277892, -0.89680526]), 10)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/95106.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构和算法——数据结构

数据结构: 线性结构: 顺序存储方式,顺序表 常见的顺序存储结构有:数组、队列、链表、栈 链式存储方式,链表 队列: 队列可以使用数组结构或者链表结构来存储,先入先出,后进后出。…

如何使用大语言模型来绘制图画

请创作一张科技感十足的图片,包含siri和iphone两个元素,请帮我挑选合适的style和background 好的,我会为你创作一张科技感十足的图片,包含siri和iphone两个元素。我会根据你的要求,选择一种适合的风格和背景。请稍等一…

智能AI创作系统ChatGPT商业运营版源码+AI绘画系统/支持GPT联网提问/支持Midjourney绘画+Prompt应用+支持国内AI提问模型

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧&…

(五)激光线扫描-位移台标定

线激光属于主动测量方式,但是由于线激光的特性,我们只能通过提取激光中心线获取这一条线上的高度信息,那么要进行三维重建的话,就需要通过平移或者是旋转的方式,来让线激光扫描被测物体的完整轮廓,也就是整个表面。激光线的密度越高还原出来的物体越细腻,但由于数据量大…

RabbitMQ-发布订阅模式和路由模式

接上文 RabbitMQ-工作队列 1 发布订阅模式 将之前的配置类内容都替换掉 Bean("fanoutExchange")public Exchange exchange(){//注意这里是fanoutExchangereturn ExchangeBuilder.fanoutExchange("amq.fanout").build();}Bean("yydsQueue1")publ…

Mac 挂载 Alist网盘

挂载服务器的Alist 网盘到 Mac mac,使用的是 CloundMounter 这个软件进行挂载 http://ip:port/dav/ 需要在末尾加上 /dav/ 在一些服务器上,为了提供WebDAV服务,需要在URL地址的末尾添加"/dav/“。这是因为WebDAV协议规定了一些标准的URL路径&#x…

代码随想录算法训练营第23期day10 |232.用栈实现队列、225. 用队列实现栈

目录 一、(leetcode 232)用栈实现队列 二、(leetcode 225)用队列实现栈 两个队列 一个队列 一、(leetcode 232)用栈实现队列 状态:已AC。pop()、peek()实现逻辑一样,就是peek()要…

Mysql内置函数、复合查询和内外连笔记

目录 一、mysql内置函数 1.1.日期函数 1.2.字符串函数 1.3.数学函数 1.4.其他函数 二、复合查询 2.2 自连接 2.3 子查询 2.3.1单行自查询 2.3.2 多行子查询 2.3.3 多列子查询 2.3.4在from子句中使用子查询 2.3.5合并查询 三、表的内连和外连 3.1内连接 3.2外连接…

竞赛选题 深度学习 opencv python 实现中国交通标志识别

文章目录 0 前言1 yolov5实现中国交通标志检测2.算法原理2.1 算法简介2.2网络架构2.3 关键代码 3 数据集处理3.1 VOC格式介绍3.2 将中国交通标志检测数据集CCTSDB数据转换成VOC数据格式3.3 手动标注数据集 4 模型训练5 实现效果5.1 视频效果 6 最后 0 前言 🔥 优质…

1024 科学计数法

一.问题: 科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [-][1-9].[0-9]E[-][0-9],即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指数部分的正负号即使对正数也必定明确…

5分钟入门卷积算法

大家好啊,我是董董灿。 深度学习算法中,尤其是计算机视觉,卷积是无论如何都绕不过去的槛。 初学者看到这个算法后,很多是知其然不知其所以然,甚至不知道这个算法是做什么的,或者很疑惑,为什么…

数据结构-优先级队列(堆)

文章目录 目录 文章目录 前言 一 . 堆 二 . 堆的创建(以大根堆为例) 堆的向下调整(重难点) 堆的创建 堆的删除 向上调整 堆的插入 三 . 优先级队列 总结 前言 大家好,今天给大家讲解一下堆这个数据结构和它的实现 - 优先级队列 一 . 堆 堆(Heap&#xff0…

如何使用 Media.io 生成不同年龄的照片

Media.io 是一个在线图片编辑器,提供多种功能,包括照片滤镜、图像裁剪和图像转换。其中,Media.io 的 AI 年龄转换功能可以根据上传的照片,生成不同年龄的照片。 使用 Media.io 生成不同年龄的照片 要使用 Media.io 生成不同年龄…

【word】从正文开始设置页码

在写报告的时候,会要求有封面和目录,各占一页。正文从第3页开始,页码从正文开始设置 word是新建的 分出三节(封面、目录、正文) 布局--->分割符--->分节符--->下一页 这样就能将word分为3节,分…

Python操作MongoDb创建文档及CRUD基本操作

Python3中类的高级语法及实战 Python3(基础|高级)语法实战(|多线程|多进程|线程池|进程池技术)|多线程安全问题解决方案 Python3数据科学包系列(一):数据分析实战 Python3数据科学包系列(二):数据分析实战 Python3数据科学包系列(三):数据分析实战 MongoDB 操作手册----文档…

1797_GNU pdf阅读器evince

全部学习汇总: GreyZhang/g_GNU: After some years I found that I do need some free air, so dive into GNU again! (github.com) 近段时间经历了很多事情,终于想找一点技术上的自由气氛。或许,没有什么比GNU的一些软件探索更适合填充这样的…

电机-电力拖动-振动-应力分析-设备防护知识初步

1.涉及领域和课程: 信号与系统现代自动化原理与应用频谱转换及振动分析材料学基础与应力分析数学建模、仿真与求解工程数学传感器机器学习与模式识别随机信号处理反馈系统文献学DSP应用机器视觉凸优化,数学物理方法 2.教材推荐 豆瓣书单,更…

如何在终端输出颜色

效果演示: 【看 welcome to here 部分】 环境: Node.js 18.16.0 正文部分 我们可以通过 console.log() 在终端打印字符串。 只要在我们的字符串前面加上转义字符即可。 差不多就是下面这样的结构: 用代码就是: console.log("\x1B…

协议栈——收发数据(拼接网络包,自动重发,滑动窗口机制)

目录 协议栈何时发送数据~ 数据长度 IP模块的分片功能 发送频率 网络包序号~利用syn拼接网络包ack确认网络包完整 确定偏移量 服务器ack确定收到数据总长度 序号作用 双端告知各自序号 协议栈自动重发机制 大致流程 ack等待时间如何调整 是…

java做个qq机器人

前置的条件 机器人是基于mirai框架实现的。根据官方的文档&#xff0c;建议使用openjdk11。 我这里使用的编辑工具是idea2023 在idea中新建一个maven项目&#xff0c;虽然可以使用gradle进行构建&#xff0c;不过我这里由于网络问题没有跑通。 pom.xml <dependency>&l…