[英]Microsoft Solver Foundation SAT CNF
I am trying to use Microsoft Solver Foundation SatSolver to solve a simple CNF problem through Visual Studio (C# or VB). 我正在尝试使用Microsoft Solver Foundation SatSolver通过Visual Studio(C#或VB)解决一个简单的CNF问题。 Can anyone post a simple example explaining how this can be done?
任何人都可以发布一个简单的示例来说明如何完成此操作吗?
Here is a short example: 这是一个简短的示例:
ConstraintSystem s1 = ConstraintSystem.CreateSolver();
CspTerm t1 = s1.CreateBoolean("v1");
CspTerm t2 = s1.CreateBoolean("v2");
CspTerm t3 = s1.CreateBoolean("v3");
CspTerm t4 = s1.CreateBoolean("v4");
CspTerm tOr12 = s1.Or(s1.Neg(t1), s1.Neg(t2));
CspTerm tOr13 = s1.Or(s1.Neg(t1), s1.Neg(t3));
CspTerm tOr14 = s1.Or(s1.Neg(t1), s1.Neg(t4));
CspTerm tOr23 = s1.Or(s1.Neg(t2), s1.Neg(t3));
CspTerm tOr24 = s1.Or(s1.Neg(t2), s1.Neg(t4));
CspTerm tOr34 = s1.Or(s1.Neg(t3), s1.Neg(t4));
CspTerm tOr = s1.Or(t1, t2, t3, t4);
s1.AddConstraints(tOr12);
s1.AddConstraints(tOr13);
s1.AddConstraints(tOr14);
s1.AddConstraints(tOr23);
s1.AddConstraints(tOr24);
s1.AddConstraints(tOr34);
s1.AddConstraints(tOr);
ConstraintSolverSolution solution1 = s1.Solve();
Console.WriteLine(solution1[t1]);
Console.WriteLine(solution1[t2]);
Console.WriteLine(solution1[t3]);
Console.WriteLine(solution1[t4]);
The result should have only one variable with a value of 1, and the rest should have 0, but the solution is 1,1,1,0. 结果应该只有一个值为1的变量,其余的应该为0,但求解的值为1,1,1,0。
Thanks Guy 谢了,兄弟们
您应该使用s1.Not(t1)
而不是s1.Neg(t1)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.