2016-09-27 10 views
1

У меня есть следующая LOP.Теневая цена ограничений в JuMP (Julia)

using JuMP, Cbc 
productionProb = Model(solver = CbcSolver()) 

@variable(productionProb, x >= 0) 
@variable(productionProb, y >= 0) 

@objective(productionProb, Max, 7.8x + 7.1y) 

@constraint(productionProb, assemblyCondition, (1/4)x + (1/3)y <= 90) 
@constraint(productionProb, testingCondition, (1/8)x + (1/3)y <= 80) 

solve(productionProb) 

Я использую решатель cbc и используя julia для решения этой проблемы. Тем не менее, я хотел бы получить теневую цену за ограничения. В частности, я хотел бы получить теневые цены для ограничений, assemblyCondition и testingCondition.

Кто-нибудь знает код/​​функцию для этого? Я пробовал getdual(), но он не работал.

+1

Теневые цены являются двойными переменными в линейном программировании. Для MIP-решателя, такого как CBC, термин «двойной» имеет другое значение и на самом деле относится к релаксации LP проблемы. – mattmilten

+0

удалите 'solver = CbcSolver()', поэтому используется Solver default, и он должен работать – Pafnucy

ответ

3

JuMP оленья кожа поддерживает работу с двумя переменными из MIP вызовов и решатель Cbc является версия MIP решателя Clp, так что вам просто нужно использовать

productionProb = JuMP.Model(solver = ClpSolver()) 

как получить двойное

I пришлось выкопать старую книгу программирования bilevel, чтобы проверить эту номенклатуру vierd.

В экономических выражениях обычно упоминаются двойные переменные как теневые pric эс

Так что вы ищете двойственные переменные прямой задачи (теневая цена переменных) и двойственных переменных двойственной задачи (теневая цена условий, как правило, называют снижение стоимости)

a = @variable(productionProb, x >= 0) 
b = @variable(productionProb, y >= 0) 

getdual(a) 
getdual(b) 

getdual(assemblyCondition) 
getdual(testinCondition) 
+0

Привет, я упомянул в своем вопросе, что я попытался getdual(), чтобы получить двойные переменные, но это не сработало. Он вернулся в NaN. @isebarn – nana