【问题标题】:Solver foundation simplex solution takes a lot of time求解器基础单纯形求解需要大量时间
【发布时间】:2013-12-04 13:32:27
【问题描述】:

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

给定: 范围:{x | x from double} 和点:{(x,y) | x,y 来自双}

求分段线性函数 - { (a,b) | a,b from double} 其中:

  • 绘制的直线位于范围的 x 之间。
  • 涵盖所有要点。
  • 图表下的最小面积。

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

我的解决方案:

用 Simplex 最小化以下问题:

foreach i 范围添加:

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

从 i 范围内的点中获取点添加约束

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 更好的软件解决方案进行优化。

【问题讨论】:

  • 如果大部分时间都花在设置问题上,我不会太惊讶。您是否针对大量变量对问题进行了基准测试?
  • 您可以尝试使用索引决策而不是标量决策。解释在这里:nathanbrixius.wordpress.com/2011/07/18/…
  • @AndersGustafsson 我给你的时间来自。解决方案.GetReport()

标签: c# ms-solver-foundation


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2020-11-14
    • 1970-01-01
    • 1970-01-01
    • 2015-07-29
    • 1970-01-01
    • 2018-01-24
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    相关资源
    最近更新 更多