Решение Gurobi Jupyter Notebook не отображается - PullRequest
1 голос
/ 10 июля 2020

Я набрал следующий код в своем блокноте jupyter, но он не дал мне оптимального решения. Он просто дает мне это изображение . Может ли кто-нибудь мне помочь?

import gurobipy as gp
from gurobipy import GRB

try:

    # Create a new model
    m = gp.Model("Diet")

    # Create variables
    x = m.addVar(vtype="C", name="x")
    y = m.addVar(vtype="C", name="y")
    z = m.addVar(vtype="C", name="z")
    a = m.addVar(vtype="C", name="a")

    # Set objective
    m.setObjective(50*x + 20*y + 30*z + 80*a, GRB.MAXIMIZE)

    # Add constraint:
    m.addConstr(400 * x + 200 * y + 150 * z + 500 * a >= 500, "c0")

    # Add constraint: 
    m.addConstr(3 * x + 2 * y >= 6, "c1")
    
    # Add constraint: 
    m.addConstr(2 * x + 2 * y + 4 * z + 4 * a >= 10, "c2")
    
    # Add constraint: 
    m.addConstr(2 * x + 4 * y + z + 5 * a >= 8, "c3")
    

    # Optimize model
    m.optimize()

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

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

except gp.GurobiError as e:
    print('Error code ' + str(e.errno) + ': ' + str(e))

except AttributeError:
    print('Encountered an attribute error')

1 Ответ

1 голос
/ 10 июля 2020

Решение не печатается, потому что не найдено оптимального решения. Infeasible or unbounded model означает, что либо это недопустимо, т.е. решения не существует, либо оно неограниченно, то есть может продолжать увеличивать / уменьшать значения переменных без ограничений для улучшения цели без ограничений.

Глядя на модель, это действительно так. действительно кажутся безграничными. У вас есть цель

m.setObjective(50*x + 20*y + 30*z + 80*a, GRB.MAXIMIZE)

, и нет верхнего предела ни для одной из этих переменных. Если вы измените его на

m.setObjective(50*x + 20*y + 30*z + 80*a, GRB.MINIMIZE)

, тогда вы должны получить оптимальное решение для минимизации этой цели.

...