#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)
общий доступ к объекту Rmodel
в формате, который можно загрузить в среду разработки для тестирования?2. Я предполагаю, что модель должна оставаться линейной. Поэтому такие вещи, как применить, значение и другие функции, не допускаются. Другими словами, имейте в виду, что OMPR должен генерировать
Ax=b
.3. Я смог использовать функцию «среднее значение» внутри sum_expr. @ДжошГрей Хм, как мне это сделать?