Я пытаюсь провести оптимизацию в R, которая даст продукты, которые будут производиться на 3 разных машинах в течение 20 дней. 15 товаров. Цель состоит в том, чтобы максимизировать общий объем производства.
Данные имеют требуемое производство, и общее производство рассчитывается с использованием ПК, которые будут производиться в день, умноженными на вес каждого ПК и общее производство всех продуктов на разных машинах за все дни, т.е. за 20 дней, если продукт 1 производится 7 раз, принимая во внимание все машины, тогда его общее производство будет (745 * 0,1 * 7), где 740 - количество ПК, которое будет произведено, а 0,1 - вес в МТ.
Это будет сделано для всех 15 продуктов, и, таким образом, мы получим целевую функцию как сумму производства всех 15 продуктов.
Теперь существуют определенные ограничения, такие как Машина 1 может производить продукцию с 1 по 4, Машина 2 может производить с 5 до 12, 3 может производить с 7 до 15. Каждый день в каждой машине должна увеличиваться последовательность продуктов, а также Общее производство каждого продукта должно быть больше, чем требуется. Также машина 3 - машина 2 должна быть больше 0.
Теперь, когда я пытаюсь использовать любой алгоритм оптимизации в R, он принимает начальные значения как вектор, тогда как у меня есть матрица, а также когда я пытаюсь определить ограничения:
const_m1 <- function(x){
f <- NULL
f[1] <- x[,1]
f[2] <- -(x[,1]-5)
f[3] <- x[,2]-6
f[4] <- -(x[,2]-13)
f[5] <- (x[,3]-8)
f
}
Тогда, поскольку это вектор, сохраняется только одно значение, но на самом деле каждое ограничение будет иметь 20 значений, поскольку у нас есть 20 дней (код просто дает некоторые из ограничений). Я пытался использовать auglag
и таким образом определил такие ограничения. Я не хочу повторять ограничение 20 раз для каждой машины.
Как я должен идти об этом.
Также я попытался написать ограничение как
const_m11 <- function(x){
f <- NULL
f <- rbind(f,-(x[,1]-1))
f <- rbind(f,x[,1]-4)
f <- rbind(f,-(x[,2]-5))
f <- rbind(f,x[,2]-12)
f <- rbind(f,-(x[,3]-7))
return(f)
}
Опять же, это лишь часть ограничений, и не все из них упоминаются здесь. Я пытался использовать функцию solnl()
из пакета NlcOptim
, но при этом выдается ошибка, что $ operator недопустим для атомарных векторов, которые я не могу понять. Пожалуйста, предложите, как мне определить ограничения, а также какую функцию подойдет для решения моей проблемы.