Minimization of a function with constraints in Python(在Python语言中实现带约束函数的最小化)
本文介绍了在Python语言中实现带约束函数的最小化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试最小化包含我想要查找的最小化参数的三个N大小数组的函数。例如,假设为了最小化函数而要查找的参数由数组x = x[0],x[1],...,x[N-1]
、a = a[0],a[1],...,a[N-1]
和b = b[0],b[1],...,b[N-1]
给出。此外,在该问题中,最小化边界是受约束的,约束如下:
0 <= x[i] and sum(x[i])-1=0 for all i=0,...,N-1
0 <= a[i] <= Pi/2 for all i=0,...,N-1
0 <= b[i] <= Pi/2 for all i=0,...,N-1
在this问题之后,我能够将这些约束定义如下:
import numpy as np
#defining the constraints for minimization
#constraints on x:
Dx_lhs = np.diag(np.ones(N))
def xlhs(x): #left hand side
return Dx_lhs @ x
def xrhs(x): #right hand side
return np.sum(x) -1
con1x = {'type': 'ineq', 'fun': lambda x: xlhs(x)}
con2x = {'type': 'eq', 'fun': lambda x: xrhs(x)}
#constraints on a:
Da_lhs = np.diag(np.ones(N))
Da_rhs = -np.diag(np.ones(N))
def alhs(a):
return Da_lhs @ a
def arhs(a):
return Da_rhs @ a + (np.ones(N))*np.pi/2
con1a = {'type': 'ineq', 'fun': lambda a: alhs(H)}
con2a = {'type': 'ineq', 'fun': lambda a: -1.0*Hrhs(H)}
# Restrições em b:
Db_lhs = np.diag(np.ones(N))
Db_rhs = -np.diag(np.ones(N))
def blhs(b):
return Db_lhs @ b
def brhs(b):
return Db_rhs @ b + (np.ones(N))*np.pi/2
con1b = {'type': 'ineq', 'fun': lambda b: alhs(H)}
con2b = {'type': 'ineq', 'fun': lambda b: -1.0*Hrhs(H)}
现在假设我有如下函数:
def fun(mins): #just an example
x, a, b = mins
for i in range(N):
sbi=0; sai=0
for j in range(i+1):
sbi += 2*x[j]*np.tan(b[j])
sli += 2*x[j]*np.tan(a[j])
B[i]=sbi
A[i]=sai
return (B @ C)
这不起作用,因为函数的第一行可能不是定义它的正确方式(我不知道应该如何声明包含我想要最小化的变量的数组)。谁能帮助我解决这个问题并应用scipy.optimize.minimize
来查找最小化我的函数的x[], a[]
和b[]
的值?
附注:所提供的函数仅用于说明目的,最小化解可能是显而易见的。
推荐答案
要最小化的函数应接受所有参数的一维数组。如果要将此数组拆分为3个不同的数组,可以使用重塑操作:
x, a, b = mins.reshape(3, N)
这篇关于在Python语言中实现带约束函数的最小化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:在Python语言中实现带约束函数的最小化
基础教程推荐
猜你喜欢
- 何时使用 os.name、sys.platform 或 platform.system? 2022-01-01
- 在 Python 中,如果我在一个“with"中返回.块,文件还会关闭吗? 2022-01-01
- 筛选NumPy数组 2022-01-01
- 用于分类数据的跳跃记号标签 2022-01-01
- Dask.array.套用_沿_轴:由于额外的元素([1]),使用dask.array的每一行作为另一个函数的输入失败 2022-01-01
- 如何让 python 脚本监听来自另一个脚本的输入 2022-01-01
- 使用PyInstaller后在Windows中打开可执行文件时出错 2022-01-01
- 如何在海运重新绘制中自定义标题和y标签 2022-01-01
- Python kivy 入口点 inflateRest2 无法定位 libpng16-16.dll 2022-01-01
- 线程时出现 msgbox 错误,GUI 块 2022-01-01