GEKKO:获取中间体列表的最大值
GEKKO: Get maximum value of list of Intermediates
我正在解决一个问题,我已经定义了几个中间体列表。我的限制之一取决于获得这些中间体列表之一的最大值和最小值。据我所知,内置的 max2 和 max3 函数不适合这项任务,因为列表不是连续可微的。我也尝试过使用 numpy 的 max 函数,但这会引发错误。我需要在每次求解器迭代时更新最大值和最小值,因为它们是重要的约束。我在这里缺少明显的解决方案吗?
gekko built-in max2
和 max3
函数适用于从列表中查找最大值或最小值的任务,如果两个变量与列表的每个循环进行比较。这些函数只允许比较两个值,因为每次比较都会向问题添加额外的方程式和变量。 mx
是列表的最大值,mn
是列表的最小值。每次通过列表时,mx
和 mn
值都会与列表中的下一个值与附加方程式和变量进行比较。考虑一个简单的问题,其中包含列表 [0,1,2,3,4,5,6]
和采用该列表的平方的中间计算。 max3
和 min3
函数在循环中用于比较 t
列表中的下一个值。
from gekko import GEKKO
m=GEKKO(remote=False)
n=[0,1,2,3,4,5,6]
t=[m.Intermediate(i**2) for i in n]
mx = t[0] # max
mn = t[0] # min
for i in range(1,len(n)):
mx = m.max3(mx,t[i])
mn = m.min3(mn,t[i])
# initialize with IPOPT
#m.options.SOLVER = 3
#m.solve(disp=False)
# solve with APOPT
m.options.SOLVER = 1
m.solve(disp=False)
print(mx.value[0])
print(mn.value[0])
这个简单问题的解是 36
最大值和 0
最小值。中间列表 t
可以替换为包含中间、常量、参数或变量的任何类型的列表。对于此类问题,有时使用求解器 IPOPT
(非线性规划求解器)进行初始化并使用 APOPT
求解器(混合整数非线性规划)完成以获得整数解有时会有所帮助。使用 m.options.SOLVER=3
和 m.solve(disp=False)
取消注释预求解以使用此初始化。
我正在解决一个问题,我已经定义了几个中间体列表。我的限制之一取决于获得这些中间体列表之一的最大值和最小值。据我所知,内置的 max2 和 max3 函数不适合这项任务,因为列表不是连续可微的。我也尝试过使用 numpy 的 max 函数,但这会引发错误。我需要在每次求解器迭代时更新最大值和最小值,因为它们是重要的约束。我在这里缺少明显的解决方案吗?
gekko built-in max2
和 max3
函数适用于从列表中查找最大值或最小值的任务,如果两个变量与列表的每个循环进行比较。这些函数只允许比较两个值,因为每次比较都会向问题添加额外的方程式和变量。 mx
是列表的最大值,mn
是列表的最小值。每次通过列表时,mx
和 mn
值都会与列表中的下一个值与附加方程式和变量进行比较。考虑一个简单的问题,其中包含列表 [0,1,2,3,4,5,6]
和采用该列表的平方的中间计算。 max3
和 min3
函数在循环中用于比较 t
列表中的下一个值。
from gekko import GEKKO
m=GEKKO(remote=False)
n=[0,1,2,3,4,5,6]
t=[m.Intermediate(i**2) for i in n]
mx = t[0] # max
mn = t[0] # min
for i in range(1,len(n)):
mx = m.max3(mx,t[i])
mn = m.min3(mn,t[i])
# initialize with IPOPT
#m.options.SOLVER = 3
#m.solve(disp=False)
# solve with APOPT
m.options.SOLVER = 1
m.solve(disp=False)
print(mx.value[0])
print(mn.value[0])
这个简单问题的解是 36
最大值和 0
最小值。中间列表 t
可以替换为包含中间、常量、参数或变量的任何类型的列表。对于此类问题,有时使用求解器 IPOPT
(非线性规划求解器)进行初始化并使用 APOPT
求解器(混合整数非线性规划)完成以获得整数解有时会有所帮助。使用 m.options.SOLVER=3
和 m.solve(disp=False)
取消注释预求解以使用此初始化。