Microsoft Solver Foundation Services 声明性语法
我有以下简单问题,我想用它来试验 [MS Solver Foundation][1]:
我有 10 个槽,需要用 1 到 5 范围内的整数填充。我只想强制执行两个约束:
- slot[n] != slot[n + 1]
- 所有槽的总和应大于 20
我可以简单地创建以下决策:
Decision s1 = new Decision(Domain.IntegerRange(1, 5), "slot1");
Decision s2 = new Decision(Domain.IntegerRange(1, 5), "slot2");
Decision s3 = new Decision(Domain.IntegerRange(1, 5), "slot3");
Decision s4 = new Decision(Domain.IntegerRange(1, 5), "slot4");
Decision s5 = new Decision(Domain.IntegerRange(1, 5), "slot5");
Decision s6 = new Decision(Domain.IntegerRange(1, 5), "slot6");
Decision s7 = new Decision(Domain.IntegerRange(1, 5), "slot7");
Decision s8 = new Decision(Domain.IntegerRange(1, 5), "slot8");
Decision s9 = new Decision(Domain.IntegerRange(1, 5), "slot9");
Decision s10 = new Decision(Domain.IntegerRange(1, 5), "slot10");
然后手动设置约束,如
model.AddConstraints("neighbors not equal",
s1 != s2, s2 != s3, s3 != s4, s4 != s5,
s5 != s6, s6 != s7, s7!= s8, s8 != s9, s9 != s10
);
model.AddConstraint("sum",
s1 + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9 + s10 > 20 );
但是,我必须想象有更好的方法这样做——希望以更类似于声明性语法的方式进行。
I have the following simple problem that I'd like to use to experiment with [MS Solver Foundation][1]:
I have 10 slots that I need to fill with integers in the range 1 to 5. I want to enforce only two constraints:
- slot[n] != slot[n + 1]
- the sum of all slots should be more than 20
I could simply create the following decisions:
Decision s1 = new Decision(Domain.IntegerRange(1, 5), "slot1");
Decision s2 = new Decision(Domain.IntegerRange(1, 5), "slot2");
Decision s3 = new Decision(Domain.IntegerRange(1, 5), "slot3");
Decision s4 = new Decision(Domain.IntegerRange(1, 5), "slot4");
Decision s5 = new Decision(Domain.IntegerRange(1, 5), "slot5");
Decision s6 = new Decision(Domain.IntegerRange(1, 5), "slot6");
Decision s7 = new Decision(Domain.IntegerRange(1, 5), "slot7");
Decision s8 = new Decision(Domain.IntegerRange(1, 5), "slot8");
Decision s9 = new Decision(Domain.IntegerRange(1, 5), "slot9");
Decision s10 = new Decision(Domain.IntegerRange(1, 5), "slot10");
And then setup constraints manually as in
model.AddConstraints("neighbors not equal",
s1 != s2, s2 != s3, s3 != s4, s4 != s5,
s5 != s6, s6 != s7, s7!= s8, s8 != s9, s9 != s10
);
model.AddConstraint("sum",
s1 + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9 + s10 > 20 );
However, I have to imagine that there's a better way to do this--hopefully in something more akin to declarative syntax.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
代码。
The code.
讨论已转移到我们的官方论坛:
http://code .msdn.microsoft.com/solverfoundation/Thread/View.aspx?ThreadId=2256
冷宁
Discussions are moved to our official forum already:
http://code.msdn.microsoft.com/solverfoundation/Thread/View.aspx?ThreadId=2256
Lengning