Задайте ограничения в матрице - OPTIM в R

У меня есть вектор целых чисел в качестве входных значений (начальные значения для 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 будет изменять целочисленный вектор в соответствии с ограничением суммы столбцов матрицы?


person Modi    schedule 20.06.2016    source источник
comment
@ZheyuanLi: спасибо. надеюсь, я получу совет!   -  person Modi    schedule 20.06.2016
comment
@ZheyuanLi: Испытал удачу с nloptr. Посмотрим!   -  person Modi    schedule 21.06.2016
comment
@ZheyuanLi: Решил. Вместо Optim я использовал решатель nloptr. Это допускает ограничения неравенства. посмотрите здесь .. stackoverflow.com/questions/37951719/   -  person Modi    schedule 22.06.2016


Ответы (1)


Я понял, что nloptr - лучший вариант, чем optim, поскольку моя проблема заключалась в «ограничениях неравенства».

Я изменил реализацию, как объясняю в этом посте. множественные ограничения неравенства - минимизация с помощью пакета R nloptr

Следовательно, закрытие этой темы.

person Modi    schedule 22.06.2016