gpt4 book ai didi

Python:如何使用 lambda 函数为 fmin_cobyla 优化创建许多约束

转载 作者:行者123 更新时间:2023-12-02 02:04:17 26 4
gpt4 key购买 nike

我有一个由几百个数字条目组成的向量(如下所示:Xo = [x1, y1, x2, y2,..., xN, yN]),其中 N 是任意数字。我需要将此向量传递给 scipy fmin_cobyla 优化器,并对每个条目进行简单的约束:1. 所有 x(即 x1、x2、...、xN)都满足 -1

我尝试使用 lambda 函数来指定这样的约束

b0 = lambda Xo: 1 - Xo[n]
b1 = lambda Xo: Xo[n] + 1

但是我完全不确定如何传递正确的索引 n。我希望所有偶数 n 都受 b0 和 b1 约束,但所有奇数 n 受 b2 和 b3 约束

b2 = lambda Xo: 2 - Xo[n]
b3 = lambda Xo: Xo[n] + 2

我可能需要在 fmin_cobyla 中使用 consargs。任何帮助将不胜感激。

最佳答案

约束是否需要连续?如果没有,这里有一种使用一个函数来完成此操作的简单方法。如果满足约束,它将返回 1,如果不满足,它将返回 -1:

def checkall(xs):
for j, x in enumerate(xs):
if abs(x) > (2 if j % 2 else 1):
return -1
return 1
cons = (checkall,)

如果需要连续约束,有很多方法可以实现。这是一个具有 2N 个线性函数的函数,N 表示正约束,N 表示负约束。

def checkpos(j):
if j % 2:
return lambda xs: 2 - xs[j]
else:
return lambda xs: 1 - xs[j]
def checkneg(j):
if j % 2:
return lambda xs: 2 + xs[j]
else:
return lambda xs: 1 + xs[j]

cons = [checkpos(j) for j in range(N)] + [checkneg(j) for j in range(N)]

关于Python:如何使用 lambda 函数为 fmin_cobyla 优化创建许多约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6536161/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com