lpSolve возвращает матрицу результатов со всеми нулями - что я делаю не так? - PullRequest
0 голосов
/ 27 января 2019

Я - пользователь Stata, который работает в R только для запуска модели линейной оптимизации с помощью lpSolve.Моя ситуация такова, что у меня 3701 пара рыночных месяцев, которые я пытаюсь минимизировать для целевой функции с учетом 33 ограничений.Мои переменные: рынок, месяц, год, питательные вещества (ограничения), а затем 51 переменная для всех элементов и количество на ограничение на доллар.Первая строка - это мое объективное ограничение (цена), а затем каждый рыночный месяц имеет еще 33 строки со всеми ограничениями.Так что мне нужно, чтобы решить минимизацию в каждом рыночном месяце, поэтому он написан с циклом в течение всех 3701 рыночных месяцев.

Но я получаю матрицу результатов со всеми нулями - что я делаю не так?Я хотел бы загрузить фотографию примера данных, но я не могу понять, как это сделать, поэтому вот переменные в порядке их столбцов и описание структуры данных: рыночное (num) год, месяц, месяц (num), ограничение (num)textname) F1-F51 (элементы) rel (=,> = или <=) и rhs (правый размер, значение ограничения) </p>

  • 34 строки на комбинацию рыночный год-месяц,22 уникальных значения Ограничения (num), для повторяющихся ограничений это отражает необходимость быть между двумя значениями.
  • Ограничение № 1 - это цена, которая является стоимостью за кг продукта (а последующие строки - количество каждого питательного вещества - ограничения - на кг продукта)
  • Ограничение 1: rel is = and rhs = 0

Я работал с ограничениями, предназначенными для одного человека, но теперь я пытаюсь запустить его для более крупных ограничений, которые относятся ко всему домохозяйству (количество ограничений одинаково, значения просто намного больше).

# Clear
rm(list=ls())
# Import dataset
mydata = read.csv("mydata.csv")
# Create a result matrix
result <- matrix(0,3701,51)

# Run linear programming by a loop
for (i in 1:3701){
  temp <- mydata[(34*i-33):(34*i),6:58]
  f.obj <- t(temp[1,1:51])
  f.con <- temp[2:34,1:51]
  f.dir <- t(temp[2:34,52])
  f.rhs <- t(temp[2:34,53]) 
  temp_out <- lp ("min", f.obj, f.con, f.dir, f.rhs)$solution
  result[i,] <- temp_out
}

Он должен возвращать матрицу результатов, которая имеет по крайней мере одну (но, вероятно, более одного) ненулевую ячейку на строку -который представляет собой количество товаров, составляющих корзину товаров с наименьшей стоимостью, которая соответствует всем ограничениям по самой низкой цене.Но вместо этого я получаю все нули.

...