R программа для решения ТП моим методом
Я разработал новый метод решения TP, но я очень медленно программирую. Не могли бы вы помочь написать программу для этого метода ???
** III. АЛГОТИТМ AOCM ШАГ 1. Вычтите наименьшую стоимость из каждого элемента каждой строки транспортной таблицы и поместите ее справа вверху этого элемента.
ШАГ 2. Вычтите наименьшую стоимость из каждого элемента каждого столбца транспортной таблицы и поместите ее справа внизу этого элемента.
ШАГ 3. Создайте новую матрицу, элементы которой являются средними значениями правого верхнего и правого нижнего элементов шагов 1 и 2.
ШАГ 4. Найдите штрафы для строк и столбцов, взяв разницу между наименьшим и следующим наименьшим значением в строке и столбце.
ШАГ 5. Определите наибольший штраф и назначьте максимально возможное количество той ячейке, имеющей минимальное значение элемента в соответствующей строке или столбце. Если между самыми большими штрафами существует равенство, то ничья может быть разорвана, взяв разницу между наименьшим и ближайшим к наименьшему элементу, если ничья все еще не нарушена, повторите процедуру со следующим наименьшим и так далее, если ничья все еще не нарушена, выберите произвольно.
ШАГ 6. Повторяйте шаги с 5 по 6, пока требования обода не будут удовлетворены.
ШАГ 7. Поместите эти присвоенные значения в исходный TT в соответствующую ячейку.
ШАГ 8. Рассчитайте стоимость перевозки ТТ. Этот расчет представляет собой сумму произведения транспортных затрат на единицу продукции и выделенного количества. **
Ответы
Я не полностью понял ваши назначения после 4-го пункта, но это должно помочь вам начать (используя данные, предоставленные в вашем 1-м вопросе):
dfr <- read.table(text = "10 7 19 11
5 5 7 8
12 9 13 11
8 10 11 9")
# step 1 to 2
drow <- apply(dfr, 1, function(x){x-min(x)})
dcol <- apply(dfr, 2, function(x){x-min(x)})
# 3
dmean <- (drow + dcol)/2
dmean
#> [,1] [,2] [,3] [,4]
#> V1 4.0 1 7.5 1.5
#> V2 0.0 0 0.0 1.0
#> V3 9.5 3 5.0 3.0
#> V4 3.5 4 3.0 1.0
# 4 row & col penalties
drow_min <- apply(dmean, 1, function(x){
xord <- x[order(x)] ;
xord[2] - xord[1]})
drow_min
#> V1 V2 V3 V4
#> 0.5 0.0 0.0 2.0
dcol_min <- apply(dmean, 2, function(x){
xord <- x[order(x)] ;
xord[2] - xord[1]})
dcol_min
#> [1] 3.5 1.0 3.0 0.0
Затем вы можете использовать ifи elseструктурировать в 5; whileдля 6 и экспортируйте свои данные обратно, чтобы преуспеть с readr::write_excel_csv().
Удачи !