Определенные ограничения для оптимизации 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 до NumberOfVariables-1
Функция (x) x (i)> = 29) следующая}
или лучше:
Dim f5 = {New NonlinearConstraint(NumberOfVariables, for i=0 to NumberOfVariables-1
Function(x) aListofdoubles.contains(x(i)))
next}