Линейное программирование Гуроби на Python

новичок в Гуроби и оптимизации. Я хочу решить эту проблему с помощью простой модели лайнера, но, похоже, я допустил некоторую ошибку, которую не могу обнаружить. поэтому среди 3 функций, каждая из которых требует определенного количества усилий для реализации, я хочу выбрать те, которые имеют наибольшее значение при определенной емкости. Характеристика, ценность, усилие f1,3,2 f2,5,1 f3,1,2 мощность = 3

вот мой код:

from gurobipy import *
m = Model("C1")    
featuresname, value, effort = multidict({
    "F1":[3,2],
    "F2":[5,1],
    "F3":[1,2]
})
featureset = {}
for f in featuresname:
    featureset[f] = m.addVar(obj=value[f], name=f)
m.modelSense = GRB.MAXIMIZE
m.update()
capacity = 3
m.addConstr(quicksum(effort[f] * featureset[f] for f in featuresname) <=capacity,f)
result = m.optimize()
print(result)
if m.status == GRB.Status.OPTIMAL:
    print('Optimal objective: %g' % m.objVal)
elif m.status != GRB.Status.INFEASIBLE:
    print('Optimization was stopped with status %d' % m.status)

Я прочитал все эти примеры http://www.gurobi.com/resources/examples/example-models-overview, но не могу найти проблему .... не могли бы вы дать мне несколько советов?


person malmal    schedule 25.03.2016    source источник
comment
Код мне кажется нормальным. Что, по вашему мнению, неверно?   -  person vcp    schedule 28.03.2016


Ответы (1)


Было бы полезно взглянуть на вывод Gurobi и / или ошибки, которые вы получаете, но, просто взглянув на код, кажется, что вы забыли обновить модель после добавления ограничения.

Поэтому я бы добавил «m.update ()» непосредственно перед «result = m.optimize ()»

В остальном код выглядит нормально.

person Hsad    schedule 20.04.2016