Python If-else语句返回TypeError:类型为';int';没有len()-不知道为什么

Python If-else语句返回TypeError:类型为';int';没有len()-不知道为什么,python,typeerror,gekko,Python,Typeerror,Gekko,所以,我试图解决一个优化问题。我想弄明白的是,当我运行代码时,我的函数调用“to_fp_Cx”抛出了一个错误,我不明白为什么 回溯一直指向我定义的函数。我用不同的值调用这些函数,独立地测试了这些函数,结果正如预期的那样。所以,我不确定发生了什么 --------------------------------------------------------------------------- TypeError Traceback

所以,我试图解决一个优化问题。我想弄明白的是,当我运行代码时,我的函数调用“to_fp_Cx”抛出了一个错误,我不明白为什么

回溯一直指向我定义的函数。我用不同的值调用这些函数,独立地测试了这些函数,结果正如预期的那样。所以,我不确定发生了什么

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-41-3f717a4f07e1> in <module>
     37 # intermediate variables with explicit equations
     38 
---> 39 if(fload_c3_1 < 0.1):
     40     alt_fload_c3_1 = m.Intermediate(0)
     41 else:

~\AppData\Local\Continuum\anaconda3\lib\site-packages\gekko\gk_operators.py in __len__(self)
     23         return self.name
     24     def __len__(self):
---> 25         return len(self.value)
     26     def __getitem__(self,key):
     27         return self.value[key]

~\AppData\Local\Continuum\anaconda3\lib\site-packages\gekko\gk_operators.py in __len__(self)
    142 
    143     def __len__(self):
--> 144         return len(self.value)
    145 
    146     def __getitem__(self,key):

TypeError: object of type 'int' has no len()
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在里面
37#带显式方程的中间变量
38
--->39如果(浮点数c3<0.1):
40 alt_fload_c3_1=m.中间值(0)
41其他:
~\AppData\Local\Continuum\anaconda3\lib\site packages\gekko\gk\u operators.py in\uu\u\u\u lenu\u(self)
23返回自己的名字
24 def____________(自):
--->25返回长度(自身值)
26 def_uugetItem_uu(self,key):
27返回自身值[键]
~\AppData\Local\Continuum\anaconda3\lib\site packages\gekko\gk\u operators.py in\uu\u\u\u lenu\u(self)
142
143定义长度(自):
-->144返回长度(自身值)
145
146 def_uuugetItem_uuuu(自身,密钥):
TypeError:类型为“int”的对象没有len()
顾名思义,我是一个巨蟒迷,我被迷惑了。任何帮助都将不胜感激。谢谢

import numpy as np

# import gekko, pip install if needed
from gekko import GEKKO


# Compressor Performance curves
# Fraction capacity to Fractional power conversion

# Compressor C3
def to_fp_c3(fc):

    a = 5.16102738
    b = -16.25992208
    c = 18.52731113
    d = -8.859480201
    e = 2.096698885
    f = 0.334319989

    if (fc < 0.1):
        fp = 0.0
    else:
        fp = (a*fc**5)+(b*fc**4)+(c*fc**3)+(d*fc**2)+(e*fc**1)+(f*fc**0)

    return fp

...

### Optimization Model ####

# create new model
m = GEKKO(remote = False)

# Solver option - 1: APOPT, 2: BPOPT, 3: IPOPT 0:Benchmark all available
m.options.SOLVER = 3

# declare model parameters
maxcap_c3_1 = m.Param(value = 900)
maxcap_c3_2 = m.Param(value = 900)


load = m.Param(value = 1500)


## Model variables

# load distribution
fload_c3_1 = m.Var(value=0.50,lb=0.0,ub=1.0, integer = False)
fload_c3_2 = m.Var(value=0.50,lb=0.0,ub=1.0, integer = False)

# declare variables and initial guesses
#totalpowerdraw = m.Var()

# intermediate variables with explicit equations

if(fload_c3_1 < 0.1):
    alt_fload_c3_1 = m.Intermediate(0)
else:
    alt_fload_c3_1 = m.Intermediate(fload_c3_1)


if(fload_c3_2 < 0.1):
    alt_fload_c3_2 = m.Intermediate(0)
else:
    alt_fload_c3_2 = m.Intermediate(fload_c3_2)



assignedload_c3_1 = m.Intermediate(alt_fload_c3_1 * maxcap_c3_1)
assignedload_c3_2 = m.Intermediate(alt_fload_c3_2 * maxcap_c3_2)

powerdraw_c3_1 = m.Intermediate(to_fp_c3(alt_fload_c3_1) * maxcap_c3_1)
powerdraw_c3_2 = m.Intermediate(to_fp_c3(alt_fload_c3_2) * maxcap_c3_2)

totalpowerdraw = m.Intermediate(powerdraw_c3_1 + powerdraw_c3_2)


# implicit equations
m.Equation(load == assignedload_c3_1 + assignedload_c3_2 )


# minimize weight1
m.Obj(totalpowerdraw)

# solve optimization
m.solve()  # remote=False for local solve

print ('')
print ('--- Results of the Optimization Problem ---')
print (alt_fload_c3_1.value, powerdraw_c3_1.value)
print (alt_fload_c3_1.value, powerdraw_c3_2.value)
将numpy导入为np
#导入gekko,必要时安装pip
从gekko进口gekko
#压缩机性能曲线
#分数电容到分数功率转换
#压缩机C3
def至_fp_c3(fc):
a=5.16102738
b=-16.25992208
c=18.52731113
d=-8.859480201
e=2.096698885
f=0.334319989
如果(fc<0.1):
fp=0.0
其他:
fp=(a*fc**5)+(b*fc**4)+(c*fc**3)+(d*fc**2)+(e*fc**1)+(f*fc**0)
返回fp
...
###优化模型####
#创建新模型
m=GEKKO(远程=False)
#解算器选项-1:APOPT、2:BPOPT、3:IPOPT 0:Benchmark全部可用
m、 options.SOLVER=3
#声明模型参数
maxcap_c3_1=m.Param(值=900)
maxcap_c3_2=m.Param(值=900)
荷载=m.Param(值=1500)
##模型变量
#负荷分配
fload_c3_1=m.Var(值=0.50,磅=0.0,ub=1.0,整数=False)
fload_c3_2=m.Var(值=0.50,磅=0.0,ub=1.0,整数=False)
#声明变量和初始猜测
#totalpowerdraw=m.Var()
#带显式方程的中间变量
如果(fload_c3_1<0.1):
alt_fload_c3_1=m.中间值(0)
其他:
alt_fload_c3_1=m.中级(fload_c3_1)
如果(浮力c3_2<0.1):
alt_fload_c3_2=m.中间值(0)
其他:
alt_fload_c3_2=m.中级(fload_c3_2)
分配的荷载=m.mediate(alt_fload_c3_1*最大荷载c3_1)
分配的荷载=m.Intermediate(alt_fload_c3_2*最大荷载c3_2)
功率消耗=m.中级(至fp_c3(alt_fload_c3_1)*maxcap_c3_1)
功率消耗=m.中级(至fp_c3(alt_fload_c3_2)*maxcap_c3_2)
总功率消耗=m.mediate(功率消耗c3\U 1+功率消耗c3\U 2)
#隐式方程
m、 方程(荷载==分配荷载_c3_1+分配荷载_c3_2)
#最小化权重1
m、 Obj(总功率消耗)
#求解优化
m、 solve()#remote=False表示本地解算
打印(“”)
打印('---优化问题的结果---')
打印(alt_fload_c3_1.value,powerdraw_c3_1.value)
打印(alt_fload_c3_1.value,powerdraw_c3_2.value)
您必须使用此

如果(fload_c3_1.value<0.1):

请尝试Gekko的
m.if3()
(或
m.if2()
)函数,根据Gekko变量进行条件语句切换。中有更多关于条件语句的信息

#使用gekko if3(或if2)
alt_fload_c3_1=m.if3(fload_c3_1-0.1,0,fload_c3_1)
alt_fload_c3_2=m.if3(fload_c3_2-0.1,0,fload_c3_2)
这是您的程序的一个版本,它提供了一个成功的解决方案

将numpy导入为np
从gekko进口gekko
#压缩机性能曲线
#分数电容到分数功率转换
#压缩机C3
def至_fp_c3(fc):
a=5.16102738
b=-16.25992208
c=18.52731113
d=-8.859480201
e=2.096698885
f=0.334319989
fp=m.if3(fc-0.1,0,(a*fc**5)+(b*fc**4)+(c*fc**3)\
+(d*fc**2)+(e*fc**1)+(f*fc**0))
返回fp
###优化模型####
#创建新模型
m=GEKKO(远程=False)
#声明模型参数
maxcap_c3_1=m.Param(值=900)
maxcap_c3_2=m.Param(值=900)
荷载=m.Param(值=1500)
##模型变量
#负荷分配
fload_c3_1=m.Var(值=0.50,磅=0.0,ub=1.0,整数=False)
fload_c3_2=m.Var(值=0.50,磅=0.0,ub=1.0,整数=False)
#使用gekko if3(或if2)
alt_fload_c3_1=m.if3(fload_c3_1-0.1,0,fload_c3_1)
alt_fload_c3_2=m.if3(fload_c3_2-0.1,0,fload_c3_2)
分配的荷载=m.mediate(alt_fload_c3_1*最大荷载c3_1)
分配的荷载=m.Intermediate(alt_fload_c3_2*最大荷载c3_2)
功率消耗=m.中级(至fp_c3(alt_fload_c3_1)*maxcap_c3_1)
功率消耗=m.中级(至fp_c3(alt_fload_c3_2)*maxcap_c3_2)
总功率消耗=m.mediate(功率消耗c3\U 1+功率消耗c3\U 2)
#隐式方程
m、 方程(荷载==分配荷载_c3_1+分配荷载_c3_2)
#最小化权重1
m、 Obj(总功率消耗)
#求解优化
m、 solve()#remote=False表示本地解算
打印(“”)
打印('---优化问题的结果---')
打印(alt_fload_c3_1.value,powerdraw_c3_1.value)
打印(alt_fload_c3_1.value,powerdraw_c3_2.value)
对于解决方案:

---------------------------------------------------
解算器:APOPT(v1.0)
解决时间:0.0313秒
目标:1576.791432600025
成功解决
---------------------------------------------------
---优化问题的结果---
[0.66761123885] [677.4476587]
[0.66761123885] [899.3437739]

该代码具有整数,例如
fp=0
。这是一大堆代码,我们需要仔细阅读。你能做点什么吗