【发布时间】:2019-06-25 14:53:12
【问题描述】:
为 Accord.net Cobyla 的优化定义的约束没有按预期工作
我需要使用 Accord.net Cobyla 的方法在 vb.net 中优化以下 excel 表计算。我正在测试总共 4 个变量:
Dim f1 As Func(Of Double(), Double) = Function(x)
Dim var1 As New ArrayList
Dim objsheets As Excel.Sheets = Nothing
Dim app2 As Excel.Application = TryCast(Marshal.GetActiveObject("Excel.Application"), Excel.Application)
'Access excel sheet
file = "C:\kws_work\Blade.xlsx"
books = app2.Workbooks
objsheet = books(1).Sheets(2)
'fill target cells-x0[ind] with variables x[ind]
For ind = 0 To x.Count - 1
objsheet.Range(x0(ind)).Value = CInt(x(ind))
Next
Dim res As Double
res = objsheet.Range("_res1").Value
'Return the calculated value to optimizer
Return (res)
End Function
约束定义如下:
Dim f5 = {New NonlinearConstraint(4, Function(x) x(0) >= 29),
New NonlinearConstraint(4, Function(x) x(1) >= 29),
New NonlinearConstraint(4, Function(x) x(2) >= 29),
New NonlinearConstraint(4, Function(x) x(3) >= 29)
}
- 首先,我希望在 Excel 工作表中输入的所有变量 x(i) 具有不同的值,但它们都是相同的。
- 其次,我希望优化器从 x(i)>=29 开始,但它从 0 开始,在 29 结束。
- 此外,有没有办法将 x(i) 限制为非线性约束中的整数
-
变量/约束的数量实际上会发生变化,我可以管理x(i)的变量数量,但我仍在寻找一种方法来获得变量数量的约束。如果像下面的代码:
Dim f5 = {New NonlinearConstraint(NumberOfVariables, for i=0 to NumberOfVariables-1
函数(x) x(i) >= 29) 下一个}
或更好:
Dim f5 = {New NonlinearConstraint(NumberOfVariables, for i=0 to NumberOfVariables-1
Function(x) aListofdoubles.contains(x(i)))
next}
【问题讨论】:
-
我使用“System.Diagnostics.Debug.WriteLine”来检查每个 x(i) 的值:它们不相同,但可以关闭!有没有办法改变这种情况?
标签: vb.net optimization constraints accord.net