網(wǎng)站首頁 編程語言 正文
1. matlab 中的 fmincon() 函數(shù)
matlab 求解非線性規(guī)劃
在matlab中,fmincon函數(shù)可以用于求解帶約束的非線性多變量函數(shù)的最小值,即可以用來求解非線性規(guī)劃問題。
基本語法
[x, fval] = fmincon(fun, x0, A, b, Aeq, beq, lb, ub, nonlcon, options)
- x 的返回值是決策向量 x 的取值,fval 的返回值是目標(biāo)函數(shù) f(x) 的取值
- fun 是用 M 文件定義的函數(shù) f(x) ,代表了(非)線性目標(biāo)函數(shù)
- x0 是 x 的初始值
- A, b, Aeq, beq 定義了線性約束 ,如果沒有線性約束,則 A=[], b=[], Aeq=[], beq=[]
- lb 和 ub 是變量 x 的下界和上界,如果下界和上界沒有約束,則 lb=[], ub=[],也可以寫成 lb 的各分量都為 -inf, ub 的各分量都為 inf
- nonlcon 是用 M 文件定義的非線性向量函數(shù)約束。
- options 定義了優(yōu)化參數(shù),不填寫表示使用 Matlab 默認(rèn)的參數(shù)設(shè)置。
實例
示例,求下列非線性規(guī)劃:
(1)編寫 M 函數(shù) fun1.m 定義目標(biāo)函數(shù):
function f = fun1(x); f = x(1).^2 + x(2).^2 + x(3).^2 + 8;
(2)編寫 M 函數(shù) fun2.m 定義非線性約束條件:
function [g, h] = fun2(x); g = [-x(1).^2+x(2)-x(3).^2 x(1)+x(2).^2+x(3).^3-20]; h = [-x(1)-x(2).^2+2 x(2)+2*x(3).^2-3];
(3)編寫主程序函數(shù)
[x, y] = fmincon('fun1', rand(3, 1), [], [], [], [], zeros(3,1), [], 'fun2')
所得結(jié)果為:
2. python中的minimize()函數(shù)
minimize函數(shù)的尋找參數(shù)
在 python 的 scipy.optimize 庫中包含該函數(shù)的替代函數(shù) minimize() ,該函數(shù)的使用與 matlab 的 fminunc 函數(shù)有些不同,下面總結(jié)下,自己在使用的過程中遇到的問題。
首先查看下該函數(shù):
官方聲明過長,我把它放在該篇博客的最后面:
# 這是其聲明,我認(rèn)為去查看函數(shù)的說明可以達(dá)到事半功倍的效果,千萬別忽略 def minimize(fun, x0, args=(), method=None, jac=None, hess=None, hessp=None, bounds=None, constraints=(), tol=None, callback=None, options=None):
著重介一些重要參數(shù)代表什么:
fun:
該參數(shù)就是 costFunction 你要去最小化的損失函數(shù),將 costFunction 的名字傳給 fun
官方給的提示:
The objective function to be minimized.
fun(x, *args) -> float
where x is an 1-D array with shape (n,) and args
is a tuple of the fixed parameters needed to completely
specify the function.
意思就是損失函數(shù)在定義時,**theta 必須為第一個參數(shù)且其shape必須為(n, )**即一維數(shù)組。在計算損失函數(shù)的時候用到的其他參數(shù)以元組的形式傳入到 args 參數(shù)中(其他參數(shù)具體指 X,Y,lambda 等),最后返回?fù)p失的值,可以為數(shù)組形式,也可以為一個實數(shù).
-
x0:
參數(shù) x0 就是初始化的 theta, 其 shape 必須為 shape(n,) 即一維數(shù)組. -
method:
該參數(shù)代表采用的方式,默認(rèn)是 BFGS, L-BFGS-B, SLSQP 中的一種,可選 TNC -
jac:
該參數(shù)就是計算梯度的函數(shù),和 fun 參數(shù)類似,第一個必須為 theta 且其 shape 必須為 (n, ) 即一維數(shù)組,最后返回的梯度也必須為一個一維數(shù)組。 -
options:
用來控制最大的迭代次數(shù),以字典的形式來進(jìn)行設(shè)置,例如:options={‘maxiter’:400}
minimize求解約束函數(shù)最小值
- fun: 求最小值的目標(biāo)函數(shù)
- x0:變量的初始猜測值,如果有多個變量,需要給每個變量一個初始猜測值。minimize會出現(xiàn)局部最優(yōu)的情況,所以這塊的處理方法需要尋找。
- args:常數(shù)值,后面例子會講解,fun中沒有數(shù)字,都以變量的形式表示,對于常數(shù)項,需要在這里給值
- method:求極值的方法,官方文檔給了很多種。一般使用默認(rèn)。每種方法我理解是計算誤差,反向傳播的方式不同而已,這塊有很大理論研究空間
- constraints:約束條件,針對fun中為參數(shù)的部分進(jìn)行約束限制
1.計算 1/x+x 的最小值 # coding=utf-8 from scipy.optimize import minimize import numpy as np #demo 1 #計算 1/x+x 的最小值 def fun(args): a=args v=lambda x:a/x[0] +x[0] return v if __name__ == "__main__": args = (1) #a x0 = np.asarray((2)) # 初始猜測值 res = minimize(fun(args), x0, method='SLSQP') print(res.fun) print(res.success) print(res.x)
執(zhí)行結(jié)果:函數(shù)的最小值為2點多
原文鏈接:https://blog.csdn.net/weixin_46713695/article/details/126835226
相關(guān)推薦
- 2022-06-14 Golang使用ini庫讀取配置詳情_Golang
- 2022-06-09 ASP.NET?Core使用EF創(chuàng)建模型(索引、備用鍵、繼承、支持字段)_實用技巧
- 2022-06-06 Element UI詳解el-scrollbar 滾動條組件 —— 監(jiān)聽滾動條的滾動,跟隨頁面一起滾
- 2022-04-18 Taro中設(shè)置 tabbar上的徽章。
- 2022-03-16 .NET6自定義WebAPI過濾器_實用技巧
- 2022-09-21 淺析C++函數(shù)模板和類模板_C 語言
- 2022-05-11 垃圾收集器ParNew&CMS與底層三色標(biāo)記算法詳解
- 2022-08-13 Android開發(fā)Viewbinding委托實例詳解_Android
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支