Nik*_*raj 4 python numpy mathematical-optimization scipy
我正在尝试使用负数scipy.optimize.minimize最大化功能f (a, b, c, d)。d是一个numpy.array猜测变量。
我试图给每一个划定界限d。以及对每个d这样的约束(d1 * a1 + d2 * a2 + ... + d3 * a3) < some_Value(a作为主题函数的另一个参数f)。
我的问题是如何将这个约束定义为最大化函数的参数。
我maximize在库中找不到任何函数,因此我们在此处使用minimizewith minimize文档的负面内容。
如果问题不够清楚,请考虑要求澄清。
从您的描述中还不清楚,f您正在优化哪些参数。出于本示例的目的,我将用来x指代您正在优化的a参数向量,并指代另一个具有相同长度且保持不变的参数向量。
现在,假设您要实施以下不平等约束:
10 <= x[0] * a[0] + x[1] * a[1] + ... + x[n] * a[n]
Run Code Online (Sandbox Code Playgroud)
首先,您必须定义一个函数,该函数接受x并a返回一个满足约束条件时非负的值。在这种情况下,我们可以使用:
lambda x, a: (x * a).sum() - 10
Run Code Online (Sandbox Code Playgroud)
或等效地:
lambda x, a: x.dot(a) - 10
Run Code Online (Sandbox Code Playgroud)
传递约束以最大程度地减少dict(如果要应用多个约束,则传递一系列dict):
con = {'type': 'ineq',
'fun': lambda x, a: a.dot(x) - 10,
'jac': lambda x, a: a,
'args': (a,)}
Run Code Online (Sandbox Code Playgroud)
为了提高效率,我还定义了一个返回雅可比行列式的函数(约束函数的偏导数wrt中的每个参数的序列x),尽管这不是必需的-如果未指定,它将通过一阶有限差分来估计。
您的呼叫minimize将如下所示:
res = minimize(f, x0, args=(a,), method='SLSQP', constraints=con)
Run Code Online (Sandbox Code Playgroud)
您可以在此处的官方文档中找到使用SLSQP进行约束优化的另一个完整示例。
| 归档时间: |
|
| 查看次数: |
6606 次 |
| 最近记录: |