我正在尝试使用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的规则。