Вызывающая переменная в оптимизации rmpk

#r #optimization #binary #ompr

Вопрос:

Я пытаюсь установить цель модели, и у меня есть матрица A с тем же количеством строк, что и количество переменных, которые являются двоичными. И в основном я хочу взять среднее значение по столбцам, используя только те строки, которые в конечном итоге будут выбраны (где x = 1). В этом примере будут выбраны 3 строки. Моя попытка (показанная ниже) сделать это включает использование sum_expr для строк A; m-я строка внесет вклад в сумму только в том случае, если x[m] = 1. Но это не работает. Есть ли способ сделать это?

 k lt;- 3 x lt;- model$add_variable("x", type="binary", i=1:n_models) model$set_objective(sum_expr(mean(k/sum_expr(A[m,]*x[m],m=1:n_models)*A[i,])*x[i],i=1:n_models)) model$add_constraint(sum_expr(x[i],i=1:n_models)==k)  

В качестве альтернативы, есть ли способ «получить» значение переменной внутри sum_expr, т. Е. Рассматривать ее как обычную переменную? Например:

 sum_expr(mean(apply(sweep(A,1,x,'*'),2,sum)*A[i,])*x[i],i=1:n_models)  

Комментарии:

1. Можете ли вы использовать dput(model) общий доступ к объекту R model в формате, который можно загрузить в среду разработки для тестирования?

2. Я предполагаю, что модель должна оставаться линейной. Поэтому такие вещи, как применить, значение и другие функции, не допускаются. Другими словами, имейте в виду, что OMPR должен генерировать Ax=b .

3. Я смог использовать функцию «среднее значение» внутри sum_expr. @ДжошГрей Хм, как мне это сделать?