【问题标题】:variable variables for optimizer routine优化程序的可变变量
【发布时间】:2013-09-20 12:02:20
【问题描述】:

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

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

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 方式是什么?

【问题讨论】:

  • 对于初学者来说,使用exec 可能从来都不是最好的或最 Python 的方式。
  • 那么你最后是怎么做的?

标签: python function variables python-2.7 dictionary


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-12
    • 2016-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 1970-01-01
    相关资源
    最近更新 更多