首页 > 解决方案 > 如何为 scipy 最小化创建目标函数

问题描述

是的,为大量的问题道歉,但我是 Python 的新手,我一直在努力。

我相信我终于创建了一个有点功能的代码。但是,我似乎无法正确定义目标函数。其余的似乎计算正确(基于目标给我的值)。这是我现在的目标函数:

def objective (x):
    global sumIp, sumIm
    if (It[i-1] - d[i] + Qt[i-LT]) >= 0:
        sumIp = sumIp + x[2]
        sumIm = sumIm + 0
    else:
        sumIp = sumIp + 0
        sumIm = sumIm - x[2]
    return h*sumIp+b*sumIm

x[2] 是我的 It[i]。sumIp 和 sumIm 都应该 >= 0。

如果有人想看看,这里是完整的代码:https ://pastebin.com/AxC7fTVv - 我相信这是我实现我想要的唯一部分,但我不知道该怎么做这对我来说是一辈子的事,在这附近已经好几天了!任何帮助表示赞赏。

标签: pythonpython-3.xscipy

解决方案


概括

可以,然后呢。我将总结您的问题(对您而言,但主要是为了帮助我:p)。

您有一系列要计算的值,它们都围绕着计算Qt[i]。那些是:

  • d[i]- 在“真实世界”场景中外部提供的一些值列表,但出于您的目的,使用随机值进行模拟;最重要的是,这不是必须计算的东西。(另一个注意事项:我假设我们不能“预见未来”并使用d[i+1],或类似的东西。)
  • It[i]- 由It[i] = It[i-1] - d[i] + Qt[i-LT]Qt省略部分i < LT)给出;这是根据前周期值和d值计算得出的,因此可以很容易地计算出
  • Ip[i], Im[i]- 这些都是直接从 计算出来的It[i],所以再一次,很容易计算
  • NIt[i]- 由 给出NIt[j] = NIt[j-1] - d[j] + Qt[j-1],并且可以很容易地计算It[i]
  • Qt[i]- ...?

简而言之:唯一需要弄清楚的是Qt[i]. 因此,如果您决定使用类似的优化器scipy.minimize,您需要的唯一变量是x[0]. 但是如果你只有一个变量,你甚至不需要使用优化器。您更有可能想出一些直接为您提供优化结果的函数/表达式。

解决方案

...还不太确定 :\ 抱歉


推荐阅读