0

Rプロジェクトのシンプレックス法についてすべて学習しようとしていますが、残念ながらこの場合はクラッシュしました:

私たちは 24 時間営業の店舗を経営しており、1 日に 6 シフト (8-12、12-16 など) があり、1 人の従業員が最大 8 時間働くことができる場合、何人の従業員が必要かを知る必要があります。1シフトの従業員の制限は次のとおりです。

  • 0:00-4:00 < 5 4:00-8:00 < 7 8:00-12:00< 15 12:00-16:00 <10 16:00-20:00 <15 20:00-24 :00 <9

私はこれを試しました:

library(boot)
a=c(1,1,1,1,1,1)
w1=c(1,1)
w2=c(1,1)
w3=c(1,1)
w4=c(1,1)
w5=c(1,1)
w6=c(1,1)
A1=rbind(w1,w2,w3,w4,w5,w6)
b1=c(5,7,15,10,15,9)
simplex(a=a,A1=A1,b1=b1,maxi=TRUE)

Error in`[<-`(`*tmp*`, , basic, value = iden(M)) : 
   index is out of borders

しかし、うまくいきません。

4

2 に答える 2

0

このエラーは、入力行列とベクトルの次元が正しくないために発生します。

この例の係数ベクトル a は次元 6 であるため、目的関数のベクトル x も次元 6 を持つ必要があります。また、 simplex() に提供される b1 も次元 6 を持つため、制約の A1 に従います

A1 * x <= b1

6 x 6 行列でなければなりません。ただし、この例の A は 6 x 2 の行列のみです。これにより、エラー メッセージが表示されます。(simplex() が最初に入力をチェックし、よりユーザーフレンドリーなメッセージを発行した方がよかったでしょう...)

これは正しい寸法の例で、うまくいきます:

library(boot)
a = rep(1, 6)                        # vector with 6 ones
A1 = matrix(1, nrow=6, ncol=6)       # 6x6 matrix with all ones
b1 = c(5, 7, 15, 10, 15, 9)
simplex(a=a, A1=A1, b1=b1, maxi=TRUE)

この修正された例は、特定のシンプレックスの問題を実際に解決しようとしているわけではなく、simplex() の正しい使用法を示しているだけであることに注意してください。

一般に、simplex() への入力の入力次元を注意深くチェックする価値があります。それらはヘルプページでうまく説明されています:

?simplex
于 2015-09-04T17:26:48.880 に答える
0

わかりました、4日後に受け取りました:))他の誰かが同じ問題を抱えている場合は、ここに結果を投稿します. ここでの主な困難は、「人」を「1シフトの時間数」として計算することです

a=c(1,1,1,1,1,1)
> w1=c(4,0,0,0,0,4)
> w2=c(4,4,0,0,0,0)
> w3=c(0,4,4,0,0,0)
> w4=c(0,0,4,4,0,0)
> w5=c(0,0,0,4,4,0)
> w6=c(0,0,0,0,4,4)
> b1=c(20,28,60,40,60,36)
> library(boot)
> simplex(a=a,A1=rbind(w1,w2,w3,w4,w5,w6)
+ ,b1=b1,maxi=T)

線形計画法の結果

呼び出し : simplex(a = a, A1 = rbind(w1, w2, w3, w4, w5, w6), b1 = b1, maxi = T)

目的関数係数の最大化問題

x1 x2 x3 x4 x5 x6 
 1  1  1  1  1  1 

最適解には次の値があります

x1 x2 x3 x4 x5 x6 
 5  2 10  0  9  0 

目的関数の最適値は 26 です。CLOSED、対象を削除するか、他の人に任せます。管理者の編集と @WhiteViking に感謝します。

于 2015-09-06T15:25:17.157 に答える