如何使用变量创建目标函数?
我正在尝试使用许多变量优化某个函数,所有变量都具有不同程度的不确定性。
result = opt.minimize(fObj,x0,method='nelder-mead',
options={'xtol':1e-1})
fObj有很多变量,比如a,b,c,d,e,f,g等。但是由于我的目标函数中的信息,只有同时优化3个变量才有意义。因此,我想通过改变说a,c和d,以及可能接下来的a,d和f ..
我想创建一个只有两个输入的函数:
我想到的选项是通过全局变量为fObj提供所有变量的默认值,并包含一个带有变量名的全局字符串以替换为exec()函数。
def fObj(x):
global a, b, c, d, e, f, g, h, VarList
# some hocus pocus that reads VarList
# e.g.
# VarList = ['c', 'd', 'f']
# c = x[0]
# d = x[0]
# f = x[0]
return someMathematiclOutputInvolvingAllVars
实现这一目标的最佳/最pythonic方式是什么?
答案 0 :(得分:1)
如果a,b,c ...是浮动的,例如我会使用一个浮动容器:
class MyFloat:
self.val
...
a = MyFloat(0.1)
...
def fObj():
global a, b
use a.val, b.val, ... instead of a, b, ...
给opt.min函数赋予变量数组以最小化(A,C,D)并且它可以在不知道它们名称的情况下改变它们的值
这不是非常pythonic但我认为它对于你的复杂问题仍然很简单:)