我是 R 新手,我有以下問題:我需要解決一個數值優化問題,在該問題中我重新分配一個單位的勞動投入 (V20),以使整體生產力差異增加。我必須迭代這個程序,直到它收斂。為此,優化后每行的生產率差異 (Diff20) 必須相等。
我的方法是計算最大和最小生產率差異(Diff_max,Diff_min),并從具有最高生產率差異 Diff_max 的行中轉移一個單位的勞動投入(V20)(這表示生產率下降,因為需要更多的勞動力投入)一定水平的產出)到具有最低生產率差異 Diff_min 的行(表示生產率的提高,因為一定水平的產出需要更少的勞動力投入)。
我嘗試將 while 回圈與該行的 if 條件組合為 Diff_max 或 Diff_min。
不幸的是,這根本不起作用,所以我什至不能提供適當的錯誤訊息。
你們中有人知道如何解決/解決這個問題嗎?如果你能幫助我,那就太好了!提前謝謝了!
df <- data.frame("PF"=c("PF1","PF2","PF3","PF4","PF5"),"V19"=c(2.6,5.9,0.5,0.1,3.0),"V20"=c(2.1,7.2,0.3,0.2,2.3), "F19"=c(26,80,10,7,24), "F20"=c(28,90,3,5,13), "A19"=c(4,320,5,0,80), "A20"=c(2.7,458,0,0,45), "B19"=c(1,6,0,0,5), "B20"=c(2,5,0,0,3))
df$num19 <- df$V19*220
df$denom19 <- (df$F19 df$A19 df$B19)
df$num20 <- df$V20*220
df$denom20 <- (df$F20 df$A20 df$B20)
df$rat19 <- df$num19/df$denom19
df$rat20 <- df$num20/df$denom20
df$Diff20 <- df$rat20 - df$rat19
df$Diff_mean <- mean(df$Diff20)
df$Diff_max <- max(df$Diff20)
df$Diff_min <- min(df$Diff20)
while (df$Diff_max> df$Diff_mean) {
if (df$Diff20 == df$Diff_max) {
df$V20 <- df$V20 0.1
}
if (df$Diff20 == df$Diff_min) {
df$V20 <- df$V20-0.1
}
}
uj5u.com熱心網友回復:
正如 JKupzig 指出的那樣,回圈中的條件沒有更新。
運行代碼我注意到另外兩件事:
- 通過增加最大值的提名者并減少最小值的提名者,它不會收斂。
- 在 0.1 時,網格大小似乎太大而無法收斂,我將其縮小,因此最小的作業示例會收斂。
df <- data.frame("PF"=c("PF1","PF2","PF3","PF4","PF5"),
"V19"=c(2.6,5.9,0.5,0.1,3.0),
"V20"=c(2.1,7.2,0.3,0.2,2.3),
"F19"=c(26,80,10,7,24),
"F20"=c(28,90,3,5,13),
"A19"=c(4,320,5,0,80),
"A20"=c(2.7,458,0,0,45),
"B19"=c(1,6,0,0,5),
"B20"=c(2,5,0,0,3))
df$num19 <- df$V19*220
df$denom19 <- (df$F19 df$A19 df$B19)
df$num20 <- df$V20*220
df$denom20 <- (df$F20 df$A20 df$B20)
df$rat19 <- df$num19/df$denom19
df$rat20 <- df$num20/df$denom20
df$Diff20 <- df$rat20 - df$rat19
# df$Diff_mean <- mean(df$Diff20)
# df$Diff_max <- max(df$Diff20)
# df$Diff_min <- min(df$Diff20)
df
while(round(max(df$Diff20),3) > round(mean(df$Diff20),3)){
df[df$Diff20 == max(df$Diff20), "V20"] <- df[df$Diff20 == max(df$Diff20), "V20"] - 0.00001
df[df$Diff20 == min(df$Diff20), "V20"] <- df[df$Diff20 == min(df$Diff20), "V20"] 0.00001
df$num20 <- df$V20*220
df$rat20 <- df$num20/df$denom20
df$Diff20 <- df$rat20 - df$rat19
}
df
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/427549.html
