Microsoft Solver Foundation для полуцелых - PullRequest
3 голосов
/ 17 января 2010

Можно ли использовать API MSF для указания переменной в виде полуцелого числа (V = 0 или a <= V <= b)?

Ниже приведен пример в 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 было бы неплохо. Я отмечаю, что в MSF можно вызывать DLL-модуль плагина Gurobi, однако я не могу найти места в этом API для правильной установки типа переменной (я думаю, что Gurobi называет это VTYPE), поэтому я предполагаю, что это либо не представлены в их .net api или недоступны в версии Gurobi, которую использует MSF? В качестве альтернативы, есть хороший способ вызвать LP_Solve из .NET?

1 Ответ

4 голосов
/ 24 января 2010

Вы можете сделать это с помощью 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.

...