python - 是否可以在 Pyomo 的目标函数中编写非线性分段函数?
问题描述
我想使用 Pyomo 来解决使用 Ipopt 的非线性优化。在这方面,我在我的代码中设计了一个函数作为目标函数,它本身在其中使用另一个函数。内部函数是非线性和分段的,定义如下。
def U3(x,omega,U_alpha3):
if x<=omega/U_alpha3:
return omega*x-U_alpha3/2*x**2
else:
return 0.5*omega**2/U_alpha3
但是这个函数会导致这个错误:
TypeError: '<=' not supported between instances of 'IndexedComponent_slice' and 'numpy.float64'
考虑到我的决策变量在 x 内部(它是“IndexedComponent_slice”类型)并且 omega 和 U_alpha3 是固定参数(它们是“numpy.float64”类型)
解决方案
是的。Ipopt 的 Pyomo NL 文件接口通过Expr_If表达式类支持这一点,因为您定义的函数的标准警告是两次连续可微分等(我们不会为您验证)。
推荐阅读
- vb6 - Dir 函数错误“参数数量错误或属性分配无效”
- azure - 如何在线备份 Azure DevOps 源代码控制并还原到本地 Azure DevOps 服务器实例
- javascript - 在 Node 中多次使用 replace() 和全局变量
- php - 创建新表时不能添加外键约束
- c# - 我需要使用 Epplus 修改列的值
- safari - Safari 上的跨站点跟踪?任何解决方法?
- html - div 内的输入事件与标签内的输入事件的作用不同
- ruby - 在 VSCode 终端中在 Win 10 上运行 rake 任务会添加一个默认的 -w 标志
- excel - 使用 Excel VBA 我正在尝试从我当前的另一个工作簿中创建一个联合字符串
- django - Django:通过模板中的模型显示多对多关系