2017-10-22 20 views
1

RのLpSolveに関する質問があります。次のデータを含むパネルがあります。Football player ID(約500人のプレイヤー)獲得したゴールとプレイヤーのコストです。私はこのデータから行列を作りたいと思いますが、このように大量のデータを扱う方法はわかりません(私は約500人のサッカー選手がいるので500行あります)。R LpSolve Budget Restrictionでピックを最適化する方法

目標は、1,000,000の予算で最適なプレーヤー数を選択することです。各選手は、選出されたゴール数で最適化された1回のみ選択できます。

最終的には、ほとんどのゴールを決めた選手を最適に選び、予算を(ほとんど)使い切っていなければなりません。

私はRで比較的新しいので、LpSolveでこの問題を解決する方法はまだ分かりません。マトリックスの生産と制約では失敗します。

私はあなたの助けに非常に感謝しています!

私のパネルは次のようになります(

footballplayerID |ゲームショウ| | avggoals |費用パープレイヤー

  1. 233276 | 120 | 80 | 50.000
  2. 474823 | 200 | 140 | 34.000
  3. 192834 | 150 | 90 | 14.000
  4. 192833 | 30 | 50 | 90.000
  5. 129834 | 204 | 129 | 70.000
  6. 347594 | 123 | 19 | 10.000
  7. 203845 | 129 | 57 | 43.000
  8. 128747 | 98 | 124 | 140.000

  1. 123749 | 128 | 182 | 100.000

答えて

0

まず私はこのようなDF作成: < DF - read.tableを(テキスト= 「footballplayerIDを| gamesplayed | avggoals | costsperplayer 233276 | 120 | 80 | 50000 474823 | 200 | 140 | 34000 192834 | 150 | 90 | 14000 192833 | 30 | 50 | 90000 129834 | 204 | 129 | 70000 347594 | 123 | 19 | 10000 203845 | 129 | 57 | 43000 128747 | 98 | 124 | 1400001" 、 header = TRUE、 stringsAsFactors = FALSE、 9月= "|" )

library(lpSolve) 

目的関数の係数はavggoalsです:

obj_fun <- df$avggoals 

制約が100.000以下にする必要があるcostperplayerの合計です。000

constraints <- matrix(df$costsperplayer, nrow = 1) 
c_dir <- "<=" 
c_rhs <- 1000000 

lp()で問題を解決できます。引数all.bin = TRUEはあなたがプレイヤーを1回選ぶか全く選ぶかを確認します。

lp <- lp("max", 
     obj_fun, 
     constraints, 
     c_dir, 
     c_rhs, 
     all.bin = TRUE) 

あなたは、より選択された選手を見てすることができます

df[lp$solution == 1, ] 
関連する問題