如何在数学模型的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
由于此限制,Zi
是 Ci
或 BIG_NUMBER
。
然后你可以取所有 Zi
中的最小值作为你的 objective.
查看this article关于条件语句和指示符约束的内容。
这是一个数学模型。 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
由于此限制,Zi
是 Ci
或 BIG_NUMBER
。
然后你可以取所有 Zi
中的最小值作为你的 objective.
查看this article关于条件语句和指示符约束的内容。