我试图制作一个位于优化位置的立方体矩阵。目前,我想阻止该程序将太多相同的程序放在一起。
对于12个可用选项,vars是x,y坐标和12维度的3d数组,以及用于将该值放在特定x,y槽中的二元决策变量。
我删除了优化功能的其他部分并留下了这个麻烦的部分:
m.setObjective(quicksum((-(vars[x,y,z]**3-vars[x,y,z]**2)/20)
for x0 in range(1,3)
for y0 in range(1,3)
for x in range(x0*ed)
for y in range(y0*ed)
for z in range(12)))
请注意,这通常都在一条线上,为了您的方便和我的分手。这种在gurobi quicksum中进行循环的方法有效,我不知道为什么,也不确定它是否在gurobi之外起作用。
无论如何,我得到了**或pow()的"不支持的操作数类型:' Var'和' int'"功能部分的错误(** 3和** 2)。
但是忽略了这一点,我甚至不知道代码是否正在做我想要它做的事情,那么为什么错误是正确的呢?我认为它总结的变量是相同的z并且在" ed"彼此之间的距离然后从目标函数中减去它们的值^ 3值^ 2的量。但我对此表示怀疑。有什么建议吗?
我不想做约束,因为我想允许三个或更多相同类型的可能性,如果它是最佳的,那么没有理由完全否定它。我的目标是惩罚太多特定类型的功能。
我试图阻止此处显示的群集: