在python的优化问题中缺少2个必需的位置参数

2024-06-25 22:55:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用scipy解决一个优化问题。为了在优化问题中使用一些行作为参数,我重新安排了一个巨大的数据库。然后我取每个条目的和并乘以x变量,以创建必须大于“arb”(这只是一个新的单变量)的约束。当我试图解决它时,我得到了TypeError:constraint1()缺少2个必需的位置参数:“x”和“row1”。在

path = r'mypath/*.csv'

#Extract data
all_rec = iglob(path, recursive=True)
df = (pd.read_csv(f, usecols=[4]) for f in all_rec)
list = pd.concat(df, axis=1, ignore_index=True)

#Extract arrays
t=0
row1 = list.iloc[t+5] - list.iloc[t]
row2 = list.iloc[t+10] - list.iloc[t]
row3 = list.iloc[t+15] - list.iloc[t]
row4 = list.iloc[t+20] - list.iloc[t]

#LP Problem
def objective(arb, sign=-1.0):
    return sign*arb

def constraint1(arb,x,row1):
    for i in range(len(list.columns)):
        sum_cons1 = sum(row1[i]*x[i]) - arb
    return sum_cons1

def constraint2(arb,x,row2):
    for i in range(len(list.columns)):
        sum_cons2 = sum(row2[i]*x[i]) - arb
    return sum_cons2

def constraint3(arb,x,row3):
    for i in range(len(list.columns)):
        sum_cons3 = sum(row3[i]*x[i]) - arb
    return sum_cons3

def constraint4(arb,x,row4):
    for i in range(len(list.columns)):
        sum_cons4 = sum(row4[i]*x[i]) - arb
    return sum_cons4

con1 = {'type': 'ineq', 'fun': constraint1}
con2 = {'type': 'ineq', 'fun': constraint2}
con3 = {'type': 'ineq', 'fun': constraint3}
con4 = {'type': 'ineq', 'fun': constraint4}

cons = ([con1,con2,con3,con4])
solution = minimize(objective,x0=2500.0,method='SLSQP',constraints=cons)
print(solution)

Tags: columnsinforlenreturndeftyperange
1条回答
网友
1楼 · 发布于 2024-06-25 22:55:19

似乎约束函数必须接受一个单参数x,并具有与约束的距离的输出。对于不等式约束,最小值将尝试将返回值保持在非负范围内,对于相等值,它将尝试将返回值设为0。但是,函数需要3个参数:x、arb和row。在

似乎您希望row1,row2,row3和{}是一个全局变量,所以它不需要作为参数,最小值甚至不知道这些变量是什么。那么arb参数也是,你的意思是全局定义它吗?在

相关问题 更多 >