Как исправить @Ошибка: Определение уравнения ГЕККО

#optimization #nonlinear-optimization #gekko

Вопрос:

Я работаю над проблемой минимизации затрат. Я пробовал много раз, но все равно получаю эту ошибку:

 Exception:  @error: Equation Definition
 Equation without an equality (=) or inequality (>,<)
 1((((5.84-v34) ((6)*(int_v2))))*(31.7))
 STOPPING...
 

Вот мой код:

 import pandas as pd
import numpy as np
from gekko import GEKKO
m = GEKKO() # Initialize gekko
Sadd=pd.read_csv("Sadd.csv")
X2= m.Array(m.Var,len(Sadd),value=0,lb=-1,ub=1,integer=True)
SOC2= m.Array(m.Var,len(Sadd),value=100,lb=0,ub=100)
m.Equation(SOC2[0]==100)
for i in range(1,3):
     m.Equation(SOC2[i]-SOC2[i-1] == 5*X2[i-1])
for i in range(3,11): 
        m.Equation(X2[i]==0)
        m.Equation(SOC2[i]==0)
for i in range(12,16):
    m.Equation(SOC2[i]-SOC2[i-1] == 5*X2[i-1])
m.Equation(SOC2[11]==SOC2[2]-55)
TOU=Sadd['TOU']
PV=m.Array(m.Var,len(Sadd),value=5)
for i in range(0,len(Sadd)):
    m.Equation(PV[i]>= 0)
    m.Equation(PV[i]<= Sadd['PV'].iloc[i])
    m.Equation(Sadd['Load'].iloc[i]-PV[i] 6*X2[i]>=0)
m.Obj((Sadd['Load']-PV 6*X2)*TOU) 
m.options.SOLVER=1
m.solve()
 

Как я могу это исправить? Спасибо

Вот мой файл Sadd.csv на случай, если вы захотите его проверить. Большое спасибо.

     Date/Time       C2  SC2 SOC2PV  Load    TOU
0   11/25/2020 6:00 0   0   0   0   5.82    31.7
1   11/25/2020 6:15 0   0   0   0   5.84    31.7
2   11/25/2020 6:30 0   55  0   0   7       31.7
3   11/25/2020 6:45 1   0   0   0   7.16    31.7
4   11/25/2020 7:00 1   0   0   0   8.41    31.7
5   11/25/2020 7:15 1   0   0   0   10.95   31.7
6   11/25/2020 7:30 1   0   0   1   11.79   31.7
7   11/25/2020 7:45 1   0   0   2.75    14.77   31.7
8   11/25/2020 8:00 1   0   0   4.35    12.24   31.7
9   11/25/2020 8:15 1   0   0   5.975   17.58   31.7
10  11/25/2020 8:30 1   0   0   7.65    16.79   31.7
11  11/25/2020 8:45 0   0   0   8.625   19.04   31.7
12  11/25/2020 9:00 0   0   0   8.8     20.66   31.7
13  11/25/2020 9:15 0   0   0   9.575   18.57   11
14  11/25/2020 9:30 0   0   0   10.5    19.66   11
15  11/25/2020 9:45 0   0   0   10.625  19.76   11
 

Ответ №1:

Попробуйте проиндексировать значения в цели.

 for i in range(len(Sadd)):
    m.Minimize((Sadd['Load'].iloc[i]-PV[i] 6*X2[i])*TOU[i]) 
 

Несколько целевых функций добавляются вместе, чтобы создать конечную объединенную цель.

 import pandas as pd
import numpy as np
from gekko import GEKKO
m = GEKKO(remote=False) # Initialize gekko
Sadd=pd.read_csv("Sadd.csv")
X2= m.Array(m.Var,len(Sadd),value=0,lb=-1,ub=1,integer=True)
SOC2= m.Array(m.Var,len(Sadd),value=100,lb=0,ub=100)
m.Equation(SOC2[0]==100)
for i in range(1,3):
     m.Equation(SOC2[i]-SOC2[i-1] == 5*X2[i-1])
for i in range(3,11): 
        m.Equation(X2[i]==0)
        m.Equation(SOC2[i]==0)
for i in range(12,16):
    m.Equation(SOC2[i]-SOC2[i-1] == 5*X2[i-1])
m.Equation(SOC2[11]==SOC2[2]-55)
TOU=Sadd['TOU'].values
PV=m.Array(m.Var,len(Sadd),value=5)
for i in range(0,len(Sadd)):
    m.Equation(PV[i]>= 0)
    m.Equation(PV[i]<= Sadd['PV'].iloc[i])
    m.Equation(Sadd['Load'].iloc[i]-PV[i] 6*X2[i]>=0)
for i in range(len(Sadd)):
    m.Minimize((Sadd['Load'].iloc[i]-PV[i] 6*X2[i])*TOU[i]) 
m.options.SOLVER=1
m.solve()
 

Теперь это дает успешное решение:

  ----------------------------------------------
 Steady State Optimization with APOPT Solver
 ----------------------------------------------
Iter:     1 I:  0 Tm:     -0.00 NLPi:    2 Dpth:    0 Lvs:    3 Obj:  2.93E 03 Gap:       NaN
Iter:     2 I: -1 Tm:     -0.00 NLPi:    1 Dpth:    1 Lvs:    2 Obj:  2.93E 03 Gap:       NaN
Iter:     3 I:  0 Tm:     -0.00 NLPi:    2 Dpth:    1 Lvs:    3 Obj:  3.12E 03 Gap:       NaN
Iter:     4 I: -1 Tm:     -0.00 NLPi:    2 Dpth:    1 Lvs:    2 Obj:  2.93E 03 Gap:       NaN
--Integer Solution:   3.30E 03 Lowest Leaf:   3.12E 03 Gap:   5.77E-02
Iter:     5 I:  0 Tm:     -0.00 NLPi:    2 Dpth:    2 Lvs:    1 Obj:  3.30E 03 Gap:  5.77E-02
Iter:     6 I: -1 Tm:      0.02 NLPi:    2 Dpth:    2 Lvs:    0 Obj:  3.12E 03 Gap:  5.77E-02
 No additional trial points, returning the best integer solution
 Successful solution
 
 ---------------------------------------------------
 Solver         :  APOPT (v1.0)
 Solution time  :  0.031299999999999994 sec
 Objective      :  3300.72
 Successful solution
 ---------------------------------------------------
 

Вот файл CSV, который я преобразовал из фрейма данных на случай, если кто-то еще захочет запустить сценарий и ему понадобятся данные.

 Date/Time,C2,SC2,SOC2,PV,Load,TOU
11/25/2020 6:00,0,0,0,0,5.82,31.7
11/25/2020 6:15,0,0,0,0,5.84,31.7
11/25/2020 6:30,0,55,0,0,7,31.7
11/25/2020 6:45,1,0,0,0,7.16,31.7
11/25/2020 7:00,1,0,0,0,8.41,31.7
11/25/2020 7:15,1,0,0,0,10.95,31.7
11/25/2020 7:30,1,0,0,1,11.79,31.7
11/25/2020 7:45,1,0,0,2.75,14.77,31.7
11/25/2020 8:00,1,0,0,4.35,12.24,31.7
11/25/2020 8:15,1,0,0,5.975,17.58,31.7
11/25/2020 8:30,1,0,0,7.65,16.79,31.7
11/25/2020 8:45,0,0,0,8.625,19.04,31.7
11/25/2020 9:00,0,0,0,8.8,20.66,31.7
11/25/2020 9:15,0,0,0,9.575,18.57,11
11/25/2020 9:30,0,0,0,10.5,19.66,11
11/25/2020 9:45,0,0,0,10.625,19.76,11
 

Комментарии:

1. Спасибо, Джон. Это работает и на моей стороне, и работает очень быстро. Этот ответ мне очень помогает. Спасибо