Существует два способа доступа к файлу. Первый способ - переключиться на remote=False
для локального решения и создания файла infasabilities.txt на вашем компьютере. Второй способ - извлечь файл из удаленного каталога. Первый способ является наиболее простым решением с точки зрения кодирования (просто измените опцию и откройте папку запуска). Второй метод наиболее удобен, потому что он делает файл доступным в вашем каталоге выполнения. Пример, который я привожу ниже, намеренно невозможен с уравнениями x+y=1
и x+y=0
.
Метод 1 - Открыть папку запуска при удаленном = False
from gekko import GEKKO
m = GEKKO(remote=False) # remote=False to produce local folder with results
x = m.Var()
y = m.Var()
m.Equations([x+y==1, x+y==0]) # no solution
m.open_folder() # open folder if remote=False to see infeasibilities.txt
m.solve(disp=True) # solve
Метод 2 - Получить файл infasabilities.txt при удаленном = True
from gekko import GEKKO
m = GEKKO(remote=True)
x = m.Var()
y = m.Var()
m.Equations([x+y==1, x+y==0]) # no solution
try:
m.solve(disp=True) # solve
except:
print('Not successful')
from gekko.apm import get_file
print(m._server)
print(m._model_name)
f = get_file(m._server,m._model_name,'infeasibilities.txt')
f = f.decode().replace('\r','')
with open('infeasibilities.txt', 'w') as fl:
fl.write(str(f))
Файл infasabilities.txt несколько труден для чтения, но он пытается определить уравнения, которые приводят к сбою решения. Вот пример из этой проблемы.
************************************************
***** POSSIBLE INFEASBILE EQUATIONS ************
************************************************
____________________________________________________________________________
EQ Number Lower Residual Upper Infeas. Name
1 0.0000E+00 -9.4140E-01 0.0000E+00 9.4140E-01 ss.Eqn(1): 0 = (v1+v2)-(1)
Variable Lower Value Upper $Value Name
1 -1.2346E+20 2.9300E-02 1.2346E+20 0.0000E+00 ss.v1
2 -1.2346E+20 2.9300E-02 1.2346E+20 0.0000E+00 ss.v2
____________________________________________________________________________
EQ Number Lower Residual Upper Infeas. Name
2 0.0000E+00 5.8600E-02 0.0000E+00 -5.8600E-02 ss.Eqn(2): 0 = (v1+v2)-(0)
Variable Lower Value Upper $Value Name
1 -1.2346E+20 2.9300E-02 1.2346E+20 0.0000E+00 ss.v1
2 -1.2346E+20 2.9300E-02 1.2346E+20 0.0000E+00 ss.v2
************************************************
****** ACTIVE OBJECTIVE EQUATIONS **************
************************************************
Number ID Node Horizon Unscaled Res Scaled Res Scaling Name
************************************************
************* ACTIVE EQUATIONS *****************
************************************************
Number ID Node Horizon Unscaled Res Scaled Res Scaling Name
1 1 1 1 -9.4140E-01 -9.4140E-01 1.0000E+00 ss.Eqn(1): 0 = (v1+v2)-(1)
2 2 1 1 5.8600E-02 5.8600E-02 1.0000E+00 ss.Eqn(2): 0 = (v1+v2)-(0)
************************************************
************ INACTIVE EQUATIONS ****************
************************************************
Number Unscaled Res Scaled Res Scaling Name
Если вы используете x = m.Var(name='x')
для именования переменных, файл станет более описательным. Оба уравнения были определены как потенциально неосуществимые.