在Solver Foundation中将字符串转换为约束“Term”

时间:2012-09-26 13:43:46

标签: c# linear solver ms-solver-foundation

我正在尝试使用Solver Foundation创建一个能够解决线性规划问题的应用程序。长话短说我试图将字符串表达式转换为Microsoft.SolverFoundation.Services.Term时遇到困难。

我想要做的是将一个字符串添加为模型的约束,但首先必须将其转换为“Term”。

SolverContext context = SolverContext.GetContext();
Model model = context.CreateModel();

Decision vz = new Decision(Domain.IntegerNonnegative, "barrels_venezuela");
Decision sa = new Decision(Domain.IntegerNonnegative, "barrels_saudiarabia");
Decision se = new Decision(Domain.IntegerNonnegative, "barrels_saudiarabiad");
model.AddDecisions(vz,sa,se);

string theTerm = "(20 * sa) + (15 * vz) + (3 * se)";
Term T = (Term)theTerm;
model.AddConstraint("Name_of_constraint", T);

我试过施法(如上所述)但无济于事。

如何将字符串作为可接受的Term传递给addConstraint函数?

1 个答案:

答案 0 :(得分:3)

您需要做的是使用Decision:s的完整名称而不是变量名称,并让AddConstraint(string, string)重载进行解析您。像这样:

string theTerm = "(20 * barrels_saudiarabia) + 
                  (15 * barrels_venezuela) + (3 * barrels_saudiarabiad)";
model.AddConstraint("Name_of_constraint", theTerm);

为此,表达式字符串当然必须符合Optimization Modeling Language的规则。