3

我正在尝试使用 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 函数?

4

1 回答 1

3

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

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

为此,表达式字符串当然必须符合优化建模语言的规则。

于 2012-09-26T13:56:16.363 回答