Pergunta

É possível usar a API MSF para especificar uma variável como semi-inteira (V = 0, ou a <= V <= b)?

A seguir está um exemplo em LP_Solve que usa as palavras-chave "sec" e "int" para indicar que as variáveis ​​são semicontínuas e inteiras.

max: 0.5 Q1 + 0.55 Q2 ;

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

sec Q1,Q2 ;
int Q1,Q2 ;

Algo semelhante em MSF seria bom.Observo que é possível chamar uma DLL de plug-in Gurobi dentro do MSF, mas não consigo encontrar nenhum lugar nessa API para poder definir o tipo da variável corretamente (acho que Gurobi a chama de VTYPE), então presumo que seja não está exposto em sua API .net ou não está disponível na versão do Gurobi que MSF usa?Alternativamente, existe uma boa maneira de chamar LP_Solve do .NET?

Foi útil?

Solução

Você pode fazer isso com o Solver Foundation, mas não há equivalente para a palavra-chave “sec”.Em vez disso, você pode adicionar uma decisão fictícia 0-1 para cada variável semi-inteira.Para o seu exemplo original envolvendo "V", veja como você poderia fazer isso em OML:

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

Se você estiver usando a API Solver Foundation, você adicionará decisões, restrições e objetivos análogos usando o modelo de objeto.A forma de especificar o tipo de decisão é através de um Domínio, fornecido no ctor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top