Определенные ограничения для оптимизации Accord.net Cobyla не работают должным образом
Мне нужно оптимизировать следующий расчет листа Excel в vb.net, используя метод Accord.net Cobyla. Я тестирую в общей сложности 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)
}
- Во-первых, я ожидаю, что все переменные x(i), введенные на листе Excel, будут иметь разные значения, но все они идентичны.
- Во-вторых, я ожидаю, что оптимизатор начнет с x(i)>=29, но он начинается с 0 и заканчивается на 29.
- Кроме того, есть ли способ ограничить x (i) целыми числами в нелинейных ограничениях?
Количество переменных/ограничений на самом деле может быть изменено, я могу управлять переменным числом x(i), но я все еще ищу способ получить переменное количество ограничений. Если что-то вроде кода ниже:
Dim f5 = {Новое нелинейное ограничение (NumberOfVariables, для i=0 to NumberOfVariables-1
Function(x) x(i) >= 29) next}
или лучше:
Dim f5 = {New NonlinearConstraint(NumberOfVariables, for i=0 to NumberOfVariables-1
Function(x) aListofdoubles.contains(x(i)))
next}