You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GEKKO自定义函数引入pandas数据时报无等式/不等式错误求助

问题根因
  • 你在约束函数中直接使用GEKKO符号变量执行pandas匹配查询,pandas无法识别GEKKO的符号变量类型,df.loc[df['integer'] == xi] 不会返回你预期的目录数值,而是无效对象,最终约束函数返回的不是GEKKO可识别的等式/不等式表达式,触发报错。
  • 你定义的x是SOS1类型的符号变量,在模型编译阶段不会代入实际数值,所有涉及变量的逻辑必须使用GEKKO内置的符号运算实现,不能使用普通Python条件判断、pandas查询这类仅支持数值运算的逻辑。
  • 原有代码中初始值赋值写法错误:x[i] = ig[i] 会直接把GEKKO变量对象覆盖为普通数值,导致后续模型调用出错。
修复方案

将pandas查表逻辑替换为GEKKO内置的if3符号条件运算实现映射,提前从DataFrame中提取映射常量,修复初始值赋值写法,修改后可运行代码如下:

# libraries in use
from gekko import GEKKO
import pandas as pd

# building GEKKO model
m = GEKKO() 

integer=[1,2]
x=[m.sos1(integer) for i in range(len(integer))]  

# example dataframe
data=[[1,5],[2,10]]
df = pd.DataFrame(data, columns = ['integer', 'catalogue'])
# 提前提取映射常量
val_1 = df.loc[df['integer'] == 1, 'catalogue'].item()
val_2 = df.loc[df['integer'] == 2, 'catalogue'].item()

def obj(x,a):
    return a*x[0]**2-4*x[1]*x[0]**2+x[1]**2+x[0]**2-x[0]+1

def con(x,a):
    r = [] 
    for xi in x: 
        # 用GEKKO内置if3实现符号条件映射:
相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 22:24:03