【问题标题】:Using scipy optimization library for many parameters对许多参数使用 scipy 优化库
【发布时间】:2016-12-06 19:48:38
【问题描述】:

我想最大化一个有五十个变量的函数的返回值;

def function_to_maximize:
    return (7.9*a1 + 8.1*a2 + 0.4*a3 + ........ + 2.6*a50)

我的变量是 0

很遗憾,我对这类任务不是很熟悉。通过谷歌搜索,我发现我可以使用这个documantation 来完成工作,但我不知道如何使用这个库。

您能否提供一个简单的 cmets 示例代码,告诉我必须应用的步骤?

【问题讨论】:

  • 你试过只使用几个变量吗?有哪些障碍?
  • @Benjamin 首先我想做一个最大化,但文档谈到了最小化。必须有一个技巧来找到最大值。还有很多标头、算法。我不确定哪一个适合我。它们只是最小化功能的不同实现吗?
  • 是的,它们是不同的算法。有些支持约束,有些不支持。如果你使用一般的最小化函数 scipy 会自动选择一个。只需检查文档和示例。你的问题是微不足道的。请记住:max (7*a1 + 8*a2) == min(-7*a1 -8*a2)。 编辑:这里最好的方法是使用线性规划(这是最有限的方法,一般来说最好的求解器)。在 scipy 中有 linprog,但它很糟糕。不过你可以试试!
  • 当 10 个最大的乘法因子在变量中的值都为 10(其他为零)时,会不会出现最大值?
  • 当然不是@Benjamin。 10000*a1+0.1*a2+0.1*a3+0.1*a4+0.1*a5+0.1*a6+0.1*a7+0.1*a8+0.1*a9+0.1*a10+0?

标签: python numpy optimization scipy


【解决方案1】:

使用我为scipy 制作的包装器symfit,这变得更容易实现。所以请原谅我推荐你试一试。你可以在这里找到文档:http://symfit.readthedocs.io/en/latest/fitting_types.html#minimize-maximize

在你的情况下;我会做以下事情:

from symfit import parameters, Maximize, Equality

# Make your 50 parameters to optimize and their coefficients.
aN = parameters(', '.join('a{}'.format(i) for i in range(1, 51)))
coeff = [7.9, 8.1, ..., 2.6]

model = sum(coeff_i * a_i for a_i, coeff_i in zip(aN, coeff))
fit = Maximize(model, constraints=[Equality(sum(aN), 100)])
fit_result = fit.execute()

完成!

附言我担心这是一个未确定的方程组,对吗?但这是你要担心的:)。

【讨论】:

    猜你喜欢
    • 2018-11-04
    • 1970-01-01
    • 1970-01-01
    • 2020-11-25
    • 2016-05-26
    • 2019-03-15
    • 1970-01-01
    • 1970-01-01
    • 2019-07-20
    相关资源
    最近更新 更多