2010-01-17 56 views
3

是否有可能使用MSF API来指定一个变量,半整数(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中调用Gurobi插件DLL,但是我无法在该API中找到任何可以正确设置变量类型的地方(我认为Gurobi将其称为VTYPE),所以我认为它是没有暴露在.net api中,或者在无国界医生使用的Gurobi版本中没有提供?另外,有没有一种很好的方式从.NET调用LP_Solve?

+0

好吧,我已得到.NET工作调用LP_Solve的“好”的方式,但是我的理想的解决办法仍然是使用MSF,因为它有一个更简单的感觉API一起工作。有没有人设法通过MSF获得半整数? – 2010-01-18 07:11:16

回答

4

你可以用Solver基金会来做到这一点,但没有“sec”关键字的等价物。相反,您可以为每个半整数变量添加一个虚拟0-1决策。为了您的参与“V”原来的例子,这里是你如何能做到这一点的OML:

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

如果您使用的是求解基础API,那么你会添加analagous决策,约束,使用对象模型的目标。指定决策类型的方法是使用ctor中提供的域。