2015-09-06 134 views
1

域这是我如何使用addVar添加变量纳入模型:随着gurobi我怎么能约束变量的一组值

my_set[j, t] = self.m.addVar(vtype=GRB.INTEGER, lb=min_value, ub=max_value, name='test') 

这可以作为一个整数落下唯一的限制值min_value和max_value之间,但实际上我想约束某些整数集中的可能值。 我该怎么做?

+0

你能是更具体的关于你考虑的整数集的种类?那么描述一个有效的方法会更容易一些?这些集合从哪里来? –

回答

0

我不知道它是否是直接可能的(这在标准ILP中是不可能的,所以可能作为gurobi的扩展),但是您可以为程序添加一些约束条件。假设要限制变量是ÿ和该组变量的是d Ŷ = {V 1 ,V ,...,V | d ÿ |},您可以添加以下X 变量和约束条件:1

  • Y = X 为我... | d ÿ |
  • 总和(X 对于i 1 ... | d ý |)= 1
  • X = 0或1
+0

感谢您的解决方案。但是我的模型中有太多的变量,几乎破解了内存。所以也许我会考虑添加一个约束来强制模型在我的设置中获得价值。 – Jasonling

+0

@Jasonling问题是,有了这样的限制,你会破坏ILP的一些规则,所以优化器将无法进行优化以更快地找到解决方案。如果只有一个具有离散值的变量(而不是很多值),则可以尝试解决每个值的ILP并保持最佳解决方案。如果你有很多这样的变量,你可能需要考虑其他方法,如CSP。 – Holt