Microsoft Solver Foundation用于半整数

时间:2010-01-17 13:06:20

标签: solver ms-solver-foundation gurobi

是否可以使用MSF api将变量指定为半整数(V = 0a <= 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中调用Gurobi插件DLL但是我找不到该api中的任何地方能够正确设置变量的类型(我认为Gurobi称之为VTYPE),所以我认为它要么没有暴露在他们的.net api中或在MSF使用的Gurobi版本中没有?或者,是否有一种从.NET调用LP_Solve的好方法?

1 个答案:

答案 0 :(得分:4)

您可以使用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中提供的域。