我开始在WPF / C#应用程序中使用Solver Foundation,它应该替换解决线性问题的Excel工作表,这样简单:
每种混合物需要多少才能尽可能接近(15%A + 70%B + 10%C + 5%D)。
非常简单,即使是Excel。所以...我在一个OML字符串中创建这个模型,并用Solver Foundation解决它,但是结果与我在Excel中得到的结果不一样,并且在每种情况下,我得到的二次误差在Solver Foundation结果中更大(在Excel表格中查看。)
有什么方法可以配置求解器以获得与Excel中相同的结果?如果您需要查看OML,请询问,我会更新问题。
答案 0 :(得分:1)
我已经尝试过你的问题了。 如下所示,MSF导致了类似的(如果不是更小的)残差。
Microsoft Solver Foundation的C#代码:
using System;
using Microsoft.SolverFoundation.Services;
namespace akMSFStackOverflow
{
class Program
{
static void Main(string[] args)
{
SolverContext context = SolverContext.GetContext();
Decision a = new Decision(Domain.RealNonnegative, "A");
Decision b = new Decision(Domain.RealNonnegative, "B");
Model model = context.CreateModel();
model.AddDecisions(a, b);
Term c = 1.0 - a - b; // a + b + c sum up to 100%
Term errA = (a * 0.20 + b * 0.35 + c * 0.10) - 0.15; // resulting percentage of A should be 15%
Term errB = (a * 0.70 + c * 0.80) - 0.70;
Term errC = (a * 0.10 + b * 0.65) - 0.10;
Term errD = (c * 0.10) - 0.05;
Term goal = errA * errA + errB * errB + errC * errC + errD * errD;
// ingredients sum up to 100% of the required volume
// constraint is not necessary as c is defined to be 1 - a - b
model.AddConstraints("total", 1.0 == a + b + c);
model.AddGoal("goal", GoalKind.Minimize, goal);
// could specify the IPM solver, as we have a quadratic goal
Solution solution = context.Solve();
Report report = solution.GetReport();
Console.WriteLine("a={0} b={1}", a, b);
Console.Write("{0}", report);
}
}
}
结果:
goal: 0,000173076935386814
A: 0,369230770226158
B: 0,0846153845073738
Excel 2010解算器想出了:
goal: 0.00017308
A: 0.36923685
B: 0.08461443
答案 1 :(得分:1)
您确定要尝试最小化相同的结果吗?
也许这两种方法使用不同的差异测量。
例如,您似乎在测量R ^ 2作为您的解决方案,那就是您的C#代码用来衡量距离完美的距离吗?