如何在数学模型的objective函数中找到非零最小值

How to find the non-zero minimum value in the objective function of a mathematical model

这是一个数学模型。 x是0-1决策变量,c是非负系数。我现在面临的棘手问题是如何在一系列 cx 中找到非零最小值。 objective函数如下

现在,我想找到这个等式中的最小元素,这意味着由 decision virables (x).但是,当一个元素没有被选中时,这个元素的cx等于0。因为c>0,那么,objective函数等于0。这不是我想要的。

如何修改这个objective函数?添加变量,非线性是允许的。希望用gurobi解决这个问题。如何处理 gurobi 的修改功能? (线性化?Gurobi的内置函数?)

谢谢!

这个怎么样:

def find_non_zero_minimum(cs, xs):
    options = [ c*x for c,x in zip(cs,xs)]
    options.sort()
    return next(filter(None, options)) # return first (smallest element) after filtering out zeros

您可以为每个二元决策变量Xi引入一个辅助连续变量Zi

然后为所有Zi添加约束:

Zi = Xi * Ci + (1-Xi) * BIG_NUMBER

由于此限制,ZiCiBIG_NUMBER。 然后你可以取所有 Zi 中的最小值作为你的 objective.

查看this article关于条件语句和指示符约束的内容。