Programma R per risolvere TP con il mio metodo
Ho sviluppato un nuovo metodo per risolvere TP, ma sono molto lento con la programmazione, puoi aiutarmi a scrivere il programma per il metodo ???
** III. ALGOTITMO DI AOCM PASSO 1. Sottrai il costo più piccolo da ogni elemento di ogni riga della tabella di trasporto e mettilo sopra a destra di quell'elemento.
FASE 2. Sottrai il costo più piccolo da ogni elemento di ogni colonna della tabella di trasporto e mettilo in fondo a destra di quell'elemento.
FASE 3. Creare una nuova matrice i cui elementi siano il valore medio della parte superiore destra e inferiore destra degli elementi delle fasi 1 e 2.
FASE 4. Trova le penalità di riga e colonna prendendo la differenza tra il valore più piccolo e successivo più piccolo in riga e colonna.
PASSAGGIO 5. Identificare la penalità maggiore e allocare la quantità massima possibile a quella cella con il valore minimo dell'elemento nella riga o colonna corrispondente. Se c'è un pareggio tra le penalità maggiori, allora il pareggio può essere risolto prendendo la differenza tra l'elemento più piccolo e quello vicino al più piccolo, se il pareggio non è ancora risolto, ripetere la procedura con il prossimo al più piccolo successivo e così via, se il pareggio non è ancora rotto, selezionare arbitrariamente.
FASE 6. Ripetere i passaggi da 5 a 6 finché il requisito del cerchio non è soddisfatto.
PASSAGGIO 7. Mettere questi valori allocati nel TT originale nella cella corrispondente.
FASE 8. Calcola il costo di trasporto di TT. Questo calcolo è la somma del prodotto del costo di trasporto unitario e della quantità allocata. **
Risposte
Non ho compreso appieno i tuoi compiti dopo il 4 ° punto, ma questo dovrebbe aiutarti a iniziare (utilizzando i dati forniti nella tua prima domanda):
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
Quindi puoi usare ife elsestrutturare in 5; whileper il 6 ed esporta nuovamente i tuoi dati per eccellere readr::write_excel_csv().
In bocca al lupo !