R программа для решения ТП моим методом

Oct 16 2020

Я разработал новый метод решения TP, но я очень медленно программирую. Не могли бы вы помочь написать программу для этого метода ???

** III. АЛГОТИТМ AOCM ШАГ 1. Вычтите наименьшую стоимость из каждого элемента каждой строки транспортной таблицы и поместите ее справа вверху этого элемента.

ШАГ 2. Вычтите наименьшую стоимость из каждого элемента каждого столбца транспортной таблицы и поместите ее справа внизу этого элемента.

ШАГ 3. Создайте новую матрицу, элементы которой являются средними значениями правого верхнего и правого нижнего элементов шагов 1 и 2.

ШАГ 4. Найдите штрафы для строк и столбцов, взяв разницу между наименьшим и следующим наименьшим значением в строке и столбце.

ШАГ 5. Определите наибольший штраф и назначьте максимально возможное количество той ячейке, имеющей минимальное значение элемента в соответствующей строке или столбце. Если между самыми большими штрафами существует равенство, то ничья может быть разорвана, взяв разницу между наименьшим и ближайшим к наименьшему элементу, если ничья все еще не нарушена, повторите процедуру со следующим наименьшим и так далее, если ничья все еще не нарушена, выберите произвольно.

ШАГ 6. Повторяйте шаги с 5 по 6, пока требования обода не будут удовлетворены.

ШАГ 7. Поместите эти присвоенные значения в исходный TT в соответствующую ячейку.

ШАГ 8. Рассчитайте стоимость перевозки ТТ. Этот расчет представляет собой сумму произведения транспортных затрат на единицу продукции и выделенного количества. **

Ответы

cbo Oct 16 2020 at 17:21

Я не полностью понял ваши назначения после 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().

Удачи !