gpt4 book ai didi

f# - 当没有可行的解决方案时,Accord.net Cobyla 求解器返回成功

转载 作者:行者123 更新时间:2023-12-01 01:05:56 33 4
gpt4 key购买 nike

我正在使用 Accord.Net 的 Cobyla 解算器来解决一个相当简单的非线性问题。在某些情况下,该问题将没有可行点。当我运行一个明显不可行的简单问题时,即使解决方案不可行,求解器也会返回“成功”。

考虑以下用 F# 编写的示例:

open System.Collection.Generics

let obj12 = QuadraticObjectiveFunction("a - a*a");
let c12 = QuadraticConstraint(obj12, Array2D.zeroCreate 1 1, [| 10.0 |], ConstraintType.LesserThanOrEqualTo, 4.0)
let c13 = QuadraticConstraint(obj12, Array2D.zeroCreate 1 1, [| 10.0 |], ConstraintType.GreaterThanOrEqualTo, 45.0)

let p1 = List<NonlinearConstraint>()
p1.Add(c12)
p1.Add(c13)
let solver1 = Cobyla(obj12, p1)
let success = solver1.Maximize()
let value = solver1.Value
let solution = solver1.Solution
let r = solver1.Status

求解器找到的解是 4.5,这显然违反了第一和第二个约束,但求解器状态为“成功”。

这是错误/功能吗?任何解决方法?

最佳答案

我是 C# COBYLA 代码的作者,该代码是 Accord.NET 版本 COBYLA 的基础。 C# 实现是对 Michael Powell 原始代码的 FORTRAN 77 的相当直接的翻译。

优化方法目前只支持三种返回状态:

  • 正常终止
  • 达到最大功能评估数
  • 舍入误差以不受控制的方式增加

没有明确的迹象表明约束被违反。 COBYLA 努力满足约束条件,但不保证一定会成功,并且可能会在未满足约束条件的情况下返回。

如果我正确地解释了您的示例(目前我的 F# 知识还有些生疏),那么您有两个相互矛盾的约束,或者?作为一种可能的解决方法,我建议您选择一个至少大致满足约束条件的变量开始猜测;这将使 COBYLA 更容易留在可行区域内。

关于f# - 当没有可行的解决方案时,Accord.net Cobyla 求解器返回成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30567946/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com