如果FV或变量的gekko数组和gekko中间数组具有不同的维度,如何在不改变FV数量的情况下将其相乘



当然之后会有代码,但为了保持简单并表达我的问题,我只分享这一点。一切都很好,我基本上只需要数组";x〃;从大小24更改为我的另一个数组的数目(在本例中为100(。数组一开始不能更改,因为它是一个小时因子,所以我只想优化24个值,而不是创建一个新数组并优化100个不同的值。24个值需要相互重复,因为大小为100的数组或基本上为4天4小时(4*24+4=100(。当然,如果有人知道一种不改变维度的方法,我也会很高兴,但我认为这是不可能的。

f=[1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06]
x4= [0.045930370209, 0.043303258083, 0.039624317151, 0.039318197146, 0.037919352547, 0.037661007306, 0.034399522806, 0.034002995811, 0.033886332129, 0.037339258323, 0.037931042705, 0.038383778229, 0.038823242557, 0.040123255664, 0.040823891738, 0.04379281023, 0.043943821635, 0.045684085291, 0.046003064191, 0.046954569286, 0.048654216051, 0.049955602478, 0.048859969614, 0.046682038822]
T_g=[10.22025, 10.22025, 10.22025, 10.22025, 10.22025, 10.22025, 10.22025, 10.22025, 10.22025, 10.22025, 10.22025, 10.22025, 10.22025, 10.22025, 10.22025, 10.22025, 10.424666667, 10.424666667, 10.424666667, 10.424666667, 10.424666667, 10.424666667, 10.424666667, 10.424666667, 10.424666667, 10.424666667, 10.424666667, 10.424666667, 10.424666667, 10.424666667, 10.424666667, 10.424666667, 10.424666667, 10.424666667, 10.424666667, 10.424666667, 10.424666667, 10.424666667, 10.424666667, 10.424666667, 9.1760277778, 9.1760277778, 9.1760277778, 9.1760277778, 9.1760277778, 9.1760277778, 9.1760277778, 9.1760277778, 9.1760277778, 9.1760277778, 9.1760277778, 9.1760277778, 9.1760277778, 9.1760277778, 9.1760277778, 9.1760277778, 9.1760277778, 9.1760277778, 9.1760277778, 9.1760277778, 9.1760277778, 9.1760277778, 9.1760277778, 9.1760277778, 10.101444444, 10.101444444, 10.101444444, 10.101444444, 10.101444444, 10.101444444, 10.101444444, 10.101444444, 10.101444444, 10.101444444, 10.101444444, 10.101444444, 10.101444444, 10.101444444, 10.101444444, 10.101444444, 10.101444444, 10.101444444, 10.101444444, 10.101444444, 10.101444444, 10.101444444, 10.101444444, 12.065722222, 12.065722222, 12.065722222, 12.065722222, 12.065722222, 12.065722222, 12.065722222, 12.065722222, 12.065722222, 12.065722222, 12.065722222, 12.065722222]
x = m.Array(m.FV,24)
for i in range(24):
x[i].value = x4[i]
x[i].lower = 0.01
x[i].upper = 0.15
x[i].STATUS=1
e= m.Var(2.7,lb=1,ub=4)
l = m.Var(-35.1,lb=-38,ub=-30)
g = m.Var(7.1,lb=5,ub=9)
h = m.Var(0.142,lb=0.0,ub=1.5)
xop=[None]*1
ysimm=[None]*1
a=[None]*1
index = np.ones(N,int)
for i in range(N):
index[i]= int(i%24)
a[0]=m.Intermediate((e / (1 + (l / (T_g - 40)) ** g) + h))
ysimm[0]=m.Intermediate(a[0]*f)
xop[0]=m.Intermediate(x[index]*ysimm[0])

使用列表综合将aysimm转换为列表。

import numpy as np
from gekko import GEKKO
m = GEKKO()
f=[1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 
1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 
1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 
1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 
0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 
0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 
0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 
0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 
0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 1.06, 1.06, 1.06, 
1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06]
x4= [0.045930370209, 0.043303258083, 0.039624317151, 0.039318197146, 
0.037919352547, 0.037661007306, 0.034399522806, 0.034002995811, 
0.033886332129, 0.037339258323, 0.037931042705, 0.038383778229, 
0.038823242557, 0.040123255664, 0.040823891738, 0.04379281023, 
0.043943821635, 0.045684085291, 0.046003064191, 0.046954569286, 
0.048654216051, 0.049955602478, 0.048859969614, 0.046682038822]
T_g=[10.22025, 10.22025, 10.22025, 10.22025, 10.22025, 10.22025, 
10.22025, 10.22025, 10.22025, 10.22025, 10.22025, 10.22025, 
10.22025, 10.22025, 10.22025, 10.22025, 10.424666667, 
10.424666667, 10.424666667, 10.424666667, 10.424666667, 
10.424666667, 10.424666667, 10.424666667, 10.424666667, 
10.424666667, 10.424666667, 10.424666667, 10.424666667, 
10.424666667, 10.424666667, 10.424666667, 10.424666667, 
10.424666667, 10.424666667, 10.424666667, 10.424666667, 
10.424666667, 10.424666667, 10.424666667, 9.1760277778, 
9.1760277778, 9.1760277778, 9.1760277778, 9.1760277778, 
9.1760277778, 9.1760277778, 9.1760277778, 9.1760277778, 
9.1760277778, 9.1760277778, 9.1760277778, 9.1760277778, 
9.1760277778, 9.1760277778, 9.1760277778, 9.1760277778, 
9.1760277778, 9.1760277778, 9.1760277778, 9.1760277778, 
9.1760277778, 9.1760277778, 9.1760277778, 10.101444444, 
10.101444444, 10.101444444, 10.101444444, 10.101444444, 
10.101444444, 10.101444444, 10.101444444, 10.101444444, 
10.101444444, 10.101444444, 10.101444444, 10.101444444, 
10.101444444, 10.101444444, 10.101444444, 10.101444444, 
10.101444444, 10.101444444, 10.101444444, 10.101444444, 
10.101444444, 10.101444444, 12.065722222, 12.065722222, 
12.065722222, 12.065722222, 12.065722222, 12.065722222, 
12.065722222, 12.065722222, 12.065722222, 12.065722222, 
12.065722222, 12.065722222]
N = 24
x = m.Array(m.FV,N)
for i in range(N):
x[i].value = x4[i]
x[i].lower = 0.01
x[i].upper = 0.15
x[i].STATUS=1
e = m.Var(2.7,lb=1,ub=4)
l = m.Var(-35.1,lb=-38,ub=-30)
g = m.Var(7.1,lb=5,ub=9)
h = m.Var(0.142,lb=0.0,ub=1.5)
M = len(f)
index = np.ones(M,int)
for i in range(M):
index[i]= int(i%24)
a=[(e / (1 + (l / (T_g[i] - 40)) ** g) + h) for i in range(len(T_g))]
ysimm=[a[i]*f[i] for i in range(M)]
xop=[x[index[i]]*ysimm[i] for i in range(M)]
m.solve()

最新更新