我试图用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)
似乎约束函数必须接受一个单参数x,并具有与约束的距离的输出。对于不等式约束,最小值将尝试将返回值保持在非负范围内,对于相等值,它将尝试将返回值设为0。但是,函数需要3个参数:x、arb和row。在
似乎您希望}是一个全局变量,所以它不需要作为参数,最小值甚至不知道这些变量是什么。那么
row1,row2,row3
和{arb
参数也是,你的意思是全局定义它吗?在相关问题 更多 >
编程相关推荐