优化程序例程的变量变量

时间:2013-09-20 12:02:21

标签: python function variables python-2.7 dictionary

如何使用变量创建目标函数?

我正在尝试使用许多变量优化某个函数,所有变量都具有不同程度的不确定性。

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 ..

我想创建一个只有两个输入的函数:

  1. 要优化的变量(3个字符串的数组?)
  2. 他们的起始值
  3. 我想到的选项是通过全局变量为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方式是什么?

1 个答案:

答案 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但我认为它对于你的复杂问题仍然很简单:)