我正在尝试使用Solver Foundation创建一个能够解决线性编程问题的应用程序。长话短说,我在尝试将字符串表达式转换为Microsoft.SolverFoundation.Services.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);


我尝试了铸造(如上所述),但无济于事。

我怎样才能将字符串作为可接受的术语传递给addConstraint函数?

最佳答案

您需要做的是使用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的规则。

09-25 21:17