gpt4 book ai didi

c# - Microsoft Solver Foundation 模运算符

转载 作者:太空宇宙 更新时间:2023-11-03 16:21:19 25 4
gpt4 key购买 nike

我正在尝试通过执行以下操作向我的求解器基础添加基本约束:

model.AddConstraint("c1", x % y == 0);

我收到一个编译错误,提示“运算符‘%’无法应用于‘Microsoft.SolverFoundation.Services.Decision’和‘Microsoft.SolverFoundation.Services.Decision’类型的操作数”。

这是有道理的,因为许多运算符不受支持。但是,许多不受支持的运算符(sin、cos、tan 等)可作为 Model 类的特定方法使用,如下所示:

model.AddConstraint("c1", Model.Sum(x,y) == 0);

如果我将“Sum”替换为“Mod”,则没有可用的方法。

关于如何在 Solver Foundation 中执行模运算有什么想法吗?根据文档 here , 支持。

我打算开始使用反射器来挖掘代码,但我想我也会把它贴在这里。如果找到解决方案,我会更新我的问题以包含答案。

最佳答案

真的很有趣,我想在 SO 写完全相同的问题 :-)

我发现在 http://msdn.microsoft.com/en-us/library/ff818505(v=vs.93).aspx 处为 OML 语言定义了一个 Mod 运算符。 .

AddConstraint 方法有一个重载,它接受一个表达式字符串(我猜是一个 OML 表达式?)而不是 Term。不幸的是,我不知道正确的格式,但一旦我们掌握了诀窍,我们也将能够使用所有其他运算符。

编辑

看起来并不是 API 中描述的每个 OML 表达式都有效。例如,

SolverContext sc = SolverContext.GetContext();
Model m = sc.CreateModel();

m.AddDecision(new Decision(Domain.IntegerRange(0,10), "a"));
m.AddDecision(new Decision(Domain.IntegerRange(0, 10), "b"));

m.AddConstraint(null, "a > 0");
m.AddConstraint(null, "b == Plus[a,2]");

Plus[x,y] 在这种情况下有效,求解器计算以下决策

一个:1,b: 3

但是如果我用这个替换最后一个约束

m.AddConstraint(null, "b == Mod[a,2]");

我得到一个 OmlParseException(“无法解析 OML 模型。表达式:Mod[a,2]。”)。我想我们只能靠自己了,也许我们能做的最好的事情就是坚持 user141603 的回答。

关于c# - Microsoft Solver Foundation 模运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13789343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com