【问题标题】:Python ValueError: Objective function must return a scalar [closed]Python ValueError:目标函数必须返回一个标量[关闭]
【发布时间】:2018-06-22 22:55:45
【问题描述】:

嘿,我正在尝试在此函数上运行优化器。它应该返回 X = 1.5。

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import scipy.optimize as spo

def f(x):
    # Given a scalar X, return some value (a real number)
    Y = (X - 1.5)**2 + 0.5
    print "X = {}, Y = {}".format(X, Y)
    return Y

def test_run():
    Xguess = 2.0
    min_result = spo.minimize(f, Xguess, method = 'SLSQP', options = {'disp': True})
    print "Minima found at:"
    print "X = {}, Y = {}".format(min_result.x, min_result.fun)

if __name__ == "__main__":
    test_run()

【问题讨论】:

  • X 实际上是一个标量吗?如果不是,那么它很可能会迫使 Y 也成为一个(一维)numpy 数组。
  • CVers 注意:问题的原因是小写的x 传递给f,但被大写的X 引用。
  • 我应该删除它吗?

标签: python pandas numpy matplotlib scipy


【解决方案1】:

f() 的参数是小写的x。但是您在函数中引用大写的X。将您的函数定义更改为f(X) 并且您的代码运行没有错误。

f(X):

test_run()

X = [ 2.], Y = [ 0.75]
X = [ 2.], Y = [ 0.75]
X = [ 2.00000001], Y = [ 0.75000001]
X = [ 0.99999999], Y = [ 0.75000001]
X = [ 1.5], Y = [ 0.5]
X = [ 1.5], Y = [ 0.5]
X = [ 1.50000001], Y = [ 0.5]
Optimization terminated successfully.    (Exit mode 0)
            Current function value: 0.5
            Iterations: 2
            Function evaluations: 7
            Gradient evaluations: 2
Minima found at:
X = [ 1.5], Y = 0.5

【讨论】:

  • 如果这确实是原因,那么问题是印刷错误(应该关闭)。
  • 是的,好点。投票结束。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-13
  • 1970-01-01
  • 2016-07-21
  • 1970-01-01
  • 2017-08-11
  • 1970-01-01
  • 2017-04-08
相关资源
最近更新 更多