Я пытаюсь решить задачу нелинейной оптимизации, используя Gekko, где одна из моих промежуточных переменных вычисляется с использованием кумулятивной функции распределения нормального распределения, то есть 1-CDF (μ, σ, Rs-X), где Rs является другимПромежуточная переменная Гекко, а μ, σ и X - параметры Гекко / переменные Питона.
Я также реализовал это, используя функцию if3 Гекко, которая возвращает число 1, если Rs-X не является положительным.
n = len(df_inputs.index) # rows
surplus = m.Array(m.Var,(n,1))
R_sns = m.Array(m.Var,(n,1))
R_s = m.Array(m.Var,(n,1))
pi_s = m.Array(m.Var,(n,1))
for i in range (n):
surplus[i,0].value =...
R_sns[i,0].value = m.max3(x,surplus[i,0])
R_s[i,0].value=m.Intermediate(0.88*R_sns[i,0])
pi_s[i,0].value = m.if3(R_s[i,0]-x<=0,1,1-norm.cdf(R_s[i,0]-x,df_inputs['Mu'].iloc[i]*0.5,df_inputs['Sigma'].iloc[i]*0.707))
В последней строке кода выше я получаю сообщение «TypeError: объект типа int не имеет len ()».Эта ошибка, кажется, вызвана промежуточной переменной Rs.Я попытался заменить это с фиксированным номером, и ошибка ушла.
Traceback (последний вызов был последним): файл "solve_v2.py", строка 59, в pi_s [i, 0] .value = m.if3 (R_s [i, 0] -x <= 0,1,1-norm.cdf (R_s [i, 0] -x, df_inputs ['Mu']. Iloc [i] * 0.5, df_inputs ['Sigma']. Iloc [i] * 0.707))... Файл "C: \ Users \ Programs \ Python \ Python37 \ lib \ site-packages \ gekko \ gk_operators.py", строка 25, в <strong>len return len (self.value) Файл "C:\ Users \ Programs \ Python \ Python37 \ lib \ site-packages \ gekko \ gk_operators.py ", строка 137, в len return len (self.value) TypeError: объект типа 'int' не имеетlen ()
Как обойти эту ошибку?