1

如何创建具有可变变量的目标函数?

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

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. 它们的起始值

我正在考虑的选项是通过全局变量为 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 方式是什么?

4

1 回答 1

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,但我认为它对于您的复杂问题仍然足够简单:)

于 2013-09-20T15:26:39.250 回答