Python 3.x 基于GEKKO包的Python混合整数非线性优化

Python 3.x 基于GEKKO包的Python混合整数非线性优化,python-3.x,optimization,gekko,Python 3.x,Optimization,Gekko,我正在尝试使用MINLP和GEKKO软件包开发玻璃钢(GRP)高速飞行器的结构重量优化。我需要考虑许多设计变量作为整数和其他作为真实和连续变量。为了评估约束,我遵循ISO 12215第5部分的要求。该规则规定了船舶的最低结构要求。问题是我需要使用很多条件语句,比如(if、max或min),我读到GEKKO改变了这些类型的条件语句,因为传统的条件是不连续的。因此,我使用m.if3、m.max3或m.min3。但是,当我运行程序时,这些GEKKO条件语句不起作用。许多运算(中间运算)取无穷大值,因为

我正在尝试使用MINLP和GEKKO软件包开发玻璃钢(GRP)高速飞行器的结构重量优化。我需要考虑许多设计变量作为整数和其他作为真实和连续变量。为了评估约束,我遵循ISO 12215第5部分的要求。该规则规定了船舶的最低结构要求。问题是我需要使用很多条件语句,比如(if、max或min),我读到GEKKO改变了这些类型的条件语句,因为传统的条件是不连续的。因此,我使用
m.if3
m.max3
m.min3
。但是,当我运行程序时,这些GEKKO条件语句不起作用。许多运算(中间运算)取无穷大值,因为程序被零除,永远不会收敛到解。有什么建议可以帮助您理解解算器并获得成功的解决方案

我的问题相对较短,因为它有20个设计变量,大约有15个约束,没有时间依赖性

优化(纵向框架).ipynb 从数学导入* 导入全局操作系统 作为pd进口熊猫 将numpy作为np导入 将matplotlib.pyplot作为plt导入 从matplotlib导入rcParams 从matplotlib.font_管理器导入FontProperties 导入matplotlib 将matplotlib.gridspec导入为gridspec 导入时间 从gekko进口gekko def span_space_stiff(nt、nl、lp、b): #---------------9. 面板和加强筋的尺寸------------------------ #底板 sl=m.Intermediate(1000*b/(nl+1),name='sl') st=m.Intermediate(1000*lp/(nt+1),name='st') #如果程序选择nl7: nCG=7 nCG=m.Const(nCG,name='ncgr') #7.5.-面积压力折减系数(kAR) #设计区(AD) ad_t1=m.Intermediate(0.33*(lut**2)*1e-6,name='ad_t1') ad_t2=m.中间((lut*st)*1e-6,name='ad_t2') AD_T=m.mediate(m.max3(AD_t1,AD_t2),name='AD_T') ad_l1=m.中级(0.33*(lul**2)*1e-6,name='ad_l1') ad_l2=m.Intermediate((lul*sl)*1e-6,name='ad_l2') AD_L=m.mediate(m.max3(AD_l1,AD_l2),name='AD_L') kar_t1=m.Intermediate((0.1*(mldc**0.15)/(AD_T**0.3)),name='kar_t1') kar_l1=m.Intermediate((0.1*(mldc**0.15)/(AD_L**0.3)),name='kar_l1') #尝试使用m.if3 kar_t2=m.Intermediate(m.if3(0.25-kar_t1,kar_t1,0.25),name='kar_t2') kar_l2=m.Intermediate(m.if3(0.25-kar_l1,kar_l1,0.25),name='kar_l2') kAR_T=m.Intermediate(m.if3(1-kAR_t1,1,kAR_t2),name='kAR_T') kAR_L=m.Intermediate(m.if3(1-kAR_l1,1,kAR_l2),name='kAR_L') #-----------------8. 设计压力ISO 12215第5部分------------------------- #8.1.3.-滑行模式下的摩托艇底部压力[kN/m2] pb_t=m.中间((0.1*mldc*(1+(kDC**0.5)*nCG))/(lwl*bc))*kAR_t ,name='pb_t') pb_l=m.中间((0.1*mldc*(1+(kDC**0.5)*nCG))/(lwl*bc))*kAR_l ,name='pb_l') #------------11.5估算设计力和设计弯矩-------------- fd_t=m.Intermediate(5*pb_t*st*lut*1E-4,name='fd_t')#[N] fd_l=m.Intermediate(5*pb_l*sl*lul*1E-4,name='fd_l')#[N] md_t=m.Intermediate(83.33*pb_t*st*(lut**2)*1E-9,name='md_t')#[N m] md_l=m.mediate(83.33*pb_l*sl*(lul**2)*1E-9,name='md_l')#[N m] 返回pb_t,pb_l,fd_t,fd_l,md_t,md_l def板力(lwl、bc、v、beta、mldc、lut、st、lul、sl、bl、bt): #---------------------9.面板和加劲肋的尺寸-------------------- #9.1.-底板面板的尺寸 #刨床大尺寸[mm] l1=m.max3(sl bl,st bt) #刨床的短尺寸[mm] b1=m.min3(sl bl,st bt) # ---------7. 根据ISO 12215第5部分的压力调整系数----------- #7.2.-设计类别系数(kDC)(设计类别B的固定值) kDC=m.Const(0.8,name='kdcp') #7.3.-“g”单位的动荷载系数(nCG) nCG=0.32*((lwl/(10*bc))+0.084)*(50β)*((v*bc)**2)/mldc) 如果nCG>=3: nCG=0.5*v/(mldc**0.17) 如果nCG>7: nCG=7 nCG=m.Const(nCG,name='ncgp') #7.5.-面积压力折减系数(kAR) #设计区(AD) ad1=m.中级((l1*b1)*1E-6,名称='ad1') ad2=m.中级(2.5*(b1**2)*1E-6,名称='ad2') AD=m.mediate(m.min3(ad1,ad2),name='AD') #尝试使用m.if3 kar1=m.Intermediate(0.1*(mldc**0.15)/(AD**0.3),name='kar1') kar2=m.Intermediate(m.if3(0.25-kar1,kar1,0.25),name='kar2') kAR=m.Intermediate(m.if3(1-kar1,1,kar2),name='kAR') #-----------------8. 设计压力ISO 12215第5部分------------------------- #8.1.3.-滑行模式下的摩托艇底部压力[kN/m2] pbp=m.中间((0.1*mldc*(1+(kDC**0.5)*nCG))/(lwl*bc))*kAR ,name='pbp') #---------10.1.5估算面板上的力和弯矩------------------ #抗剪强度纵横比系数(kSHC)(表12-ISO 12215第5部分) kshc1=m.Intermediate(0.035+0.394*(l1/b1)-0.09*(l1/b1)**2),name='kshc1') kSHC=m.Intermediate(m.if3(2-(l1/b1),0.5,kshc1),name='kSHC') #面板Aspec比率系数(k2)(表5-ISO 12215第5部分) a1=m.Intermediate(0.271*((l1/b1)**2)+0.910*(l1/b1)-0.554,name='a1') a2=m.Intermediate(((l1/b1)**2)-0.313*(l1/b1)+1.351,name='a2') k2=m.Intermediate(m.if3(2-(l1/b1),0.5,a1/a2),name='k2') #“b1”中间的剪力[N/mm] fdp=m.Intermediate(1*kSHC*pbp*b1*(1E-3),名称='fdp') #“b1”方向的弯矩[N mm/mm] mdp=m.Intermediate(83.33*2*k2*pbp*(b1**2)*(1E-6),名称='mdp') 返回pbp、fdp、mdp、l1、b1 def底部优化(lp、b、nt、nl、hL、bL、hT、bT、l1、b1、, st、lut、sl、lul、pbt、pbl、fdt、fdl、mdt、mdl、mdp): #----------刺激物
m.open_folder()
m.options.DIAGLEVEL=4
output = m.solve(disp=True) # Solver
     172                 +Inf kar1
     173           0.00000000 kar2
     174           0.00000000 kar
     175           0.00000000 pbp
     176                  NaN kshc1
     177           0.00000000 kshc
     178                  NaN a1
     179                  NaN a2
     180           0.00000000 k2
     181           0.00000000 fdp
     182           0.00000000 mdp
.
.
.
     195        1311.11111111 wp
     196   917050883.35535383 eal
     197 57906932528.31179047 eazl
     198          63.14473229 nal
     199         151.38044132 zcri
     200 ******************** eaz2l
     201 ******************** ebh3l
     202 ******************** einal
     203 20726655556.62884521 qcl
     204 20720536220.47989273 qwl
     205           0.00000000 eiminl
     206        3025.53188955 sml
     207                 +Inf c1l
     208          22.46255737 awl
     209                 +Inf c2l
     210         141.42371638 acl
     211                 +Inf c3l
     212                 +Inf eil
     213          18.89350536 c45
       6      116          -1.32000000 v24-(((((1-int_v23))*(ad_l1))+((int_v23)*(ad_l2))))
       7      117                 +Inf 0-((((1-int_v25))*((0.25-kar_t1))))-slk_7
       8      118                 -Inf ((int_v25)*((0.25-kar_t1)))-(0)-slk_8
      13      123                 +Inf 0-((((1-int_v29))*((1-kar_t1))))-slk_13
      14      124                 -Inf ((int_v29)*((1-kar_t1)))-(0)-slk_14
      15      125          -0.99000000 v30-(((((1-int_v29))*(1))+((int_v29)*(kar_t2))))
      16      126                 +Inf 0-((((1-int_v31))*((1-kar_l1))))-slk_16
      17      127                 -Inf ((int_v31)*((1-kar_l1)))-(0)-slk_17
      18      128          -0.99000000 v32-(((((1-int_v31))*(1))+((int_v31)*(kar_l2))))
      19      129       -1310.00000000 0-((((1-int_v33))*(((st-bt)-(sl-bl)))))-slk_19
      26      136           0.00000000 0-(((int_v37)*((ad2-ad1))))-slk_26
      27      137           0.00000000 v38-(((((1-int_v37))*(ad1))+((int_v37)*(ad2))))
      28      138                 +Inf 0-((((1-int_v39))*((0.25-kar1))))-slk_28
      29      139                 -Inf ((int_v39)*((0.25-kar1)))-(0)-slk_29
      30      140                 -Inf v40-(((((1-int_v39))*(kar1))+((int_v39)*(0.25))))
      33      143          -0.99000000 v42-(((((1-int_v41))*(1))+((int_v41)*(kar2))))
      34      144                  NaN 0-((((1-int_v43))*((2-((v34)/(v36))))))-slk_34
      35      145                  NaN ((int_v43)*((2-((v34)/(v36)))))-(0)-slk_35
      40      150          13.00000000 c1p-(0)
      41      151          -0.99414611 (c2p-1)-(0)-slk_41
      42      152        6464.36333333 (pw+sw)