使用Python的Gurobi:带变量的目标函数中的插值函数

2024-06-08 21:31:44 发布

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

我正试图使用古洛比来减少柴油发电机的燃油消耗。根据发电机负载和容量(即70%负载和20kW容量),使用采样值网格插值计算每个柴油发电机的瞬时燃油消耗量。此函数的创建如下所示:

Fuel_Map_X, Fuel_Map_Y = np.meshgrid(Fuel_Map_Load,Fuel_Map_Size)
f = interpolate.interp2d(Fuel_Map_X,Fuel_Map_Y,Fuel_Map_Data,kind='linear')
Testvalue = f(0.7,20)

因此TestValue的输出是指定发电机的瞬时燃油消耗量。现在,在我的古洛比模型中,每个发电机的负载和容量都是变量。所有发电机的燃油消耗总和是需要最小化的。当我尝试使用插值函数和变量作为输入来计算燃油消耗量时,我得到以下错误:

TypeError: Cannot cast array data from dtype('O') to dtype('float64') according to the rule 'safe'

有没有人知道是否有解决办法,以便我可以使用变量作为输入的插值函数?我尝试将燃油消耗量作为约束而不是目标,但收到了相同的错误

根据要求,以下是我如何使用Gurobi定义相关变量,并将其形成所需的目标函数(不起作用):

# Defining Gurobi Variables
Load1 = m.addVars(T,name="Load1")
Cap1 = m.addVar(vtype=GRB.INTEGER,name="Cap1") # Capacity of Cat. 1 component chosen


# Gurobi Objective Function
obj = sum(f(Load1[t],Cap1) for t in range(T))
m.setObjective(obj, GRB.MINIMIZE)

此外,您可以假设变量已成功计算,并且存在约束,但它们并不重要,因为它们对我的问题没有任何影响

提前谢谢


Tags: 函数map错误发电机插值容量dtypefuel