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 を変えて遊んでみたい..

入力が 2 つしかない関数を作成したい:

  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 ... が float の場合、float コンテナーを使用します。

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 に答える