2017-10-22 12 views
1

R에 LpSolve에 대한 질문이 있습니다. 다음 데이터가 포함 된 패널이 있습니다. 축구 선수 ID (약 500 명의 선수), 각 선수가 이미 얼마나 많은 게임을했는지, 숫자 선수가 얻은 득점과 비용. 이 데이터로 행렬을 만들고 싶지만, 이렇게 많은 양의 데이터 (이 게임은 약 500 개의 축구 선수가 있으므로 500 행)에서 어떻게 작동하는지 모르겠습니다.R LpSolve 예산 제한을 사용하여 예상치를 최적화하는 방법

목표는 1,000,000의 예산으로 최적의 플레이어 수를 선택하는 것입니다. 각 플레이어는 득점 한 득점 갯수로 최적화 된 한 번만 선택할 수 있습니다.

결국 나는 가장 많은 골을 넣은 선수를 최적으로 선택하고 예산을 거의 다 써 버려야합니다.

저는 R이 비교적 새롭기 때문에 LpSolve로이 문제를 해결하는 방법을 아직 모르고 매트릭스 생산과 제약에서 실패합니다.

여러분의 도움에 매우 감사드립니다!

내 패널이 (예)처럼 보이는 :

footballplayerID | gamesplayed | avggoals | costsperplayer

  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 192,834 | 150 | 90 | 14000 192,833 | 30 | 50 | 90000 129,834 | 204 | 129 | 70000 347,594 | 123 | 19 | 10000 203,845 | 129 | 57 | 43000 128,747 | 98 | 124 | 1,400,001 " 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()으로 lp 문제를 해결할 수 있습니다. 인수 all.bin = TRUE은 플레이어를 한 번 선택했는지 전혀 선택하지 않았는지 확인합니다.

lp <- lp("max", 
     obj_fun, 
     constraints, 
     c_dir, 
     c_rhs, 
     all.bin = TRUE) 
당신은보다 선택의 선수를 살펴 가질 수

:

df[lp$solution == 1, ]