Оптимизация GEKKO застревает (APM.exe) - PullRequest
2 голосов
/ 11 апреля 2020

Я пытаюсь запустить решатель системы дифференциальных уравнений с GEKKO в Python 3 (через блокнот Jupyter).

При плохих начальных параметрах он, конечно, сразу останавливается и говорит, что решение не найдено. Или сразу завершается без изменений параметров / функций.

Для других начальных параметров ЦП (APM.exe в TaskManager) занят в течение 30 секунд (в зависимости от размера проблемы), затем возвращается к 0% использования. Но некоторые вычисления все еще выполняются и не дают результатов. Единственный способ остановить его (кроме полного уничтожения python) - остановить APM.exe. У меня нет решения.

При этом я получаю вывод disp=True, что он выполнил определенное количество итераций (то же самое для тех же начальных параметров) и что:

No such file or directory: 'C:\\Users\\MYUSERNAME\\AppData\\Local\\Temp\\tmpfetrvwwwgk_model7\\options.json'

Код очень длинный и зависит от загрузки данных из файла. Поэтому я не могу действительно предоставить MWE.

Есть идеи?

1 Ответ

2 голосов
/ 12 апреля 2020

Вот несколько советов по устранению неполадок в вашем приложении:

  • Последовательное моделирование : если вы моделируете систему с IMODE=4, тогда я бы рекомендовал вам переключиться на m.options.IMODE=7 и оставьте m.solve(disp=True), чтобы увидеть, где происходит сбой модели.
  • Изменить Солвер: Иногда также помогает переключать солверы с m.options.SOLVER=1.
  • Краткосрочный Шаг Решение: Вы также можете попробовать использовать сначала более короткий временной интервал с m.time=[0,0.0001], чтобы увидеть, может ли ваша модель сходиться даже за короткий временной шаг.
  • Coldstart: Для задач оптимизации вы можете попробовать m.options.COLDSTART=2, чтобы помочь определить уравнения или ограничения, которые приводят к недостижимому решению. Он разбивает проблему на последовательные части, которые он может решить, и пытается найти место, которое вызывает проблемы сходимости.

Есть дополнительных учебных пособий по моделированию с Gekko и Руководство по устранению неполадок (см. # 18), которое поможет вам углубиться в приложение. Когда есть проблемы с конвергенцией, это обычно происходит из одной из следующих проблем:

  • Разделите на ноль: Если у вас есть уравнение, такое как m.Equation(x.dt()==(x+1)/y), то замените его на m.Equation(y*x.dt()==x+1).
  • Не непрерывно дифференцируемые функции: Замените m.abs(x) на m.abs2(x) или m.abs3(x), у которых нет проблем с x=0.
  • Недопустимо: Удалите все верхние или нижние границы переменных.
  • Слишком много временных точек: Попробуйте сначала меньшее количество временных точек или более короткий горизонт для проверки модели.

Дайте нам знать, если это поможет.

...