2010-01-17 7 views
3

Возможно ли использовать MSF api для указания переменной как полуцелое число (V = 0, или a <= V <= b)?Microsoft Solver Foundation для полуцелых

Ниже приведен пример в LP_Solve, который использует ключевые слова «sec» и «int», чтобы указать, что переменные являются полунепрерывными и целыми.

max: 0.5 Q1 + 0.55 Q2 ; 

Q1 >= 5; 
Q1 <= 10 ; 
Q2 >= 5; 
Q2 <= 10; 
Q1 + Q2 <= 10; 

sec Q1,Q2 ; 
int Q1,Q2 ; 

Нечто похожее в MSF было бы неплохо. Я отмечаю, что можно вызвать DLL Gurobi Plugin в MSF, но я не могу найти места в этом api, чтобы иметь возможность правильно установить тип переменной (я думаю, что Gurobi называет это VTYPE), поэтому я предполагаю, что это либо не отображаются в их .net api или недоступны в версии Gurobi, которую использует MSF? Кроме того, есть ли хороший способ вызвать LP_Solve из .NET?

+0

ОК, у меня есть «хороший» способ вызова LP_Solve из .NET, однако моим идеальным решением по-прежнему будет использование MSF, поскольку у него есть более легкий интерфейс API для работы. Кто-нибудь смог получить полуцелые числа, работающие через MSF? –

ответ

4

Вы можете сделать это с помощью Solver Foundation, но для слова «sec» нет эквивалента. Вместо этого вы можете добавить фиктивное решение 0-1 для каждой полуцелой переменной. Для исходного примера с «V», вот как вы могли бы сделать это в OML:

Model[ 
    Decisions[ 
    Integers[0, 1], 
    VPositive 
    ], 
    Decisions[ 
    Reals, 
    V 
    ], 
    Constraints[ 
    constraint -> 10 * VPositive<= V <= 20 * VPositive 
    ] 
] 

Если вы используете API Solver Foundation, то вы бы добавить, аналогичным решения, ограничения, цели с помощью объектной модели. Способ определения типа решения - это использование домена, предоставляемого в ctor.