Ниже приведен мой простой код, он должен имитировать подачу двух резервуаров в третий резервуар. Высота жидкости в каждом баке — это состояние, а подача в баки 1 и 2 — управляющие входы.
import numpy as np
import matplotlib.pyplot as plt
from gekko import GEKKO
# Parameters
A1 = 1.0 # Cross-sectional area of tank 1
A2 = 1.0 # Cross-sectional area of tank 2
k1 = 0.1 # Coefficient for outflow from tank 1
k2 = 0.1 # Coefficient for outflow from tank 2
k3 = 0.1 # Coefficient for outflow from tank 3
dt = 0.1 # Time step
t_final = 20 # Final time
# Create a Gekko model
m = GEKKO(remote=False)
# Time vector
time = np.arange(0, t_final + dt, dt)
m.time = time
# Create variables for heights of the tanks
h1 = m.Var(value=0.5, lb=0, ub=1) # Height of tank 1
h2 = m.Var(value=0.5, lb=0, ub=1) # Height of tank 2
h3 = m.Var(value=0.5, lb=0, ub=1) # Height of tank 3
# Create parameters for input flows
u1 = m.Param(value=1.0) # Input flow to tank 1
u2 = m.Param(value=1.0) # Input flow to tank 2
# Define outflows as intermediate variables
out1 = m.Intermediate(k1 * m.sqrt(h1))
out2 = m.Intermediate(k2 * m.sqrt(h2))
out3 = m.Intermediate(k3 * m.sqrt(h3))
# Create the differential equations
m.Equation(h1.dt() == u1 / A1 - out1)
m.Equation(h2.dt() == u2 / A2 - out2)
m.Equation(h3.dt() == out1 + out2 - out3)
# Set the IMODE for dynamic simulation
m.options.IMODE = 4
m.options.SOLVER = 3
# Solve the model
m.solve(disp=True)
# Plotting the results
plt.plot(time, h1.value, label='Height of Tank 1 (h1)', color='blue')
plt.plot(time, h2.value, label='Height of Tank 2 (h2)', color='green')
plt.plot(time, h3.value, label='Height of Tank 3 (h3)', color='orange')
plt.title('Heights of Three Interconnected Tanks Over Time')
plt.xlabel('Time (s)')
plt.ylabel('Height (m)')
plt.legend()
plt.grid()
plt.show()`
{
"name": "Exception",
"message": "@error: Solution Not Found
",
"stack": "---------------------------------------------------------------------------
Exception Traceback (most recent call last)
Cell In[28], line 45
42 m.options.SOLVER = 3
44 # Solve the model
---> 45 m.solve(disp=True)
47 # Plotting the results
48 plt.plot(time, h1.value, label='Height of Tank 1 (h1)', color='blue')
File ~/.venv/lib/python3.10/site-packages/gekko/gekko.py:2140, in GEKKO.solve(self, disp, debug, GUI, **kwargs)
2138 print(\"Error:\", errs)
2139 if (debug >= 1) and record_error:
-> 2140 raise Exception(apm_error)
2142 else: #solve on APM server
2143 def send_if_exists(extension):
Exception: @error: Solution Not Found
"
}
Эквивалентное моделирование с использованием Scipysolve_ivp и casadi сработало, но не с Gekko, так что же я делаю не так?
Я пытаюсь смоделировать нелинейную систему с использованием Gekko и постройте динамику системы.
Ниже приведен мой простой код, он должен имитировать подачу двух резервуаров в третий резервуар. Высота жидкости в каждом баке — это состояние, а подача в баки 1 и 2 — управляющие входы. [code]import numpy as np import matplotlib.pyplot as plt from gekko import GEKKO
# Parameters A1 = 1.0 # Cross-sectional area of tank 1 A2 = 1.0 # Cross-sectional area of tank 2 k1 = 0.1 # Coefficient for outflow from tank 1 k2 = 0.1 # Coefficient for outflow from tank 2 k3 = 0.1 # Coefficient for outflow from tank 3 dt = 0.1 # Time step t_final = 20 # Final time
# Create a Gekko model m = GEKKO(remote=False)
# Time vector time = np.arange(0, t_final + dt, dt) m.time = time
# Create variables for heights of the tanks h1 = m.Var(value=0.5, lb=0, ub=1) # Height of tank 1 h2 = m.Var(value=0.5, lb=0, ub=1) # Height of tank 2 h3 = m.Var(value=0.5, lb=0, ub=1) # Height of tank 3
# Create parameters for input flows u1 = m.Param(value=1.0) # Input flow to tank 1 u2 = m.Param(value=1.0) # Input flow to tank 2
# Set the IMODE for dynamic simulation m.options.IMODE = 4 m.options.SOLVER = 3
# Solve the model m.solve(disp=True)
# Plotting the results plt.plot(time, h1.value, label='Height of Tank 1 (h1)', color='blue') plt.plot(time, h2.value, label='Height of Tank 2 (h2)', color='green') plt.plot(time, h3.value, label='Height of Tank 3 (h3)', color='orange') plt.title('Heights of Three Interconnected Tanks Over Time') plt.xlabel('Time (s)') plt.ylabel('Height (m)') plt.legend() plt.grid() plt.show()` [/code] При попытке запустить я получаю следующую ошибку: [code]{ "name": "Exception", "message": "@error: Solution Not Found ", "stack": "--------------------------------------------------------------------------- Exception Traceback (most recent call last) Cell In[28], line 45 42 m.options.SOLVER = 3 44 # Solve the model ---> 45 m.solve(disp=True) 47 # Plotting the results 48 plt.plot(time, h1.value, label='Height of Tank 1 (h1)', color='blue')
File ~/.venv/lib/python3.10/site-packages/gekko/gekko.py:2140, in GEKKO.solve(self, disp, debug, GUI, **kwargs) 2138 print(\"Error:\", errs) 2139 if (debug >= 1) and record_error: -> 2140 raise Exception(apm_error) 2142 else: #solve on APM server 2143 def send_if_exists(extension):
Exception: @error: Solution Not Found " } [/code] Эквивалентное моделирование с использованием Scipysolve_ivp и casadi сработало, но не с Gekko, так что же я делаю не так? Я пытаюсь смоделировать нелинейную систему с использованием Gekko и постройте динамику системы.
Ниже приведен мой простой код, он должен имитировать подачу двух резервуаров в третий резервуар. Высота жидкости в каждом баке — это состояние, а подача в баки 1 и 2 — управляющие входы.
import numpy as np
import matplotlib.pyplot as plt
from gekko...
Я пытаюсь решить проблему MINLP, чтобы генерировать сеть теплообменника (HE) с тепловыми насосами (HP), используя надстройку на сцене с 9 этапами, которая имеет около 7,7K переменные. Я нахожу это очень запутанным, потому что изменение начальных...
Все это делается в Python.
У меня есть кадр данных с данными CO2, а соответствующие столбцы - «Год» (год CE) и «CO2» (в PPM). Данные варьируются с 1959 по 2024 год, и это мои наблюдаемые данные. Я разделил данные на два раздела и помещаю данные...
Все в порядке, я понял, что пошло не так. Было 2 проблемы, и я объясню, что случилось. Оригинальный DataFrame CO2 имеет несколько временных столбцов. Когда я пересекал время, я должен был использовать колонку «время», а не «годы». В DF «время»...
У меня есть скрипт Python, который отображает сумму квадратов ошибок в зависимости от параметра Пуассона μ для данных . Я использую метод наименьших квадратов (нелинейный).
Теперь я хотел бы применить алгоритм Гаусса-Ньютона и найти окончательный...