У меня есть вектор целых чисел в качестве входных значений (начальные значения для optim par)
my.data.var <- c(10,0.25,0.25,0.25,0.25,0.25,
10,0.25,0.25,0.25,0.25,0.25,
10,0.25,0.25,0.25,0.25,0.25,
10,0.25,0.25,0.25,0.25,0.25)
Задача оптимизации - мин. проблема.
Функция ошибок вычисляет сумму квадратного корня из разницы в значениях между ДВУМЯ МАТРИЦАМИ (матрица заданных значений и вычисленная матрица)
- Вычисляемая матрица - это та, которая использует указанный выше целочисленный вектор.
Следовательно, в функции ошибок я складываю целочисленный вектор в матрицу какmy.data.var.mat <- matrix(my.data.var,nrow = 4,ncol = 6,byrow = TRUE)
Ограничение, которое я должен ввести, состоит в том, что colSum(my.data.var.mat) <=1
Оптим определяется как
sols<-optim(my.data.var,Error.func,method="L-BFGS-B",upper=c(Inf,1,1,1,1,1,Inf,1,1,1,1,1,Inf,1,1,1,1,1,Inf,1,1,1,1,1),
lower=c(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0))
Функция ошибки определяется как
Error.func <- function(my.data.var){
my.data.var.mat <- matrix(my.data.var,nrow = ncol(my.data.matrix.prod),ncol = ncol(my.data.matrix.inj)+1,byrow = TRUE)
Calc.Qjk.Value <- Qjk.Cal.func(my.data.timet0,my.data.qo,my.data.matrix.time,
my.data.matrix.inj, my.data.matrix.prod,my.data.var,my.data.var.mat)
diff.values <- my.data.matrix.prod-Calc.Qjk.Value #FIND DIFFERENCE BETWEEN CAL. MATRIX AND ORIGINAL MATRIX
Error <- ((colSums ((diff.values^2), na.rm = FALSE, dims = 1))/nrow(my.data.matrix.inj))^0.5 #sum of square root of the diff
Error_total <- sum(Error,na.rm=FALSE)/ncol(my.data.matrix.prod) # total avg error
Error_total
}
Данный набор данных: my.data.matrix.prod
, my.data.timet0, my.data.qo, my.data.matrix.time, my.data.matrix.inj
Итак, мой вопрос: как и где мне ввести ограничение суммы столбцов матрицы? Или, по-другому, можно сказать, как OPTIM будет изменять целочисленный вектор в соответствии с ограничением суммы столбцов матрицы?