首页 > 解决方案 > 在 Accord.net 中设置约束(这应该很容易?)

问题描述

我在 VB 项目中有一个Cobyla对象(可以很容易地是 C#),用于解决 7 个变量的问题。每个变量都有自己的约束。我正在设置这样的约束,但没有遵循约束。

Dim mesaConstraints As NonlinearConstraint() =
    {' Make sure all variables follow their constraints
    New NonlinearConstraint(7, Function(mesaVar) mesaVar(0) >= min0),
    New NonlinearConstraint(7, Function(mesaVar) mesaVar(1) >= min1),
    New NonlinearConstraint(7, Function(mesaVar) mesaVar(2) >= min2),
    New NonlinearConstraint(7, Function(mesaVar) mesaVar(3) >= min3),
    New NonlinearConstraint(7, Function(mesaVar) mesaVar(4) >= min4),
    New NonlinearConstraint(7, Function(mesaVar) mesaVar(5) >= min5),
    New NonlinearConstraint(7, Function(mesaVar) mesaVar(6) >= min6),
    New NonlinearConstraint(7, Function(mesaVar) mesaVar(0) <= max0),
    New NonlinearConstraint(7, Function(mesaVar) mesaVar(1) <= max1),
    New NonlinearConstraint(7, Function(mesaVar) mesaVar(2) <= max2),
    New NonlinearConstraint(7, Function(mesaVar) mesaVar(3) <= max3),
    New NonlinearConstraint(7, Function(mesaVar) mesaVar(4) <= max4),
    New NonlinearConstraint(7, Function(mesaVar) mesaVar(5) <= max5),
    New NonlinearConstraint(7, Function(mesaVar) mesaVar(6) <= max6)
}

有没有人能够建议为什么不遵循这些限制?我认为这很容易。

标签: vb.netaccord.net

解决方案


确保检查 cobyla 退出代码(状态属性 [2])是 CobylaStatus.Success 以确保解决方案有效。根据 Anders Gustafsson 的说法,不能保证满足约束条件 [1]。

[1] Accord.net Cobyla 求解器在没有可行解时返回成功

[2] http://accord-framework.net/docs/html/T_Accord_Math_Optimization_Cobyla.htm


推荐阅读