2016-11-21 42 views
0

私は最適化問題をコーディングしています。モデルは実行不可能な解決策を提供しています。どの制約が実行不可能な解を与えているかを確認したい。これまでのところ、私はオンラインでチェックしましたが、問題の解決策を考え出すことができませんでした。誰でも助けてくれますか?たとえば、以下のコードでは、制約3のモデルが実行不可能なためです。ソリューションからそれをどのように判断するのですか?おかげモデルが実行不可能な解を与えるときの制約の解の取得

from gurobipy import * 

# Create a new model 
m = Model("mip1") 

# Create variables 
x1 = m.addVar(vtype=GRB.INTEGER, name="x1") 
x2 = m.addVar(vtype=GRB.INTEGER, name="x2") 


# Integrate new variables 
m.update() 

# Set objective 
m.setObjective(7*x1 + 2*x2, GRB.MAXIMIZE) 


m.addConstr(-x1 + 2 * x2 <= 4, "constraint-0") 


m.addConstr(5*x1 + x2 <= 20, "constraint-1") 
m.addConstr(-2*x1 -2*x2 <= -7, "constraint-2") 
m.addConstr(x1 <= -2, "constraint-3") 
m.addConstr(x2 <= 4, "constraint-4") 

m.optimize() 

for v in m.getVars(): 
    print('%s %g' % (v.varName, v.x)) 

print('Obj: %g' % m.objVal) 
+0

使用[この](http://www.gurobi.com/documentation/6.5/refman/cpp_grbmodel_computeiis.html)。 – sascha

+0

@sudiptaなぜx1は-2以下でなければならないのですか?単なる好奇心から – user2567806

答えて

0

exemple:

from gurobipy import * 
 

 
# Create a new model 
 
m = Model("mip1") 
 
# Create variables 
 
x1= m.addVar(lb=0,ub=62,vtype=GRB.INTEGER,name="x1") 
 
x2 = m.addVar(lb=0,ub=50, vtype=GRB.INTEGER,name="x2") 
 
m.update() 
 

 
m.addConstr(-x1 + 2*x2 <= 4, "constraint-0") 
 
m.addConstr(5*x1 + x2 <= 20, "constraint-1") 
 
m.addConstr(-2*x1 -2*x2 <= -25, "constraint-2") 
 
m.addConstr(x1 <= 2, "constraint-3") 
 
#m.addConstr(x2 <= 50, "constraint-4") 
 

 
m.update() 
 

 
# Set objective 
 
m.setObjective(7*x1 + 2*x2, GRB.MAXIMIZE) 
 
m.update() 
 

 
m.optimize() 
 

 
status = m.status 
 
if status == GRB.Status.OPTIMAL: 
 
    for v in m.getVars(): 
 
     print('%s %g' % (v.varName, v.x)) 
 
    print('Obj: %g' % m.objVal) 
 
     
 
elif status == GRB.Status.INFEASIBLE: 
 
    print('Optimization was stopped with status %d' % status) 
 
    # do IIS 
 
    m.computeIIS() 
 
    for c in m.getConstrs(): 
 
     if c.IISConstr: 
 
      print('%s' % c.constrName)

関連する問題