- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用两个或更多输入来创建更精确的变量估计。我已经仅使用一个输入和一个 FOPDT 方程对其进行了估算,但是当我尝试添加一个输入和相应的 k、tau 和 theta 以及另一个方程时,我收到“未找到解决方案”错误。我可以这样创建方程组吗?
有关下面求解器输出的更多详细信息。尽管我添加的变量多于使用多个输入的方程式,但这使我的问题具有负自由度。
--------- APM Model Size ------------
Each time step contains
Objects : 2
Constants : 0
Variables : 15
Intermediates: 0
Connections : 4
Equations : 6
Residuals : 6
Number of state variables: 1918
Number of total equations: - 2151
Number of slack variables: - 0
---------------------------------------
Degrees of freedom : -233
* Warning: DOF <= 0
**********************************************
Dynamic Estimation with Interior Point Solver
**********************************************
Info: Exact Hessian
******************************************************************************
This program contains Ipopt, a library for large-scale nonlinear optimization.
Ipopt is released as open source code under the Eclipse Public License (EPL).
For more information visit http://projects.coin-or.org/Ipopt
******************************************************************************
This is Ipopt version 3.12.10, running with linear solver ma57.
Number of nonzeros in equality constraint Jacobian...: 6451
Number of nonzeros in inequality constraint Jacobian.: 0
Number of nonzeros in Lagrangian Hessian.............: 1673
Exception of type: TOO_FEW_DOF in file "IpIpoptApplication.cpp" at line 891:
Exception message: status != TOO_FEW_DEGREES_OF_FREEDOM evaluated false: Too few degrees of freedom (rethrown)!
EXIT: Problem has too few degrees of freedom.
An error occured.
The error code is -10
---------------------------------------------------
Solver : IPOPT (v3.12)
Solution time : 2.279999999154825E-002 sec
Objective : 0.000000000000000E+000
Unsuccessful with error code 0
---------------------------------------------------
Creating file: infeasibilities.txt
Use command apm_get(server,app,'infeasibilities.txt') to retrieve file
@error: Solution Not Found
这是代码
from gekko import GEKKO
import numpy as np
import pandas as pd
import plotly.express as px
d19jc = d19jc.dropna()
d19jcSlice = d19jc.loc['2019-10-22 05:30:00':'2019-10-22 09:30:00'] #jc22
d19jcSlice.index = pd.to_datetime(d19jcSlice.index)
d19jcSliceGroupMin = d19jcSlice.groupby(pd.Grouper(freq='T')).mean()
data = d19jcSliceGroupMin.dropna()
xdf1 = data['Cond_PID_SP']
xdf2 = data['Front_PID_SP']
ydf1 = data['Cond_Center_Top_TC']
xms1 = pd.Series(xdf1)
xm1 = np.array(xms1)
xms2 = pd.Series(xdf2)
xm2 = np.array(xms2)
yms = pd.Series(ydf1)
ym = np.array(yms)
xm_r = len(xm1)
tm = np.linspace(0,xm_r-1,xm_r)
m = GEKKO()
m.options.IMODE=5
m.time = tm; time = m.Var(0); m.Equation(time.dt()==1)
k1 = m.FV(lb=0.1,ub=5); k1.STATUS=1
tau1 = m.FV(lb=1,ub=300); tau1.STATUS=1
theta1 = m.FV(lb=0,ub=30); theta1.STATUS=1
k2 = m.FV(lb=0.1,ub=5); k2.STATUS=1
tau2 = m.FV(lb=1,ub=300); tau2.STATUS=1
theta2 = m.FV(lb=0,ub=30); theta2.STATUS=1
# create cubic spline with t versus u
uc1 = m.Var(xm1); tc1 = m.Var(tm); m.Equation(tc1==time-theta1)
m.cspline(tc1,uc1,tm,xm1,bound_x=False)
# create cubic spline with t versus u
uc2 = m.Var(xm2); tc2 = m.Var(tm); m.Equation(tc2==time-theta2)
m.cspline(tc2,uc2,tm,xm2,bound_x=False)
x1 = m.Param(value=xm1)
x2 = m.Param(value=xm2)
y = m.Var(value=ym)
yObj = m.Param(value=ym)
m.Equation(tau1*y.dt()+(y-ym[0])==k1 * (uc1-xm1[0]))
m.Equation(tau2*y.dt()+(y-ym[0])==k2 * (uc2-xm2[0]))
m.Minimize((y-yObj)**2)
m.options.EV_TYPE=2
print('solve start')
m.solve(disp=True)
print('k1: ', k1.value[0])
print('tau1: ', tau1.value[0])
print('theta1: ', theta1.value[0])
print('k2: ', k2.value[0])
print('tau2: ', tau2.value[0])
print('theta2: ', theta2.value[0])
df_plot = pd.DataFrame({'DateTime' : data.index,
'Cond_Center_Top_TC' : np.array(yObj),
'Fit Cond_Center_Top_TC - Train' : np.array(y),
figGekko = px.line(df_plot,
x='DateTime',
y=['Cond_Center_Top_TC','Fit Cond_Center_Top_TC - Train'],
labels={"value": "Degrees Celsius"},
title = "(Cond_PID_SP & Front_PID_SP) -> Cond_Center_Top_TC JC only - Train")
figGekko.update_layout(legend_title_text='')
figGekko.show()
最佳答案
您目前只有一个变量和两个方程。
y = m.Var(value=ym)
yObj = m.Param(value=ym)
m.Equation(tau1*y.dt()+(y-ym[0])==k1 * (uc1-xm1[0]))
m.Equation(tau2*y.dt()+(y-ym[0])==k2 * (uc2-xm2[0]))
您需要为两个方程式创建两个单独的变量 y1
和 y2
。
y1 = m.Var(value=ym)
y2 = m.Var(value=ym)
yObj = m.Param(value=ym)
m.Equation(tau1*y1.dt()+(y1-ym[0])==k1 * (uc1-xm1[0]))
m.Equation(tau2*y2.dt()+(y2-ym[0])==k2 * (uc2-xm2[0]))
如果您有不同的数据,您可能还需要为 ym1
和 ym2
创建两个单独的测量向量。
编辑:多输入单输出 (MISO) 系统
对于 MISO 系统,您需要调整方程式,如 Process Dynamics and Control course 中所示。 .
y = m.Var(value=ym)
yObj = m.Param(value=ym)
m.Equation(tau*y.dt()+(y-ym[0])==k1 * (uc1-xm1[0]) + k2 * (uc2-xm2[0]))
这种形式只有一个时间常数。如果他们需要不同的时间常数,您还可以将两个输出相加:
y1 = m.Var(value=ym[0])
y2 = m.Var(value=ym[0])
y = m.Var(value=ym)
yObj = m.Param(value=ym)
m.Equation(tau1*y1.dt()+(y1-ym[0])==k1 * (uc1-xm1[0]))
m.Equation(tau2*y2.dt()+(y2-ym[0])==k2 * (uc2-xm2[0]))
m.Equation(y==y1+y2)
在这种情况下,y
是具有数据的变量,y1
和 y2
是未测量的状态。
关于python - GEKKO 中的 FOPDT 方程组 - 使用多个输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64679780/
我很好奇 IPOPT 求解器的每个求解器输出列的建议。有什么 Material 可以解释这个吗? 以下是IPOPT求解器的求解器输出。我想知道 inf_pr , inf_du , lg(mu) , |
我是 Python 中的 Gekko 库的新手,想知道我是否可以在 Gekko 中按照 LP 公式建模。 LP 公式意味着我想找到最佳的电器调度类次,以使总电力成本最小化。但是,如约束所示,每天的总耗
当使用 max2 在 Python GEKKO 中按顺序求解模型(即 IMODE >= 4)失败时和 max3 GEKKO 附带的功能。 这是针对用例,其中 np.maximum或标准max函数将 G
我正在学习如何根据实验室批量 react 器数据使用 GEKKO 进行动力学参数估计,该数据主要由 A、C 和 P 三种物质的浓度分布组成。为了我的问题,我使用的是我以前的模型精选于 question
我正在尝试使用 GEKKO 优化电力系统.具体使用 MPC 到 IEEE 14 bus测试用例。 该系统包含 14 条总线,模型由状态变量 theta 和 omega(分别为发电机的功率角和旋转频率)
EDIT2:好吧,我是个白痴。我关于横向误差的数学有问题。我已经将该等式重写为更简单的东西并且它现在可以工作了。我会离开这里以防它对任何人有用。但如果可能的话,我仍然希望有人能确保我没有做任何过分的事
我终于回到了我的项目上并找到了我的下一个障碍。 我有一个封闭的歧管: 这也是游戏即时建模中的示例轨迹 我可以让我的系统像普通汽车一样运行。我很好奇在 gekko 中合并这种类型的约束的最佳方法是什么。
Gekko 中是否有一个类轮来检索拉格朗日乘数(例如 GAMS 中的边际),或者如果不是其他方式的单行? 谢谢您的帮助。 最佳答案 这是检索拉格朗日乘数的一行。 lam = np.loadtxt(m.
我喜欢在 y 模型中约束变量值 u -0.5) # Model objective m.Obj(-Tc) # options m.options.IMODE = 6 # Problem type:
我正在尝试解决 gekko 中的一个简单混合操作。 blender mx采用两个入口流 Feed1和 Feed2 .预期结果是导出流的质量流量mx.outlet应该是入口流的质量流量的总和。 这是我尝
我想将 LINGO 代码转换为 Python GEKKO 代码。这是 Lingo 代码、lingo 结果和 gekko 代码。我不能写第二个和第三个约束。它返回索引错误,但我不明白为什么?有人可以帮忙
我正在研究一个相当大的 MINLP,模型大小约为 270,000 个变量和方程 - 5,000 个二进制文件。将 Gekko 与 APOT 求解器结合使用,我可以在大约 868 秒(不到 15 分钟)
我有一个 RTO 问题,我想用一些时间相关的参数解决多个模拟时间步长。但是,我在运行时遇到了困难,并注意到总系统时间与实际求解时间相比相对较大。因此,我试图减少总的解析时间,因为所有方程式都保持不变—
intpolatn 函数从 GEKKO 最大化目标函数接收整数变量 u_hub_next。 intpolatn 只是为了检查整数是否落在 windvel[0] 和 windvel[1] 之间以及后续的
我正在优化的问题是在传输网络中 build 发电厂。为此,我在每辆公交车上放置了发电厂,并让优化告诉我应该 build 哪些发电厂以最大限度地降低运行成本。 为了模拟植物的放置,我尝试使用一组二进制变
我在 super 计算中心本地使用 Gekko。我有一个解决 MINLP 的脚本,它可以轻松扩展以添加更多混合整数变量。我想了解随着变量数量的增加以及我需要请求的内存量,计算的成本会有多高。 当我只请
我目前正在使用 MPC 让 TCLab 加热器达到某个设定点温度。我试图让 MHE 每 50 秒更新一次某些参数值。我有一个以前的 MPC 模型,效果很好,我尝试在我的主循环中添加一个部分,让它切换以
使用 Gekko 拟合数据的数值 ODE 解。 嗨,大家好! 我想知道是否可以使用 GEKKO 拟合 ODE 的系数。 我尝试复制 example given here 失败. 这是我想出的(但有缺陷
祝大家节日快乐!我终于有一些时间来处理我的项目了,当然我和往常一样被困住了,哈哈。 我正在寻找可以让我能够模拟以下内容的指导/示例: 我有一个二进制(0 或 1)输入(我们称之为“跳跃”),我希望它只
我无法理解从 GEKKO 模型收到的错误消息。 就上下文而言,该模型应该优化气 Spring 辅助门的气 Spring 力和尺寸参数,以最大限度地减少运算符(operator)关闭门所需的力。我的目的
我是一名优秀的程序员,十分优秀!