我在Python Gekko程序中有一个错误,它说一个方程有问题。我知道这个问题有两种解决方案,单位圆与直线相交。
from gekko import GEKKO
m = GEKKO()
x = m.Var()
y = m.Var()
m.Equation(x**2+y**2=1)
m.Equation(x=y)
m.solve()
当我把这些方程放在一起时,它给出了一个不同的误差SyntaxError: invalid syntax。
from gekko import GEKKO
m = GEKKO()
x = m.Var()
y = m.Var()
m.Equations([x
我想使用numpy数组乘法创建方程,即我想将一个数组中的所有变量及其系数都保存在另一个数组中,然后将它们相乘以产生一个表达式,这样我就可以使用GEKKO的m.Equation()方法。我尝试了上面提到的代码,但失败了,请告诉我如何实现我的目标。
所谓“它失败了”,我的意思是它只是给出了一个错误,并且不允许我在GEKKO提供的m.Equation()方法中使用x*y==1作为方程。我的目标是将变量保存在一个数组中,将它们的系数保存在另一个数组中,然后将它们相乘,得到数学方程,作为m.Equation()方法的输入。
import numpy as np
from gekko import GEK
在我正在编写的求解带有GEKKO的微分方程组的建模框架中,我想计算参数的最大值(外部强迫)和整数值(例如0),并将结果用于模型方程中。
关键问题是,对于通过矢量化函数传递参数,目前参数被包装成一个中间方程。这就是为什么向量化的最大值函数(例如内置的max和np.maximum )返回TypeError: object of type 'int' has no len()的原因。
我想使用顺序求解器(例如,== 4),这样GEKKO max2和max3函数也不能工作,如下所示。
本质上,用例可以归结为这个最小的示例:
from gekko import GEKKO
import
我已经安装了gekko软件包,并更新了pip的最新版本。我已经运行了'pip列表‘命令,并确认已经安装了gekko包。实际上,我可以在同一台机器上使用带有高级编辑器的gekko包,使用相同的脚本,但是当我试图在spyder编辑器中运行它时,相同的脚本会抛出ModuleNotFoundError: No module named 'gekko'错误。我在windows 10上安装和运行了python版本3.6和3.9。
下面是一个非线性方程的例子:
x+2y=0
x^2+y^2=1
很明显,这个方程有两个根。
但是,我使用GEKKO只能得到一个根,改变x,y的初始值可以得到另一个根。
from gekko import GEKKO
m = GEKKO()
# first solution
x,y = [m.Var(1) for i in range(2)]
m.Equations([x+2*y==0,x**2+y**2==1])
m.solve(disp=False)
print(x.value,y.value)
# second solution
x.value=-1
y.value=-1
m
下面是一个解线性方程组的简单示例,以及使用for循环求解许多方程的示例。 import numpy as np
from gekko import GEKKO
m = GEKKO(remote=False)
# Random 3x3
A = np.random.rand(3,3)
# Random 3x1
b = np.random.rand(3)
# Gekko array 3x1
x = m.Array(m.Var,(3))
# solve Ax = b
eqn = np.dot(A,x)
for i in range(3):
m.Equation(eqn[i]==b[i])
我正在尝试使用以下命令在我的python终端中安装gekko模块
python install -m pip gekko
但是它抛出了一个无法识别pip的错误:
can't open file 'pip': [Errno 2] No such file or directory.
我正在使用Pycharm中的终端和Python 3.7
我希望最小化在两个不同大小的数据集中测量的y和y的预测值之间的差异,使用两个共有自变量的方程。我在用gekko作为我的解决者。
当我的两个数据集有不同的行数时,我会得到异常错误Data arrays must have the same length, and match time discretization in dynamic problems。但是,即使将行数设置为相等,也会得到错误duplicate variable declarations。因此,它使我相信,我的优化问题是不明确的,以解决两个方程,共有自变量。
变量:v1, v2
参数(ds =数据集):
ds1_p1, ds1_
我试图用GEKKO来适应特定的数据集,使用FOPDT优化方法来估计k,τ和θ。
我在上看到了使用odeint的例子,并试图对GEKKO做同样的事情,但是我不能使用方程中θ的值。
我看到了这个问题,和docs ,但是在这个例子中,我想估计θ的值,而不是使用最初的猜测值。我试着使用gekko的延迟,但是我得到一个错误,只有延迟是int值(而不是gekko FV)才能工作。我也尝试在方程中直接使用时间,但是我不知道如何把x(Theta)放在里面,因为我不能用gekko变量来做语法。
import pandas as pd
import numpy as np
from gekko import GE
有时,一个求解器比另一个求解器能更好地解决我的Python Gekko应用程序。很难预测哪个求解器会表现得最好。因为Python Gekko支持使用m.GEKKO(server='http://{address}')在不同服务器上进行本地或远程求解,所以是否可以创建一个并行Gekko应用程序,该应用程序将在任意数量的计算机(包括本地计算机)上同时尝试所有求解器,然后在第一个进程成功返回时终止其他进程?我一直在研究Python的多线程和并行程序包。有没有能和Gekko一起很好地进行并行求解的工具?这是一个连续的原型:
from gekko import GEKKO
m = GEK
我需要做一些优化,但我没有什么经验,而不是100%从哪里开始。
假设我有一个回归方程;
y = exp(intercept + beta1 * x1 + beta2 * x2)
如何使用scipy.optimize找到x1和x2的输入,从而使y最大化;
intercept = 10
beta1 = 1.1
beta2 = 1.2
Constraints;
(x1 + x2) has to be less than 10
x1 has to be greater than x2
我不想强迫它(即手工计算x1和x2的每一个组合的y)。这是一个非常简单的例子,我希望从中学习和建立。
使用Phython的GEKKO库并按照的例子求解波动方程,需要创建大量的方程。
m.Equations([u[i].dt() == v[i]for i in range(npx)])
m.Equations([v[i].dt() == c**2*(u[mod(i+1,npx)]-2.0*u[mod(i,npx)]+u[mod(i-1,npx)])/dx**2 for i in arange(0,npx,1)])
(我已经通过mod将其简化为两行,包括边界条件,并让我从0运行到99,但基本上与示例中的相同。)
它仍然在使用for-loop,即v[i]for i in range(npx)]。我们
我试图通过限制我想要使用的非零变量的数量来优化这个方程。x,z,w继续返回为0数字 from gekko import GEKKO
m = GEKKO()
# creates the variables
x = m.sos1([0,2])
z = m.sos1([0,3])
w = m.sos1([0,4])
# use sign2 to define a new variable
y = m.sign2(x)
t = m.sign2(z)
v = m.sign2(w)
# Equation
m.Equation(y+t+v<=2)
m.Equation(x+z+w>=5)
#o
我试图找到参数值,以便用给定的一组点最好地拟合下面的模型函数。
Model:
x
y = ------------------------
1- (a1*x)^2 + (a2*x)^4
where parameters are: a1, a2
(1)我用这个方程找到了最优参数值,但它给出了任意x(红色图)的y=~0值。
(3)令人惊讶的是,使用以下只包含一个参数的模型得到了更好的拟合。
Model:
x
y = -------------
1- (a1*x)^2
where para
用Python中的IPOPT成功地解决了一个具有平方目标的优化问题。
from gekko import GEKKO
import numpy as np
m = GEKKO()
x = m.Var(); y = m.Param(3.2)
m.Obj((x-y)**2)
m.solve()
print(x.value[0],y.value[0])
但是,当我切换到绝对值目标np.abs(x-y) (abs的numpy版本)或m.abs(x-y) (abs的Gekko版本)时,IPOPT解决程序报告了一个失败的解决方案。绝对值近似m.sqrt((x-y)**2)也失败了。
失败解决方案
from
我试图找到一个轨迹,将力的平方积分降到最小,从而将一个块从一个点移动到另一个点。以下是系统动态:
dx/dt = v (derivative of position is velocity)
dv/dt = u (derivative of velocity is acceleration, which is what I am trying to minimize)
min integral of u**2
初始条件和最终条件是:
x(0) = 0, v(0) = 0
x(1) = 1, v(1) = 1
我已经使用Gekko库在python中实现了这一点,但最后的条件无法正常工作。使用m.