Не найдено решение для простого нелинейного моделирования с использованием Gekko.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Не найдено решение для простого нелинейного моделирования с использованием Gekko.

Сообщение Anonymous »

Ниже приведен мой простой код, он должен имитировать подачу двух резервуаров в третий резервуар. Высота жидкости в каждом баке — это состояние, а подача в баки 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 и постройте динамику системы.

Подробнее здесь: https://stackoverflow.com/questions/791 ... sing-gekko
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»