【发布时间】:2020-04-29 14:12:34
【问题描述】:
我是 Pyomo 和 Ipopt 的新手。我想使用这些工具优化非线性优化问题。尝试优化函数时出错。
我一直在玩 Pyomo 提供的示例。我的问题的主要区别是我想在一个单独的函数中定义目标函数,这意味着与 numpy 数组进行一些乘法,但我认为它们都可以用 Pyomo 处理。
我试图尽可能地简化我的问题(从优化的角度肯定它没有意义,但它只是为了展示问题)。我的问题看起来像:
import numpy as np
from pyomo.environ import *
def myfunc(model, extra_param):
matrix_A=np.sin(np.random.rand(100,100))+extra_param
return sum(model.x*matrix_A-extra_param)
extra_param=5
model = ConcreteModel()
model.IDX=range(100)
model.x = Var(model.IDX,bounds=(0,1.), initialize=0.99)
model.obj=Objective(expr = myfunc(model,extra_param))
model.pprint()
solver = SolverFactory('ipopt')
solver.solve(model, tee=True)
我收到以下消息:
Ipopt 3.11.1: C:\Users\A\Anaconda3\Library\bin\ipopt.exe: jacdim: got M = 0, N = 0, NO = 1
ERROR: Solver (ipopt) returned non-zero return code (1)
ERROR: See the solver log above for diagnostic information.
【问题讨论】:
-
我不建议在目标中使用随机数生成器。
-
感谢欧文的评论。是的,从优化的角度来看确实没有意义(我将一些第三方数据替换为随机矩阵只是为了简化问题)。但是,无论是否在目标函数中使用随机数生成器,我都会得到相同的错误。
标签: python optimization pyomo