Microsoft Solver Foundation для полуцелых чисел

Можно ли использовать 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?


person freddy smith    schedule 17.01.2010    source источник
comment
Хорошо, у меня есть хороший способ вызова LP_Solve из .NET, однако моим идеальным решением все равно было бы использование MSF, поскольку у него более легкий API для работы. Кому-нибудь удалось заставить работать полуцелые числа через MSF?   -  person freddy smith    schedule 18.01.2010


Ответы (1)


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

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

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

person Nathan Brixius    schedule 24.01.2010