python - 如何在 Python 中使用惩罚函数时编写“优化”问题
问题描述
我检查了 Python 中的scipy和纸浆库文档。我知道我可以使用“def”来实现我的目标,但即使在一个简单的问题中它也不起作用——我很困惑,不知道应该使用哪个求解器或方法来解决它。即使我尝试了最简单的惩罚函数形式,如下所示,这个问题应该尝试 4 个给定的数字而不是y
变量来最小化惩罚函数作为目标(答案很清楚y=-2
,obj
函数将是 -4):
from scipy.optimize import minimize
import numpy as np
def f(y):
if y>=0:
return y
else:
return 2*y
y = np.array([1,-1,2,-2])
res = minimize(f(y),args = [y])
但我面临这个错误:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
请帮助我知道我应该如何编码这个惩罚函数,以及我应该使用哪个其他库或方法。
解决方案
您的函数是一个标量函数,最小化将向量函数作为输入。
在您的情况下,您更喜欢使用将标量函数作为输入的minimize_scalar :
from scipy.optimize import minimize_scalar
def f(y):
if y >= 0:
return y
else:
return 2 * y
minimize_scalar(f, bounds=(-2, 1), method='bounded')
# fun: -3.9999930649182844
# message: 'Solution found.'
# nfev: 28
# status: 0
# success: True
# x: -1.9999965324591422
推荐阅读
- php - php中的foreach循环条件执行
- c# - 如何在 C# ChromeDriver 中禁用加载 javascript?
- django - 导出具有反向外键关系的模型的 xlsx 文件,并将该反向外键关系作为单独的列
- node.js - Nodejs express API无法在本地的公共作品中连接
- java - Thymeleaf 模型与 HttpServletRequest
- swift - UITableview 单元格高度在 iOS 14.0 中的滚动表视图上发生变化
- javascript - 如何查看在网页上单击按钮时正在发生的过程?
- vb.net - 使用 vb.net 以编程方式为系统范围的“访问权限”添加或删除用户
- visual-c++ - 将此代码转换为宏
- python - pip wheel 如何解决传递依赖?