尝试使用Solver Foundation解决以下问题:
鉴于:范围:{x | x来自double}和points:{(x,y)| x,y来自double}
找出明智的线性函数 - {(a,b)| a,b来自double}其中:
示例:范围:{1,2,3},点{(1,40),(1.5,40),(2.5,70)}
我的解决方案:
使用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进行优化。
答案 0 :(得分:1)
尝试从OML字符串加载模型,强制执行单纯形求解器以检查问题是否为LP