解决 NLP 时目标值不一致

Posted

技术标签:

【中文标题】解决 NLP 时目标值不一致【英文标题】:Inconsistent Objective Value when solving NLP 【发布时间】:2021-11-26 03:38:12 【问题描述】:

目标是二次函数。


final = np.zeros_like(m.time)
final[-1] = 1
final = m.Param(final)

final_obj = ((m.Cs_n_avg[0]*final-0.0226981-0.25)*100)**2
m.Obj(final_obj)

m.options.IMODE = 6
m.options.SOLVER = 3
m.options.MAX_ITER = 500
m.solve(disp=True)


m.options.OBJ
3718.2126872

m.Cs_n_avg[0]
[0.0226981, 0.059400736803, 0.093924942354, 0.13029876847, 0.17044062163, 0.21694119575, 0.27269809999]

如果将m.Cs_n_avg[0]的值代入目标函数,则值为0。

【问题讨论】:

这似乎是一个稳态问题。您可能想尝试使用“IMODE=3”。另外,能否请您附上完整的代码? 【参考方案1】:

这是来自Dynamic Optimization course 的一个相关问题(参见问题 1b),其中最终值被最小化。当前问题不完整,因为代码缺少几个依赖项。请更新问题或使用以下示例来提供帮助。

import numpy as np
import matplotlib.pyplot as plt
from gekko import GEKKO

m = GEKKO()

nt = 101
m.time = np.linspace(0,1,nt)

# Variables
x1 = m.Var(value=1)
x2 = m.Var(value=0)
u = m.Var(value=-0.48)

p = np.zeros(nt)
p[-1] = 1.0
final = m.Param(value=p)

# Equations
m.Equation(x1.dt()==u)
m.Equation(x2.dt()==x1**2 + u**2)
m.Equation(final*(x1-1)==0)

# Objective Function
m.Minimize(x2*final)

m.options.IMODE = 6
m.solve()

plt.figure(1)
plt.plot(m.time,x1.value,'k:',lw=2,label=r'$x_1$')
plt.plot(m.time,x2.value,'b-',lw=2,label=r'$x_2$')
plt.plot(m.time,u.value,'r--',lw=2,label=r'$u$')
plt.legend(loc='best')
plt.xlabel('Time')
plt.ylabel('Value')
plt.show()

【讨论】:

以上是关于解决 NLP 时目标值不一致的主要内容,如果未能解决你的问题,请参考以下文章

画线时触摸结束时线不一致

使用版本重定向解决以COM方式调用Excel程序集版本不一致问题

如何解决 HTML5 输入框高度不一致的问题?

解决小程序sessionid不一致

如何解决 Python 中的“ValueError:找到样本数量不一致的输入变量”问题

MirrorMaker队列名称不一致解决