Как извлечь файл «infasabilities.txt» из gekko - PullRequest
2 голосов
/ 19 июня 2019

Я получил сообщение об ошибке невозможности моделирования GEKKO. Я хочу получить файл «infasabilities.txt» для отладки алгоритма.

Пожалуйста, дайте мне знать, где я могу найти файл.

R1 = m.Intermediate(3/r0/W*((A3*(A2+B2+B3+F)+(A2+B2)*(B3+F))*(cg0[0]-ceq1) \
                     -(A3*(B2+B3+F)+B2*(B3+F))*(cg0[0]-ceq2) \
                     -A2*(B3+F)*(cg0[0]-ceq3)))
R2 = m.Intermediate(3/r0/W*(-(B2*(A3+B3+F)+A3*(B3+F))*(cg0[0]-ceq1) \
                     +((A1+B1+B2)*(A3+B3+F)+A3*(B3+F))*(cg0[0]-ceq2) \
                     -(A1+B1)*(B3+F)*(cg0[0]-ceq3)))
R3 = m.Intermediate(3/r0/W*(-A2*(B3+F)*(cg0[0]-ceq1) \
                    -(A1+B1)*(B3+F)*(cg0[0]-ceq2) \
                    +((A1+B1)*(A2+B2+B3+F)+A2*(B2+B1+F))*(cg0[0]-ceq3)))

m.Equation(cH.dt() == nus[0].dot([R1, R2, R3]))
m.Equation(cM.dt() == nus[1].dot([R1, R2, R3]))
m.Equation(cW.dt() == nus[2].dot([R1, R2, R3]))
m.Equation(cF.dt() == nus[3].dot([R1, R2, R3]))

m.options.IMODE = 4
m.options.SOLVER = 3
m.options.nodes = 2

Создание файла: infasabilities.txt

Используйте команду apm_get (сервер, приложение, 'infasabilities.txt'), чтобы получить файл

ошибка: решение не найдено

1 Ответ

2 голосов
/ 19 июня 2019

Существует два способа доступа к файлу. Первый способ - переключиться на 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') для именования переменных, файл станет более описательным. Оба уравнения были определены как потенциально неосуществимые.

...