我目前有一个带有很多参数的函数(让我们调用它们 * lot , a , b ),做了很多事情并返回3个浮点数( x , y , z )。 我要做的是通过改变 a 和 b 并对 a 施加一些约束来最小化 x , b , y 和 z ( a 和 b 受限于min y 和 z 只有最小值时的最大值。
如果我只是探索我的搜索区域,我可以看到构成所有 x 的表面实际上是一个碗,所以我的结果是线性的(或者我错了吗?)如果我的结果是线性的我可以使用单纯形来找到我的约束所允许的最小值(或者我错了吗?)。
现在我的问题:在python中,从scipy使用optimize.minimize似乎我不能使用simplex约束(除了 a 和 b 但这不是最大的问题)所以我完全误解了最小化函数吗?我是否真的需要除了单纯形之外的其他东西,还是除了优化函数之外还有其他解决方案吗?
以下是某种可以模拟我的功能的代码段:
# coding=utf-8
def bowl(a,b):
y = a*b
z = a/b
x = (a*a)/(y*y) + (b*b)/(z*z)
return x,y,z
def surface(min_a, max_a, min_b, max_b):
for a in range(min_a,max_a):
buffer = list()
for b in range(min_b, max_b):
buffer.append(bowl(a,b))
print(buffer)
surface(1,10,1,10)