为什么这两个约束导致我的LP模型在Gurobi中不可行?

死侍

我当前在Gurobi的模型不可行或无界,我将其细分为2个约束,这就是造成问题的原因。我有一个安排问题。g [i,j]是二进制变量,表示特定计算机上的序列。(g = 1,如果i在j之前进行。x [i,r]是二进制赋值变量(x =如果i被赋给机器r。)

不可约不一致子系统(IIS)显示了这三个约束,当我删除秒约束时,该模型正在运行,但是所有g变量都保持为0,这不是我想要的

for i in packages: 
        model.addConstr(quicksum(x[i, r] for r in machines) == 1)

for i in packages
        for j in packages:
            if i != j:
                for r in machines:
                    model.addConstr(g[i, j] + g[j, i] >= x[i, r] + x[j, r] - 1) 

    for i in packages:
            for j in packages:
                if i != j:
                    for r in machines:
                    model.addConstr(g[i, j] + g[j, i] <= (x[i, r] + x[j, r]) / 2) 

我确实没有看到这些约束的问题:两个x均为0:

g[i, j] + g[j, i] >= -1 
g[i, j] + g[j, i] <= 0 

一x = 1和一x = 0:

g[i, j] + g[j, i] >= 0 
g[i, j] + g[j, i] <= 0.5

两者x = 1:

g[i, j] + g[j, i] >= 1 
g[i, j] + g[j, i] <= 1  

有谁知道,为什么这导致模型不可行?就像我描述的一样,我在这里找不到任何违规行为。

编辑这是我的ilp文件:

Subject To
 _first_constraint: x_1_NRML-1-1 + x_1_NRML-1-2 + x_1_NRML-1-3 = 1
 _first_constraint: x_2_NRML-1-1 + x_2_NRML-1-2 + x_2_NRML-1-3 = 1
 _first_constraint: x_3_NRML-1-1 + x_3_NRML-1-2 + x_3_NRML-1-3 = 1
 _first_constraint: x_4_NRML-1-1 + x_4_NRML-1-2 + x_4_NRML-1-3 = 1
 seconds_constraint: - x_1_NRML-1-1 - x_2_NRML-1-1 + g_1_2 + g_2_1 >= -1
 seconds_constraint: - x_1_NRML-1-1 - x_3_NRML-1-1 + g_1_3 + g_3_1 >= -1
 seconds_constraint: - x_1_NRML-1-2 - x_3_NRML-1-2 + g_1_3 + g_3_1 >= -1
 seconds_constraint: - x_1_NRML-1-2 - x_4_NRML-1-2 + g_1_4 + g_4_1 >= -1
 seconds_constraint: - x_1_NRML-1-2 - x_2_NRML-1-2 + g_1_2 + g_2_1 >= -1
 seconds_constraint: - x_1_NRML-1-3 - x_2_NRML-1-3 + g_1_2 + g_2_1 >= -1
 seconds_constraint: - x_2_NRML-1-2 - x_3_NRML-1-2 + g_2_3 + g_3_2 >= -1
 seconds_constraint: - x_2_NRML-1-3 - x_3_NRML-1-3 + g_2_3 + g_3_2 >= -1
 seconds_constraint: - x_2_NRML-1-3 - x_4_NRML-1-3 + g_2_4 + g_4_2 >= -1
 seconds_constraint: - x_1_NRML-1-3 - x_3_NRML-1-3 + g_1_3 + g_3_1 >= -1
 seconds_constraint: - x_2_NRML-1-1 - x_3_NRML-1-1 + g_2_3 + g_3_2 >= -1
 seconds_constraint: - x_1_NRML-1-1 - x_4_NRML-1-1 + g_1_4 + g_4_1 >= -1
 seconds_constraint: - x_1_NRML-1-3 - x_4_NRML-1-3 + g_1_4 + g_4_1 >= -1
 seconds_constraint: - x_2_NRML-1-1 - x_4_NRML-1-1 + g_2_4 + g_4_2 >= -1
 seconds_constraint: - x_2_NRML-1-2 - x_4_NRML-1-2 + g_2_4 + g_4_2 >= -1
 seconds_constraint: - x_3_NRML-1-1 - x_4_NRML-1-1 + g_3_4 + g_4_3 >= -1
 seconds_constraint: - x_3_NRML-1-2 - x_4_NRML-1-2 + g_3_4 + g_4_3 >= -1
 seconds_constraint: - x_3_NRML-1-3 - x_4_NRML-1-3 + g_3_4 + g_4_3 >= -1
 third_constraint: - 0.5 x_1_NRML-1-3 - 0.5 x_2_NRML-1-3 + g_1_2 + g_2_1
   <= 0
 third_constraint: - 0.5 x_1_NRML-1-1 - 0.5 x_3_NRML-1-1 + g_1_3 + g_3_1
   <= 0
 third_constraint: - 0.5 x_1_NRML-1-2 - 0.5 x_3_NRML-1-2 + g_1_3 + g_3_1
   <= 0
 third_constraint: - 0.5 x_1_NRML-1-3 - 0.5 x_4_NRML-1-3 + g_1_4 + g_4_1
   <= 0
 third_constraint: - 0.5 x_1_NRML-1-1 - 0.5 x_2_NRML-1-1 + g_1_2 + g_2_1
   <= 0
 third_constraint: - 0.5 x_2_NRML-1-1 - 0.5 x_3_NRML-1-1 + g_2_3 + g_3_2
   <= 0
 third_constraint: - 0.5 x_2_NRML-1-3 - 0.5 x_3_NRML-1-3 + g_2_3 + g_3_2
   <= 0
 third_constraint: - 0.5 x_2_NRML-1-1 - 0.5 x_4_NRML-1-1 + g_2_4 + g_4_2
   <= 0
 third_constraint: - 0.5 x_2_NRML-1-2 - 0.5 x_4_NRML-1-2 + g_2_4 + g_4_2
   <= 0
 third_constraint: - 0.5 x_3_NRML-1-2 - 0.5 x_4_NRML-1-2 + g_3_4 + g_4_3
   <= 0
 third_constraint: - 0.5 x_1_NRML-1-1 - 0.5 x_4_NRML-1-1 + g_1_4 + g_4_1
   <= 0
 third_constraint: - 0.5 x_3_NRML-1-3 - 0.5 x_4_NRML-1-3 + g_3_4 + g_4_3
   <= 0
Bounds
Binaries
 x_1_NRML-1-1 x_1_NRML-1-2 x_1_NRML-1-3 x_2_NRML-1-1 x_2_NRML-1-2
 x_2_NRML-1-3 x_3_NRML-1-1 x_3_NRML-1-2 x_3_NRML-1-3 x_4_NRML-1-1
 x_4_NRML-1-2 x_4_NRML-1-3 g_1_2 g_1_3 g_1_4 g_2_1 g_2_3 g_2_4 g_3_1 g_3_2
 g_3_4 g_4_1 g_4_2 g_4_3
End

我尝试了相对少量。我有1,2,3,4套件,以及机器NRML-1-1,NRML-1-2和NRML-1-3。

这是一个mcve:

from gurobipy import *

model = Model("mcve")

M = 60000
packages = [1, 2, 3, 4]
machines = [1, 2, 3]

h_ = {}
for i in machines:
    h_[i] = 20

print(packages)
print(machines)
print(h_)


x = {}
for i in packages:
    for r in machines:
        x[i, r] = model.addVar(lb=0, obj=0, vtype=GRB.BINARY, name="x_" + str(i) + "_" + str(r))

g = {}
for i in packages:
    for j in packages:
        g[i, j] = model.addVar(lb=0, obj=0, vtype=GRB.BINARY, name="g_" + str(i) + "_" + str(j))

T__ = {}
for i in packages:
    T__[i] = model.addVar(lb=0, obj=0, vtype=GRB.CONTINUOUS)

Ttotal = {}
Ttotal = model.addVar(lb=-1e30, obj=1, vtype=GRB.CONTINUOUS)

model.modelSense = GRB.MAXIMIZE
model.update()
# Add Constraints

for i in packages:
    model.addConstr(quicksum(x[i, r] for r in machines) == 1, name=' first constraint')

for i in packages:
    for j in packages:
        if i != j:
            for r in machines:
                model.addConstr(g[i, j] + g[j, i] >= x[i, r] + x[j, r] - 1, name='second constraint')

for i in packages:
    for j in packages:
        if i != j:
            for r in machines:
                model.addConstr(g[i, j] + g[j, i] <= (x[i, r] + x[j, r]) / 2, name = 'third constraint')

for i in packages:
    for j in packages:
        if i != j:
            model.addConstr(T__[i] <= T__[j] - quicksum(x[i, r] * h_[r] for r in machines) + M * (1 - g[i, j]), name='Zusammenhang T__ und g1')
           # model.addConstr(T__[j] <= T__[i] - quicksum(x_[j, r] * h_[r].total_seconds() for r in workstation) + M * g[i, j], name='Zusammenhang T__ und g2')

for i in packages:
    model.addConstr(Ttotal <= T__[i] + quicksum(x[i, r] * h_[r] for r in machines))


model.optimize()
model.computeIIS()
model.write("model.ilp")
大卫拿

语义上,您的小模型说

  • first_constraint:将3个计算机分配4个软件包(每个软件包1个计算机)
  • 第二个约束:如果程序包i,j在同一台机器上,则g [i,j] + g [j,i]必须为1
  • 第三个约束:如果任何机器都没有包i和j,则g [i,j]和g [j,i]都必须为0。

它们一起使不可能将两个程序包放在同一台机器上,因为它们都将在同一台机器上,并且都不在任何其他机器上。

看起来对于第三个约束,您打算说g [i,j]必须为0,除非存在一台同时包含i和j包的机器。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么 gurobi 模型不可行?

来自分类Dev

为什么我得到“候选构造函数不可行”?

来自分类Dev

古罗比(Gurobi)中的“模型不可行或无界”-但是,这似乎是不正确的

来自分类Dev

Gurobi:显然可行的模型会引发不可行的模型错误?

来自分类Dev

为什么我总是收到这两个错误?

来自分类Dev

为什么我的编译器会在Java中给我这两个错误?

来自分类Dev

CBC-知道“为什么”一个程序是不可行的

来自分类Dev

为什么idris中的这两个元组相等?

来自分类Dev

cplex presolve为ON时,为什么MIP不可行?

来自分类Dev

找出Pyomo模型不可行的原因

来自分类Dev

为什么这两个功能会导致网站其他部分出现故障?

来自分类Dev

为什么观星者会为这两个模型产生不同的因变量标签?

来自分类Dev

为什么我在React JS中的代码会进入无限循环,同时满足这两个条件?

来自分类Java

为什么我的while循环不读取这两个语句?

来自分类Dev

du -sh:我不明白为什么这两个结果不同

来自分类Dev

为什么这两个for循环变量会给我不同的行为?

来自分类Dev

为什么这两个函数没有给我相同的答案?

来自分类Dev

Postgres 9.6,时区:为什么这两个查询给我不同的时间

来自分类Dev

为什么我将这两个整数相除会得到0.0?

来自分类Dev

为什么我会收到这两个错误?

来自分类Dev

为什么我不能将这两个 div 彼此对齐?

来自分类Dev

我不明白为什么这两个元素没有并排对齐?

来自分类Dev

为什么我会遇到这两个错误?[wkhtmltoimage]

来自分类Dev

为什么我不能在 Ubuntu 上加入这两个文件?

来自分类Dev

为什么我不能把这两个框架放在一起

来自分类Dev

进程间通信的静态类型参与者模型有什么不可行的吗?

来自分类Dev

为什么两个不同值的插入会导致唯一约束违规?

来自分类Dev

为什么jQuery UI的datepicker中的这两个日期在jQuery中不能正确比较?

来自分类Dev

为什么这两个等价物?

Related 相关文章

  1. 1

    为什么 gurobi 模型不可行?

  2. 2

    为什么我得到“候选构造函数不可行”?

  3. 3

    古罗比(Gurobi)中的“模型不可行或无界”-但是,这似乎是不正确的

  4. 4

    Gurobi:显然可行的模型会引发不可行的模型错误?

  5. 5

    为什么我总是收到这两个错误?

  6. 6

    为什么我的编译器会在Java中给我这两个错误?

  7. 7

    CBC-知道“为什么”一个程序是不可行的

  8. 8

    为什么idris中的这两个元组相等?

  9. 9

    cplex presolve为ON时,为什么MIP不可行?

  10. 10

    找出Pyomo模型不可行的原因

  11. 11

    为什么这两个功能会导致网站其他部分出现故障?

  12. 12

    为什么观星者会为这两个模型产生不同的因变量标签?

  13. 13

    为什么我在React JS中的代码会进入无限循环,同时满足这两个条件?

  14. 14

    为什么我的while循环不读取这两个语句?

  15. 15

    du -sh:我不明白为什么这两个结果不同

  16. 16

    为什么这两个for循环变量会给我不同的行为?

  17. 17

    为什么这两个函数没有给我相同的答案?

  18. 18

    Postgres 9.6,时区:为什么这两个查询给我不同的时间

  19. 19

    为什么我将这两个整数相除会得到0.0?

  20. 20

    为什么我会收到这两个错误?

  21. 21

    为什么我不能将这两个 div 彼此对齐?

  22. 22

    我不明白为什么这两个元素没有并排对齐?

  23. 23

    为什么我会遇到这两个错误?[wkhtmltoimage]

  24. 24

    为什么我不能在 Ubuntu 上加入这两个文件?

  25. 25

    为什么我不能把这两个框架放在一起

  26. 26

    进程间通信的静态类型参与者模型有什么不可行的吗?

  27. 27

    为什么两个不同值的插入会导致唯一约束违规?

  28. 28

    为什么jQuery UI的datepicker中的这两个日期在jQuery中不能正确比较?

  29. 29

    为什么这两个等价物?

热门标签

归档