求解器基础单工解决方案需要花费大量时间

时间:2013-05-20 05:59:04

标签: c# ms-solver-foundation

尝试使用Solver Foundation解决以下问题:

鉴于:范围:{x | x来自double}和points:{(x,y)| x,y来自double}

找出明智的线性函数 - {(a,b)| a,b来自double}其中:

  • 绘制的线性线在范围内的x'之间。
  • 涵盖所有要点。
  • 图下的最小区域。

示例:范围:{1,2,3},点{(1,40),(1.5,40),(2.5,70)}

enter image description here

我的解决方案:

使用Simplex最大限度地减少以下问题:

foreach i range add:

var ai = new Decision(Domain.RealRange(0, 100), null);
var bi = new Decision(Domain.RealRange(0, 100), null);
model.AddDecisions(a, b);

来自i范围内的点的foreach点添加约束

model.AddConstraints("c{0}".F(pointIdx), a * point.x + b >= point.y);

然后添加目标:

model.AddGoal("area", GoalKind.Minimize, goal);

获得解决方案:

var solution = context.Solve(new SimplexDirective());

该解决方案的工作原理为我提供了正确的答案,但需要花费大量时间才能完成130毫秒的简单案例。你能告诉我我做错了什么吗?我在哪里可以优化? Simplex方法适用于这种情况吗? 我们有更好的软件解决方案,然后SolverFoundation进行优化。

1 个答案:

答案 0 :(得分:1)

尝试从OML字符串加载模型,强制执行单纯形求解器以检查问题是否为LP